summaryrefslogtreecommitdiff
path: root/lib/mesa/src/amd/common
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2017-12-31 07:12:27 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2017-12-31 07:12:27 +0000
commit051645c92924bf915d82bf219f2ed67309b5577a (patch)
tree4aae126dd8e5a18c6a9926a5468d1561e6038a07 /lib/mesa/src/amd/common
parent2dae6fe6f74cf7fb9fd65285302c0331d9786b00 (diff)
Merge Mesa 17.2.8
Diffstat (limited to 'lib/mesa/src/amd/common')
-rw-r--r--lib/mesa/src/amd/common/Makefile.am51
-rw-r--r--lib/mesa/src/amd/common/Makefile.in859
-rw-r--r--lib/mesa/src/amd/common/Makefile.sources29
-rw-r--r--lib/mesa/src/amd/common/ac_binary.c43
-rw-r--r--lib/mesa/src/amd/common/ac_binary.h20
-rw-r--r--lib/mesa/src/amd/common/ac_debug.c429
-rw-r--r--lib/mesa/src/amd/common/ac_debug.h46
-rw-r--r--lib/mesa/src/amd/common/ac_llvm_build.c1544
-rw-r--r--lib/mesa/src/amd/common/ac_llvm_build.h271
-rw-r--r--lib/mesa/src/amd/common/ac_llvm_helper.cpp52
-rw-r--r--lib/mesa/src/amd/common/ac_llvm_util.c153
-rw-r--r--lib/mesa/src/amd/common/ac_llvm_util.h56
-rw-r--r--lib/mesa/src/amd/common/ac_nir_to_llvm.c4937
-rw-r--r--lib/mesa/src/amd/common/ac_nir_to_llvm.h162
-rw-r--r--lib/mesa/src/amd/common/amd_family.h10
-rw-r--r--lib/mesa/src/amd/common/amdgpu_id.h27
-rw-r--r--lib/mesa/src/amd/common/gfx9d.h7479
-rw-r--r--lib/mesa/src/amd/common/r600d_common.h80
-rw-r--r--lib/mesa/src/amd/common/sid.h286
-rw-r--r--lib/mesa/src/amd/common/sid_tables.h8490
-rw-r--r--lib/mesa/src/amd/common/sid_tables.py310
21 files changed, 22622 insertions, 2712 deletions
diff --git a/lib/mesa/src/amd/common/Makefile.am b/lib/mesa/src/amd/common/Makefile.am
deleted file mode 100644
index 788152d85..000000000
--- a/lib/mesa/src/amd/common/Makefile.am
+++ /dev/null
@@ -1,51 +0,0 @@
-# Copyright © 2016 Bas Nieuwenhuizen
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-include Makefile.sources
-
-# TODO cleanup these
-AM_CPPFLAGS = \
- $(VALGRIND_CFLAGS) \
- $(DEFINES) \
- -I$(top_srcdir)/include \
- -I$(top_builddir)/src \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src/compiler \
- -I$(top_builddir)/src/compiler/nir \
- -I$(top_srcdir)/src/compiler \
- -I$(top_srcdir)/src/mapi \
- -I$(top_srcdir)/src/mesa \
- -I$(top_srcdir)/src/mesa/drivers/dri/common \
- -I$(top_srcdir)/src/gallium/auxiliary \
- -I$(top_srcdir)/src/gallium/include
-
-AM_CFLAGS = $(VISIBILITY_CFLAGS) \
- $(PTHREAD_CFLAGS) \
- $(LLVM_CFLAGS) \
- $(LIBELF_CFLAGS)
-
-AM_CXXFLAGS = \
- $(VISIBILITY_CXXFLAGS) \
- $(LLVM_CXXFLAGS)
-
-noinst_LTLIBRARIES = libamd_common.la
-
-libamd_common_la_SOURCES = $(AMD_COMPILER_SOURCES)
diff --git a/lib/mesa/src/amd/common/Makefile.in b/lib/mesa/src/amd/common/Makefile.in
deleted file mode 100644
index 94e800cef..000000000
--- a/lib/mesa/src/amd/common/Makefile.in
+++ /dev/null
@@ -1,859 +0,0 @@
-# Makefile.in generated by automake 1.12.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Copyright © 2016 Bas Nieuwenhuizen
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-# Copyright © 2016 Bas Nieuwenhuizen
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
- esac; \
- test $$am__dry = yes; \
- }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/Makefile.sources $(top_srcdir)/bin/depcomp
-subdir = src/amd/common
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gnu_make.m4 \
- $(top_srcdir)/m4/ax_check_python_mako_module.m4 \
- $(top_srcdir)/m4/ax_gcc_builtin.m4 \
- $(top_srcdir)/m4/ax_gcc_func_attribute.m4 \
- $(top_srcdir)/m4/ax_prog_bison.m4 \
- $(top_srcdir)/m4/ax_prog_flex.m4 \
- $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
- $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
- $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
- $(top_srcdir)/VERSION $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libamd_common_la_LIBADD =
-am__objects_1 = ac_binary.lo ac_llvm_helper.lo ac_llvm_util.lo \
- ac_nir_to_llvm.lo
-am_libamd_common_la_OBJECTS = $(am__objects_1)
-libamd_common_la_OBJECTS = $(am_libamd_common_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@
-depcomp = $(SHELL) $(top_srcdir)/bin/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo " CCLD " $@;
-am__v_CCLD_1 =
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo " CXX " $@;
-am__v_CXX_1 =
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo " CXXLD " $@;
-am__v_CXXLD_1 =
-SOURCES = $(libamd_common_la_SOURCES)
-DIST_SOURCES = $(libamd_common_la_SOURCES)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDGPU_CFLAGS = @AMDGPU_CFLAGS@
-AMDGPU_LIBS = @AMDGPU_LIBS@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BSYMBOLIC = @BSYMBOLIC@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CLANG_RESOURCE_DIR = @CLANG_RESOURCE_DIR@
-CLOCK_LIB = @CLOCK_LIB@
-CLOVER_STD_OVERRIDE = @CLOVER_STD_OVERRIDE@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-D3D_DRIVER_INSTALL_DIR = @D3D_DRIVER_INSTALL_DIR@
-DEFINES = @DEFINES@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DLOPEN_LIBS = @DLOPEN_LIBS@
-DRI2PROTO_CFLAGS = @DRI2PROTO_CFLAGS@
-DRI2PROTO_LIBS = @DRI2PROTO_LIBS@
-DRI3PROTO_CFLAGS = @DRI3PROTO_CFLAGS@
-DRI3PROTO_LIBS = @DRI3PROTO_LIBS@
-DRIGL_CFLAGS = @DRIGL_CFLAGS@
-DRIGL_LIBS = @DRIGL_LIBS@
-DRI_DRIVER_INSTALL_DIR = @DRI_DRIVER_INSTALL_DIR@
-DRI_DRIVER_SEARCH_DIR = @DRI_DRIVER_SEARCH_DIR@
-DRI_LIB_DEPS = @DRI_LIB_DEPS@
-DRI_PC_REQ_PRIV = @DRI_PC_REQ_PRIV@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGL_CFLAGS = @EGL_CFLAGS@
-EGL_CLIENT_APIS = @EGL_CLIENT_APIS@
-EGL_LIB_DEPS = @EGL_LIB_DEPS@
-EGL_NATIVE_PLATFORM = @EGL_NATIVE_PLATFORM@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXPAT_CFLAGS = @EXPAT_CFLAGS@
-EXPAT_LIBS = @EXPAT_LIBS@
-FGREP = @FGREP@
-FREEDRENO_CFLAGS = @FREEDRENO_CFLAGS@
-FREEDRENO_LIBS = @FREEDRENO_LIBS@
-GALLIUM_PIPE_LOADER_DEFINES = @GALLIUM_PIPE_LOADER_DEFINES@
-GBM_PC_LIB_PRIV = @GBM_PC_LIB_PRIV@
-GBM_PC_REQ_PRIV = @GBM_PC_REQ_PRIV@
-GC_SECTIONS = @GC_SECTIONS@
-GLESv1_CM_LIB_DEPS = @GLESv1_CM_LIB_DEPS@
-GLESv1_CM_PC_LIB_PRIV = @GLESv1_CM_PC_LIB_PRIV@
-GLESv2_LIB_DEPS = @GLESv2_LIB_DEPS@
-GLESv2_PC_LIB_PRIV = @GLESv2_PC_LIB_PRIV@
-GLPROTO_CFLAGS = @GLPROTO_CFLAGS@
-GLPROTO_LIBS = @GLPROTO_LIBS@
-GLVND_CFLAGS = @GLVND_CFLAGS@
-GLVND_LIBS = @GLVND_LIBS@
-GLX_TLS = @GLX_TLS@
-GL_LIB = @GL_LIB@
-GL_LIB_DEPS = @GL_LIB_DEPS@
-GL_PC_CFLAGS = @GL_PC_CFLAGS@
-GL_PC_LIB_PRIV = @GL_PC_LIB_PRIV@
-GL_PC_REQ_PRIV = @GL_PC_REQ_PRIV@
-GREP = @GREP@
-HAVE_XF86VIDMODE = @HAVE_XF86VIDMODE@
-INDENT = @INDENT@
-INDENT_FLAGS = @INDENT_FLAGS@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTEL_CFLAGS = @INTEL_CFLAGS@
-INTEL_LIBS = @INTEL_LIBS@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LD_NO_UNDEFINED = @LD_NO_UNDEFINED@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBCLC_INCLUDEDIR = @LIBCLC_INCLUDEDIR@
-LIBCLC_LIBEXECDIR = @LIBCLC_LIBEXECDIR@
-LIBDRM_CFLAGS = @LIBDRM_CFLAGS@
-LIBDRM_LIBS = @LIBDRM_LIBS@
-LIBELF_CFLAGS = @LIBELF_CFLAGS@
-LIBELF_LIBS = @LIBELF_LIBS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBSENSORS_LDFLAGS = @LIBSENSORS_LDFLAGS@
-LIBSHA1_CFLAGS = @LIBSHA1_CFLAGS@
-LIBSHA1_LIBS = @LIBSHA1_LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_DIR = @LIB_DIR@
-LIB_EXT = @LIB_EXT@
-LIPO = @LIPO@
-LLVM_BINDIR = @LLVM_BINDIR@
-LLVM_CFLAGS = @LLVM_CFLAGS@
-LLVM_CONFIG = @LLVM_CONFIG@
-LLVM_CPPFLAGS = @LLVM_CPPFLAGS@
-LLVM_CXXFLAGS = @LLVM_CXXFLAGS@
-LLVM_INCLUDEDIR = @LLVM_INCLUDEDIR@
-LLVM_LDFLAGS = @LLVM_LDFLAGS@
-LLVM_LIBDIR = @LLVM_LIBDIR@
-LLVM_LIBS = @LLVM_LIBS@
-LLVM_VERSION = @LLVM_VERSION@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MESA_LLVM = @MESA_LLVM@
-MKDIR_P = @MKDIR_P@
-MSVC2013_COMPAT_CFLAGS = @MSVC2013_COMPAT_CFLAGS@
-MSVC2013_COMPAT_CXXFLAGS = @MSVC2013_COMPAT_CXXFLAGS@
-NINE_MAJOR = @NINE_MAJOR@
-NINE_MINOR = @NINE_MINOR@
-NINE_TINY = @NINE_TINY@
-NINE_VERSION = @NINE_VERSION@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NOUVEAU_CFLAGS = @NOUVEAU_CFLAGS@
-NOUVEAU_LIBS = @NOUVEAU_LIBS@
-NVVIEUX_CFLAGS = @NVVIEUX_CFLAGS@
-NVVIEUX_LIBS = @NVVIEUX_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OMX_CFLAGS = @OMX_CFLAGS@
-OMX_LIBS = @OMX_LIBS@
-OMX_LIB_INSTALL_DIR = @OMX_LIB_INSTALL_DIR@
-OPENCL_LIBNAME = @OPENCL_LIBNAME@
-OPENCL_VERSION = @OPENCL_VERSION@
-OPENSSL_CFLAGS = @OPENSSL_CFLAGS@
-OPENSSL_LIBS = @OPENSSL_LIBS@
-OSMESA_LIB = @OSMESA_LIB@
-OSMESA_LIB_DEPS = @OSMESA_LIB_DEPS@
-OSMESA_PC_LIB_PRIV = @OSMESA_PC_LIB_PRIV@
-OSMESA_PC_REQ = @OSMESA_PC_REQ@
-OSMESA_VERSION = @OSMESA_VERSION@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-POSIX_SHELL = @POSIX_SHELL@
-PRESENTPROTO_CFLAGS = @PRESENTPROTO_CFLAGS@
-PRESENTPROTO_LIBS = @PRESENTPROTO_LIBS@
-PTHREADSTUBS_CFLAGS = @PTHREADSTUBS_CFLAGS@
-PTHREADSTUBS_LIBS = @PTHREADSTUBS_LIBS@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-PWR8_CFLAGS = @PWR8_CFLAGS@
-PYTHON2 = @PYTHON2@
-RADEON_CFLAGS = @RADEON_CFLAGS@
-RADEON_LIBS = @RADEON_LIBS@
-RANLIB = @RANLIB@
-RM = @RM@
-SED = @SED@
-SELINUX_CFLAGS = @SELINUX_CFLAGS@
-SELINUX_LIBS = @SELINUX_LIBS@
-SET_MAKE = @SET_MAKE@
-SHA1_CFLAGS = @SHA1_CFLAGS@
-SHA1_LIBS = @SHA1_LIBS@
-SHELL = @SHELL@
-SIMPENROSE_CFLAGS = @SIMPENROSE_CFLAGS@
-SIMPENROSE_LIBS = @SIMPENROSE_LIBS@
-SSE41_CFLAGS = @SSE41_CFLAGS@
-STRIP = @STRIP@
-SWR_AVX2_CXXFLAGS = @SWR_AVX2_CXXFLAGS@
-SWR_AVX_CXXFLAGS = @SWR_AVX_CXXFLAGS@
-SWR_CXX11_CXXFLAGS = @SWR_CXX11_CXXFLAGS@
-TIMESTAMP_CMD = @TIMESTAMP_CMD@
-VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
-VALGRIND_LIBS = @VALGRIND_LIBS@
-VA_CFLAGS = @VA_CFLAGS@
-VA_LIBS = @VA_LIBS@
-VA_LIB_INSTALL_DIR = @VA_LIB_INSTALL_DIR@
-VA_MAJOR = @VA_MAJOR@
-VA_MINOR = @VA_MINOR@
-VC4_CFLAGS = @VC4_CFLAGS@
-VC4_LIBS = @VC4_LIBS@
-VDPAU_CFLAGS = @VDPAU_CFLAGS@
-VDPAU_LIBS = @VDPAU_LIBS@
-VDPAU_LIB_INSTALL_DIR = @VDPAU_LIB_INSTALL_DIR@
-VDPAU_MAJOR = @VDPAU_MAJOR@
-VDPAU_MINOR = @VDPAU_MINOR@
-VERSION = @VERSION@
-VG_LIB_DEPS = @VG_LIB_DEPS@
-VISIBILITY_CFLAGS = @VISIBILITY_CFLAGS@
-VISIBILITY_CXXFLAGS = @VISIBILITY_CXXFLAGS@
-VL_CFLAGS = @VL_CFLAGS@
-VL_LIBS = @VL_LIBS@
-VULKAN_ICD_INSTALL_DIR = @VULKAN_ICD_INSTALL_DIR@
-WAYLAND_CFLAGS = @WAYLAND_CFLAGS@
-WAYLAND_LIBS = @WAYLAND_LIBS@
-WAYLAND_SCANNER = @WAYLAND_SCANNER@
-WAYLAND_SCANNER_CFLAGS = @WAYLAND_SCANNER_CFLAGS@
-WAYLAND_SCANNER_LIBS = @WAYLAND_SCANNER_LIBS@
-X11_INCLUDES = @X11_INCLUDES@
-XA_MAJOR = @XA_MAJOR@
-XA_MINOR = @XA_MINOR@
-XA_TINY = @XA_TINY@
-XA_VERSION = @XA_VERSION@
-XCB_DRI2_CFLAGS = @XCB_DRI2_CFLAGS@
-XCB_DRI2_LIBS = @XCB_DRI2_LIBS@
-XCB_DRI3_CFLAGS = @XCB_DRI3_CFLAGS@
-XCB_DRI3_LIBS = @XCB_DRI3_LIBS@
-XF86VIDMODE_CFLAGS = @XF86VIDMODE_CFLAGS@
-XF86VIDMODE_LIBS = @XF86VIDMODE_LIBS@
-XLIBGL_CFLAGS = @XLIBGL_CFLAGS@
-XLIBGL_LIBS = @XLIBGL_LIBS@
-XVMC_CFLAGS = @XVMC_CFLAGS@
-XVMC_LIBS = @XVMC_LIBS@
-XVMC_LIB_INSTALL_DIR = @XVMC_LIB_INSTALL_DIR@
-XVMC_MAJOR = @XVMC_MAJOR@
-XVMC_MINOR = @XVMC_MINOR@
-XXD = @XXD@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-acv_mako_found = @acv_mako_found@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-ax_pthread_config = @ax_pthread_config@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-ifGNUmake = @ifGNUmake@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AMD_COMPILER_SOURCES := \
- ac_binary.c \
- ac_binary.h \
- ac_llvm_helper.cpp \
- ac_llvm_util.c \
- ac_llvm_util.h \
- ac_nir_to_llvm.c \
- ac_nir_to_llvm.h
-
-
-# TODO cleanup these
-AM_CPPFLAGS = \
- $(VALGRIND_CFLAGS) \
- $(DEFINES) \
- -I$(top_srcdir)/include \
- -I$(top_builddir)/src \
- -I$(top_srcdir)/src \
- -I$(top_builddir)/src/compiler \
- -I$(top_builddir)/src/compiler/nir \
- -I$(top_srcdir)/src/compiler \
- -I$(top_srcdir)/src/mapi \
- -I$(top_srcdir)/src/mesa \
- -I$(top_srcdir)/src/mesa/drivers/dri/common \
- -I$(top_srcdir)/src/gallium/auxiliary \
- -I$(top_srcdir)/src/gallium/include
-
-AM_CFLAGS = $(VISIBILITY_CFLAGS) \
- $(PTHREAD_CFLAGS) \
- $(LLVM_CFLAGS) \
- $(LIBELF_CFLAGS)
-
-AM_CXXFLAGS = \
- $(VISIBILITY_CXXFLAGS) \
- $(LLVM_CXXFLAGS)
-
-noinst_LTLIBRARIES = libamd_common.la
-libamd_common_la_SOURCES = $(AMD_COMPILER_SOURCES)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .cpp .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.sources $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/amd/common/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign src/amd/common/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-$(srcdir)/Makefile.sources:
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
- @list='$(noinst_LTLIBRARIES)'; \
- locs=`for p in $$list; do echo $$p; done | \
- sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
- sort -u`; \
- test -z "$$locs" || { \
- echo rm -f $${locs}; \
- rm -f $${locs}; \
- }
-libamd_common.la: $(libamd_common_la_OBJECTS) $(libamd_common_la_DEPENDENCIES) $(EXTRA_libamd_common_la_DEPENDENCIES)
- $(AM_V_CXXLD)$(CXXLINK) $(libamd_common_la_OBJECTS) $(libamd_common_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ac_binary.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ac_llvm_helper.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ac_llvm_util.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ac_nir_to_llvm.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
-check: check-am
-all-am: Makefile $(LTLIBRARIES)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
- clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \
- distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/lib/mesa/src/amd/common/Makefile.sources b/lib/mesa/src/amd/common/Makefile.sources
deleted file mode 100644
index 380dba086..000000000
--- a/lib/mesa/src/amd/common/Makefile.sources
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright © 2016 Bas Nieuwenhuizen
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-# IN THE SOFTWARE.
-
-AMD_COMPILER_SOURCES := \
- ac_binary.c \
- ac_binary.h \
- ac_llvm_helper.cpp \
- ac_llvm_util.c \
- ac_llvm_util.h \
- ac_nir_to_llvm.c \
- ac_nir_to_llvm.h
diff --git a/lib/mesa/src/amd/common/ac_binary.c b/lib/mesa/src/amd/common/ac_binary.c
index 01cf000d9..1bf52c783 100644
--- a/lib/mesa/src/amd/common/ac_binary.c
+++ b/lib/mesa/src/amd/common/ac_binary.c
@@ -109,7 +109,7 @@ static void parse_relocs(Elf *elf, Elf_Data *relocs, Elf_Data *symbols,
}
}
-void ac_elf_read(const char *elf_data, unsigned elf_size,
+bool ac_elf_read(const char *elf_data, unsigned elf_size,
struct ac_shader_binary *binary)
{
char *elf_buffer;
@@ -118,6 +118,7 @@ void ac_elf_read(const char *elf_data, unsigned elf_size,
Elf_Data *symbols = NULL, *relocs = NULL;
size_t section_str_index;
unsigned symbol_sh_link = 0;
+ bool success = true;
/* One of the libelf implementations
* (http://www.mr511.de/software/english.htm) requires calling
@@ -137,7 +138,8 @@ void ac_elf_read(const char *elf_data, unsigned elf_size,
GElf_Shdr section_header;
if (gelf_getshdr(section, &section_header) != &section_header) {
fprintf(stderr, "Failed to read ELF section header\n");
- return;
+ success = false;
+ break;
}
name = elf_strptr(elf, section_str_index, section_header.sh_name);
if (!strcmp(name, ".text")) {
@@ -148,6 +150,11 @@ void ac_elf_read(const char *elf_data, unsigned elf_size,
} else if (!strcmp(name, ".AMDGPU.config")) {
section_data = elf_getdata(section, section_data);
binary->config_size = section_data->d_size;
+ if (!binary->config_size) {
+ fprintf(stderr, ".AMDGPU.config is empty!\n");
+ success = false;
+ break;
+ }
binary->config = MALLOC(binary->config_size * sizeof(unsigned char));
memcpy(binary->config, section_data->d_buf, binary->config_size);
} else if (!strcmp(name, ".AMDGPU.disasm")) {
@@ -186,9 +193,9 @@ void ac_elf_read(const char *elf_data, unsigned elf_size,
binary->global_symbol_count = 1;
binary->config_size_per_symbol = binary->config_size;
}
+ return success;
}
-static
const unsigned char *ac_shader_binary_config_start(
const struct ac_shader_binary *binary,
uint64_t symbol_offset)
@@ -212,23 +219,28 @@ static const char *scratch_rsrc_dword1_symbol =
void ac_shader_binary_read_config(struct ac_shader_binary *binary,
struct ac_shader_config *conf,
- unsigned symbol_offset)
+ unsigned symbol_offset,
+ bool supports_spill)
{
unsigned i;
const unsigned char *config =
ac_shader_binary_config_start(binary, symbol_offset);
bool really_needs_scratch = false;
-
+ uint32_t wavesize = 0;
/* LLVM adds SGPR spills to the scratch size.
* Find out if we really need the scratch buffer.
*/
- for (i = 0; i < binary->reloc_count; i++) {
- const struct ac_shader_reloc *reloc = &binary->relocs[i];
+ if (supports_spill) {
+ really_needs_scratch = true;
+ } else {
+ for (i = 0; i < binary->reloc_count; i++) {
+ const struct ac_shader_reloc *reloc = &binary->relocs[i];
- if (!strcmp(scratch_rsrc_dword0_symbol, reloc->name) ||
- !strcmp(scratch_rsrc_dword1_symbol, reloc->name)) {
- really_needs_scratch = true;
- break;
+ if (!strcmp(scratch_rsrc_dword0_symbol, reloc->name) ||
+ !strcmp(scratch_rsrc_dword1_symbol, reloc->name)) {
+ really_needs_scratch = true;
+ break;
+ }
}
}
@@ -259,9 +271,7 @@ void ac_shader_binary_read_config(struct ac_shader_binary *binary,
case R_0286E8_SPI_TMPRING_SIZE:
case R_00B860_COMPUTE_TMPRING_SIZE:
/* WAVESIZE is in units of 256 dwords. */
- if (really_needs_scratch)
- conf->scratch_bytes_per_wave =
- G_00B860_WAVESIZE(value) * 256 * 4;
+ wavesize = value;
break;
case SPILLED_SGPRS:
conf->spilled_sgprs = value;
@@ -285,4 +295,9 @@ void ac_shader_binary_read_config(struct ac_shader_binary *binary,
if (!conf->spi_ps_input_addr)
conf->spi_ps_input_addr = conf->spi_ps_input_ena;
}
+
+ if (really_needs_scratch) {
+ /* sgprs spills aren't spilling */
+ conf->scratch_bytes_per_wave = G_00B860_WAVESIZE(wavesize) * 256 * 4;
+ }
}
diff --git a/lib/mesa/src/amd/common/ac_binary.h b/lib/mesa/src/amd/common/ac_binary.h
index 282f33d22..45f554e4f 100644
--- a/lib/mesa/src/amd/common/ac_binary.h
+++ b/lib/mesa/src/amd/common/ac_binary.h
@@ -24,9 +24,11 @@
*
*/
-#pragma once
+#ifndef AC_BINARY_H
+#define AC_BINARY_H
#include <stdint.h>
+#include <stdbool.h>
struct ac_shader_reloc {
char name[32];
@@ -62,6 +64,7 @@ struct ac_shader_binary {
/** Disassembled shader in a string. */
char *disasm_string;
+ char *llvm_ir_string;
};
struct ac_shader_config {
@@ -80,9 +83,20 @@ struct ac_shader_config {
* Parse the elf binary stored in \p elf_data and create a
* ac_shader_binary object.
*/
-void ac_elf_read(const char *elf_data, unsigned elf_size,
+bool ac_elf_read(const char *elf_data, unsigned elf_size,
struct ac_shader_binary *binary);
+/**
+ * @returns A pointer to the start of the configuration information for
+ * the function starting at \p symbol_offset of the binary.
+ */
+const unsigned char *ac_shader_binary_config_start(
+ const struct ac_shader_binary *binary,
+ uint64_t symbol_offset);
+
void ac_shader_binary_read_config(struct ac_shader_binary *binary,
struct ac_shader_config *conf,
- unsigned symbol_offset);
+ unsigned symbol_offset,
+ bool supports_spill);
+
+#endif /* AC_BINARY_H */
diff --git a/lib/mesa/src/amd/common/ac_debug.c b/lib/mesa/src/amd/common/ac_debug.c
new file mode 100644
index 000000000..79473ecb8
--- /dev/null
+++ b/lib/mesa/src/amd/common/ac_debug.c
@@ -0,0 +1,429 @@
+/*
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Marek Olšák <maraeo@gmail.com>
+ */
+
+#include "ac_debug.h"
+
+#include "sid.h"
+#include "gfx9d.h"
+#include "sid_tables.h"
+#include "util/u_math.h"
+#include "util/u_memory.h"
+
+/* Parsed IBs are difficult to read without colors. Use "less -R file" to
+ * read them, or use "aha -b -f file" to convert them to html.
+ */
+#define COLOR_RESET "\033[0m"
+#define COLOR_RED "\033[31m"
+#define COLOR_GREEN "\033[1;32m"
+#define COLOR_YELLOW "\033[1;33m"
+#define COLOR_CYAN "\033[1;36m"
+
+#define INDENT_PKT 8
+
+static void print_spaces(FILE *f, unsigned num)
+{
+ fprintf(f, "%*s", num, "");
+}
+
+static void print_value(FILE *file, uint32_t value, int bits)
+{
+ /* Guess if it's int or float */
+ if (value <= (1 << 15)) {
+ if (value <= 9)
+ fprintf(file, "%u\n", value);
+ else
+ fprintf(file, "%u (0x%0*x)\n", value, bits / 4, value);
+ } else {
+ float f = uif(value);
+
+ if (fabs(f) < 100000 && f*10 == floor(f*10))
+ fprintf(file, "%.1ff (0x%0*x)\n", f, bits / 4, value);
+ else
+ /* Don't print more leading zeros than there are bits. */
+ fprintf(file, "0x%0*x\n", bits / 4, value);
+ }
+}
+
+static void print_named_value(FILE *file, const char *name, uint32_t value,
+ int bits)
+{
+ print_spaces(file, INDENT_PKT);
+ fprintf(file, COLOR_YELLOW "%s" COLOR_RESET " <- ", name);
+ print_value(file, value, bits);
+}
+
+void ac_dump_reg(FILE *file, unsigned offset, uint32_t value,
+ uint32_t field_mask)
+{
+ int r, f;
+
+ for (r = 0; r < ARRAY_SIZE(sid_reg_table); r++) {
+ const struct si_reg *reg = &sid_reg_table[r];
+ const char *reg_name = sid_strings + reg->name_offset;
+
+ if (reg->offset == offset) {
+ bool first_field = true;
+
+ print_spaces(file, INDENT_PKT);
+ fprintf(file, COLOR_YELLOW "%s" COLOR_RESET " <- ",
+ reg_name);
+
+ if (!reg->num_fields) {
+ print_value(file, value, 32);
+ return;
+ }
+
+ for (f = 0; f < reg->num_fields; f++) {
+ const struct si_field *field = sid_fields_table + reg->fields_offset + f;
+ const int *values_offsets = sid_strings_offsets + field->values_offset;
+ uint32_t val = (value & field->mask) >>
+ (ffs(field->mask) - 1);
+
+ if (!(field->mask & field_mask))
+ continue;
+
+ /* Indent the field. */
+ if (!first_field)
+ print_spaces(file,
+ INDENT_PKT + strlen(reg_name) + 4);
+
+ /* Print the field. */
+ fprintf(file, "%s = ", sid_strings + field->name_offset);
+
+ if (val < field->num_values && values_offsets[val] >= 0)
+ fprintf(file, "%s\n", sid_strings + values_offsets[val]);
+ else
+ print_value(file, val,
+ util_bitcount(field->mask));
+
+ first_field = false;
+ }
+ return;
+ }
+ }
+
+ print_spaces(file, INDENT_PKT);
+ fprintf(file, COLOR_YELLOW "0x%05x" COLOR_RESET " <- 0x%08x\n", offset, value);
+}
+
+static void ac_parse_set_reg_packet(FILE *f, uint32_t *ib, unsigned count,
+ unsigned reg_offset)
+{
+ unsigned reg = ((ib[1] & 0xFFFF) << 2) + reg_offset;
+ unsigned index = ib[1] >> 28;
+ int i;
+
+ if (index != 0) {
+ print_spaces(f, INDENT_PKT);
+ fprintf(f, "INDEX = %u\n", index);
+ }
+
+ for (i = 0; i < count; i++)
+ ac_dump_reg(f, reg + i*4, ib[2+i], ~0);
+}
+
+static uint32_t *ac_parse_packet3(FILE *f, uint32_t *ib, int *num_dw,
+ int trace_id, enum chip_class chip_class,
+ ac_debug_addr_callback addr_callback,
+ void *addr_callback_data)
+{
+ unsigned count = PKT_COUNT_G(ib[0]);
+ unsigned op = PKT3_IT_OPCODE_G(ib[0]);
+ const char *predicate = PKT3_PREDICATE(ib[0]) ? "(predicate)" : "";
+ int i;
+
+ /* Print the name first. */
+ for (i = 0; i < ARRAY_SIZE(packet3_table); i++)
+ if (packet3_table[i].op == op)
+ break;
+
+ if (i < ARRAY_SIZE(packet3_table)) {
+ const char *name = sid_strings + packet3_table[i].name_offset;
+
+ if (op == PKT3_SET_CONTEXT_REG ||
+ op == PKT3_SET_CONFIG_REG ||
+ op == PKT3_SET_UCONFIG_REG ||
+ op == PKT3_SET_SH_REG)
+ fprintf(f, COLOR_CYAN "%s%s" COLOR_CYAN ":\n",
+ name, predicate);
+ else
+ fprintf(f, COLOR_GREEN "%s%s" COLOR_RESET ":\n",
+ name, predicate);
+ } else
+ fprintf(f, COLOR_RED "PKT3_UNKNOWN 0x%x%s" COLOR_RESET ":\n",
+ op, predicate);
+
+ /* Print the contents. */
+ switch (op) {
+ case PKT3_SET_CONTEXT_REG:
+ ac_parse_set_reg_packet(f, ib, count, SI_CONTEXT_REG_OFFSET);
+ break;
+ case PKT3_SET_CONFIG_REG:
+ ac_parse_set_reg_packet(f, ib, count, SI_CONFIG_REG_OFFSET);
+ break;
+ case PKT3_SET_UCONFIG_REG:
+ ac_parse_set_reg_packet(f, ib, count, CIK_UCONFIG_REG_OFFSET);
+ break;
+ case PKT3_SET_SH_REG:
+ ac_parse_set_reg_packet(f, ib, count, SI_SH_REG_OFFSET);
+ break;
+ case PKT3_ACQUIRE_MEM:
+ ac_dump_reg(f, R_0301F0_CP_COHER_CNTL, ib[1], ~0);
+ ac_dump_reg(f, R_0301F4_CP_COHER_SIZE, ib[2], ~0);
+ ac_dump_reg(f, R_030230_CP_COHER_SIZE_HI, ib[3], ~0);
+ ac_dump_reg(f, R_0301F8_CP_COHER_BASE, ib[4], ~0);
+ ac_dump_reg(f, R_0301E4_CP_COHER_BASE_HI, ib[5], ~0);
+ print_named_value(f, "POLL_INTERVAL", ib[6], 16);
+ break;
+ case PKT3_SURFACE_SYNC:
+ if (chip_class >= CIK) {
+ ac_dump_reg(f, R_0301F0_CP_COHER_CNTL, ib[1], ~0);
+ ac_dump_reg(f, R_0301F4_CP_COHER_SIZE, ib[2], ~0);
+ ac_dump_reg(f, R_0301F8_CP_COHER_BASE, ib[3], ~0);
+ } else {
+ ac_dump_reg(f, R_0085F0_CP_COHER_CNTL, ib[1], ~0);
+ ac_dump_reg(f, R_0085F4_CP_COHER_SIZE, ib[2], ~0);
+ ac_dump_reg(f, R_0085F8_CP_COHER_BASE, ib[3], ~0);
+ }
+ print_named_value(f, "POLL_INTERVAL", ib[4], 16);
+ break;
+ case PKT3_EVENT_WRITE:
+ ac_dump_reg(f, R_028A90_VGT_EVENT_INITIATOR, ib[1],
+ S_028A90_EVENT_TYPE(~0));
+ print_named_value(f, "EVENT_INDEX", (ib[1] >> 8) & 0xf, 4);
+ print_named_value(f, "INV_L2", (ib[1] >> 20) & 0x1, 1);
+ if (count > 0) {
+ print_named_value(f, "ADDRESS_LO", ib[2], 32);
+ print_named_value(f, "ADDRESS_HI", ib[3], 16);
+ }
+ break;
+ case PKT3_EVENT_WRITE_EOP:
+ ac_dump_reg(f, R_028A90_VGT_EVENT_INITIATOR, ib[1],
+ S_028A90_EVENT_TYPE(~0));
+ print_named_value(f, "EVENT_INDEX", (ib[1] >> 8) & 0xf, 4);
+ print_named_value(f, "TCL1_VOL_ACTION_ENA", (ib[1] >> 12) & 0x1, 1);
+ print_named_value(f, "TC_VOL_ACTION_ENA", (ib[1] >> 13) & 0x1, 1);
+ print_named_value(f, "TC_WB_ACTION_ENA", (ib[1] >> 15) & 0x1, 1);
+ print_named_value(f, "TCL1_ACTION_ENA", (ib[1] >> 16) & 0x1, 1);
+ print_named_value(f, "TC_ACTION_ENA", (ib[1] >> 17) & 0x1, 1);
+ print_named_value(f, "ADDRESS_LO", ib[2], 32);
+ print_named_value(f, "ADDRESS_HI", ib[3], 16);
+ print_named_value(f, "DST_SEL", (ib[3] >> 16) & 0x3, 2);
+ print_named_value(f, "INT_SEL", (ib[3] >> 24) & 0x7, 3);
+ print_named_value(f, "DATA_SEL", ib[3] >> 29, 3);
+ print_named_value(f, "DATA_LO", ib[4], 32);
+ print_named_value(f, "DATA_HI", ib[5], 32);
+ break;
+ case PKT3_RELEASE_MEM:
+ ac_dump_reg(f, R_028A90_VGT_EVENT_INITIATOR, ib[1],
+ S_028A90_EVENT_TYPE(~0));
+ print_named_value(f, "EVENT_INDEX", (ib[1] >> 8) & 0xf, 4);
+ print_named_value(f, "TCL1_VOL_ACTION_ENA", (ib[1] >> 12) & 0x1, 1);
+ print_named_value(f, "TC_VOL_ACTION_ENA", (ib[1] >> 13) & 0x1, 1);
+ print_named_value(f, "TC_WB_ACTION_ENA", (ib[1] >> 15) & 0x1, 1);
+ print_named_value(f, "TCL1_ACTION_ENA", (ib[1] >> 16) & 0x1, 1);
+ print_named_value(f, "TC_ACTION_ENA", (ib[1] >> 17) & 0x1, 1);
+ print_named_value(f, "TC_NC_ACTION_ENA", (ib[1] >> 19) & 0x1, 1);
+ print_named_value(f, "TC_WC_ACTION_ENA", (ib[1] >> 20) & 0x1, 1);
+ print_named_value(f, "TC_MD_ACTION_ENA", (ib[1] >> 21) & 0x1, 1);
+ print_named_value(f, "DST_SEL", (ib[2] >> 16) & 0x3, 2);
+ print_named_value(f, "INT_SEL", (ib[2] >> 24) & 0x7, 3);
+ print_named_value(f, "DATA_SEL", ib[2] >> 29, 3);
+ print_named_value(f, "ADDRESS_LO", ib[3], 32);
+ print_named_value(f, "ADDRESS_HI", ib[4], 32);
+ print_named_value(f, "DATA_LO", ib[5], 32);
+ print_named_value(f, "DATA_HI", ib[6], 32);
+ print_named_value(f, "CTXID", ib[7], 32);
+ break;
+ case PKT3_WAIT_REG_MEM:
+ print_named_value(f, "OP", ib[1], 32);
+ print_named_value(f, "ADDRESS_LO", ib[2], 32);
+ print_named_value(f, "ADDRESS_HI", ib[3], 32);
+ print_named_value(f, "REF", ib[4], 32);
+ print_named_value(f, "MASK", ib[5], 32);
+ print_named_value(f, "POLL_INTERVAL", ib[6], 16);
+ break;
+ case PKT3_DRAW_INDEX_AUTO:
+ ac_dump_reg(f, R_030930_VGT_NUM_INDICES, ib[1], ~0);
+ ac_dump_reg(f, R_0287F0_VGT_DRAW_INITIATOR, ib[2], ~0);
+ break;
+ case PKT3_DRAW_INDEX_2:
+ ac_dump_reg(f, R_028A78_VGT_DMA_MAX_SIZE, ib[1], ~0);
+ ac_dump_reg(f, R_0287E8_VGT_DMA_BASE, ib[2], ~0);
+ ac_dump_reg(f, R_0287E4_VGT_DMA_BASE_HI, ib[3], ~0);
+ ac_dump_reg(f, R_030930_VGT_NUM_INDICES, ib[4], ~0);
+ ac_dump_reg(f, R_0287F0_VGT_DRAW_INITIATOR, ib[5], ~0);
+ break;
+ case PKT3_INDEX_TYPE:
+ ac_dump_reg(f, R_028A7C_VGT_DMA_INDEX_TYPE, ib[1], ~0);
+ break;
+ case PKT3_NUM_INSTANCES:
+ ac_dump_reg(f, R_030934_VGT_NUM_INSTANCES, ib[1], ~0);
+ break;
+ case PKT3_WRITE_DATA:
+ ac_dump_reg(f, R_370_CONTROL, ib[1], ~0);
+ ac_dump_reg(f, R_371_DST_ADDR_LO, ib[2], ~0);
+ ac_dump_reg(f, R_372_DST_ADDR_HI, ib[3], ~0);
+ for (i = 2; i < count; i++) {
+ print_spaces(f, INDENT_PKT);
+ fprintf(f, "0x%08x\n", ib[2+i]);
+ }
+ break;
+ case PKT3_CP_DMA:
+ ac_dump_reg(f, R_410_CP_DMA_WORD0, ib[1], ~0);
+ ac_dump_reg(f, R_411_CP_DMA_WORD1, ib[2], ~0);
+ ac_dump_reg(f, R_412_CP_DMA_WORD2, ib[3], ~0);
+ ac_dump_reg(f, R_413_CP_DMA_WORD3, ib[4], ~0);
+ ac_dump_reg(f, R_414_COMMAND, ib[5], ~0);
+ break;
+ case PKT3_DMA_DATA:
+ ac_dump_reg(f, R_500_DMA_DATA_WORD0, ib[1], ~0);
+ ac_dump_reg(f, R_501_SRC_ADDR_LO, ib[2], ~0);
+ ac_dump_reg(f, R_502_SRC_ADDR_HI, ib[3], ~0);
+ ac_dump_reg(f, R_503_DST_ADDR_LO, ib[4], ~0);
+ ac_dump_reg(f, R_504_DST_ADDR_HI, ib[5], ~0);
+ ac_dump_reg(f, R_414_COMMAND, ib[6], ~0);
+ break;
+ case PKT3_INDIRECT_BUFFER_SI:
+ case PKT3_INDIRECT_BUFFER_CONST:
+ case PKT3_INDIRECT_BUFFER_CIK:
+ ac_dump_reg(f, R_3F0_IB_BASE_LO, ib[1], ~0);
+ ac_dump_reg(f, R_3F1_IB_BASE_HI, ib[2], ~0);
+ ac_dump_reg(f, R_3F2_CONTROL, ib[3], ~0);
+
+ if (addr_callback) {
+ uint64_t addr = ((uint64_t)ib[2] << 32) | ib[1];
+ void *data = addr_callback(addr_callback_data, addr);
+ const char *name = G_3F2_CHAIN(ib[3]) ? "chained" : "nested";
+
+ if (data)
+ ac_parse_ib(f, data, G_3F2_IB_SIZE(ib[3]),
+ trace_id, name, chip_class,
+ addr_callback, addr_callback_data);
+ }
+ break;
+ case PKT3_CLEAR_STATE:
+ case PKT3_INCREMENT_DE_COUNTER:
+ case PKT3_PFP_SYNC_ME:
+ break;
+ case PKT3_NOP:
+ if (ib[0] == 0xffff1000) {
+ count = -1; /* One dword NOP. */
+ break;
+ } else if (count == 0 && AC_IS_TRACE_POINT(ib[1])) {
+ unsigned packet_id = AC_GET_TRACE_POINT_ID(ib[1]);
+
+ print_spaces(f, INDENT_PKT);
+ fprintf(f, COLOR_RED "Trace point ID: %u\n", packet_id);
+
+ if (trace_id == -1)
+ break; /* tracing was disabled */
+
+ print_spaces(f, INDENT_PKT);
+ if (packet_id < trace_id)
+ fprintf(f, COLOR_RED
+ "This trace point was reached by the CP."
+ COLOR_RESET "\n");
+ else if (packet_id == trace_id)
+ fprintf(f, COLOR_RED
+ "!!!!! This is the last trace point that "
+ "was reached by the CP !!!!!"
+ COLOR_RESET "\n");
+ else if (packet_id+1 == trace_id)
+ fprintf(f, COLOR_RED
+ "!!!!! This is the first trace point that "
+ "was NOT been reached by the CP !!!!!"
+ COLOR_RESET "\n");
+ else
+ fprintf(f, COLOR_RED
+ "!!!!! This trace point was NOT reached "
+ "by the CP !!!!!"
+ COLOR_RESET "\n");
+ break;
+ }
+ /* fall through, print all dwords */
+ default:
+ for (i = 0; i < count+1; i++) {
+ print_spaces(f, INDENT_PKT);
+ fprintf(f, "0x%08x\n", ib[1+i]);
+ }
+ }
+
+ ib += count + 2;
+ *num_dw -= count + 2;
+ return ib;
+}
+
+/**
+ * Parse and print an IB into a file.
+ *
+ * \param f file
+ * \param ib IB
+ * \param num_dw size of the IB
+ * \param chip_class chip class
+ * \param trace_id the last trace ID that is known to have been reached
+ * and executed by the CP, typically read from a buffer
+ * \param addr_callback Get a mapped pointer of the IB at a given address. Can
+ * be NULL.
+ * \param addr_callback_data user data for addr_callback
+ */
+void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
+ const char *name, enum chip_class chip_class,
+ ac_debug_addr_callback addr_callback, void *addr_callback_data)
+{
+ fprintf(f, "------------------ %s begin ------------------\n", name);
+
+ while (num_dw > 0) {
+ unsigned type = PKT_TYPE_G(ib[0]);
+
+ switch (type) {
+ case 3:
+ ib = ac_parse_packet3(f, ib, &num_dw, trace_id,
+ chip_class, addr_callback,
+ addr_callback_data);
+ break;
+ case 2:
+ /* type-2 nop */
+ if (ib[0] == 0x80000000) {
+ fprintf(f, COLOR_GREEN "NOP (type 2)" COLOR_RESET "\n");
+ ib++;
+ num_dw--;
+ break;
+ }
+ /* fall through */
+ default:
+ fprintf(f, "Unknown packet type %i\n", type);
+ return;
+ }
+ }
+
+ fprintf(f, "------------------- %s end -------------------\n", name);
+ if (num_dw < 0) {
+ printf("Packet ends after the end of IB.\n");
+ exit(0);
+ }
+ fprintf(f, "\n");
+}
diff --git a/lib/mesa/src/amd/common/ac_debug.h b/lib/mesa/src/amd/common/ac_debug.h
new file mode 100644
index 000000000..63ac4fa84
--- /dev/null
+++ b/lib/mesa/src/amd/common/ac_debug.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Marek Olšák <maraeo@gmail.com>
+ */
+#ifndef AC_DEBUG_H
+#define AC_DEBUG_H
+
+#include <stdint.h>
+#include <stdio.h>
+
+#include "amd_family.h"
+
+#define AC_ENCODE_TRACE_POINT(id) (0xcafe0000 | ((id) & 0xffff))
+#define AC_IS_TRACE_POINT(x) (((x) & 0xcafe0000) == 0xcafe0000)
+#define AC_GET_TRACE_POINT_ID(x) ((x) & 0xffff)
+
+typedef void *(*ac_debug_addr_callback)(void *data, uint64_t addr);
+
+void ac_dump_reg(FILE *file, unsigned offset, uint32_t value,
+ uint32_t field_mask);
+void ac_parse_ib(FILE *f, uint32_t *ib, int num_dw, int trace_id,
+ const char *name, enum chip_class chip_class,
+ ac_debug_addr_callback addr_callback, void *addr_callback_data);
+
+#endif
diff --git a/lib/mesa/src/amd/common/ac_llvm_build.c b/lib/mesa/src/amd/common/ac_llvm_build.c
new file mode 100644
index 000000000..47db2b339
--- /dev/null
+++ b/lib/mesa/src/amd/common/ac_llvm_build.c
@@ -0,0 +1,1544 @@
+/*
+ * Copyright 2014 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ */
+/* based on pieces from si_pipe.c and radeon_llvm_emit.c */
+#include "ac_llvm_build.h"
+
+#include <llvm-c/Core.h>
+
+#include "c11/threads.h"
+
+#include <assert.h>
+#include <stdio.h>
+
+#include "ac_llvm_util.h"
+#include "ac_exp_param.h"
+#include "util/bitscan.h"
+#include "util/macros.h"
+#include "sid.h"
+
+#include "shader_enums.h"
+
+/* Initialize module-independent parts of the context.
+ *
+ * The caller is responsible for initializing ctx::module and ctx::builder.
+ */
+void
+ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context,
+ enum chip_class chip_class)
+{
+ LLVMValueRef args[1];
+
+ ctx->chip_class = chip_class;
+
+ ctx->context = context;
+ ctx->module = NULL;
+ ctx->builder = NULL;
+
+ ctx->voidt = LLVMVoidTypeInContext(ctx->context);
+ ctx->i1 = LLVMInt1TypeInContext(ctx->context);
+ ctx->i8 = LLVMInt8TypeInContext(ctx->context);
+ ctx->i16 = LLVMIntTypeInContext(ctx->context, 16);
+ ctx->i32 = LLVMIntTypeInContext(ctx->context, 32);
+ ctx->i64 = LLVMIntTypeInContext(ctx->context, 64);
+ ctx->f16 = LLVMHalfTypeInContext(ctx->context);
+ ctx->f32 = LLVMFloatTypeInContext(ctx->context);
+ ctx->f64 = LLVMDoubleTypeInContext(ctx->context);
+ ctx->v4i32 = LLVMVectorType(ctx->i32, 4);
+ ctx->v4f32 = LLVMVectorType(ctx->f32, 4);
+ ctx->v8i32 = LLVMVectorType(ctx->i32, 8);
+
+ ctx->i32_0 = LLVMConstInt(ctx->i32, 0, false);
+ ctx->i32_1 = LLVMConstInt(ctx->i32, 1, false);
+ ctx->f32_0 = LLVMConstReal(ctx->f32, 0.0);
+ ctx->f32_1 = LLVMConstReal(ctx->f32, 1.0);
+
+ ctx->range_md_kind = LLVMGetMDKindIDInContext(ctx->context,
+ "range", 5);
+
+ ctx->invariant_load_md_kind = LLVMGetMDKindIDInContext(ctx->context,
+ "invariant.load", 14);
+
+ ctx->fpmath_md_kind = LLVMGetMDKindIDInContext(ctx->context, "fpmath", 6);
+
+ args[0] = LLVMConstReal(ctx->f32, 2.5);
+ ctx->fpmath_md_2p5_ulp = LLVMMDNodeInContext(ctx->context, args, 1);
+
+ ctx->uniform_md_kind = LLVMGetMDKindIDInContext(ctx->context,
+ "amdgpu.uniform", 14);
+
+ ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0);
+}
+
+LLVMValueRef
+ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,
+ LLVMTypeRef return_type, LLVMValueRef *params,
+ unsigned param_count, unsigned attrib_mask)
+{
+ LLVMValueRef function, call;
+ bool set_callsite_attrs = HAVE_LLVM >= 0x0400 &&
+ !(attrib_mask & AC_FUNC_ATTR_LEGACY);
+
+ function = LLVMGetNamedFunction(ctx->module, name);
+ if (!function) {
+ LLVMTypeRef param_types[32], function_type;
+ unsigned i;
+
+ assert(param_count <= 32);
+
+ for (i = 0; i < param_count; ++i) {
+ assert(params[i]);
+ param_types[i] = LLVMTypeOf(params[i]);
+ }
+ function_type =
+ LLVMFunctionType(return_type, param_types, param_count, 0);
+ function = LLVMAddFunction(ctx->module, name, function_type);
+
+ LLVMSetFunctionCallConv(function, LLVMCCallConv);
+ LLVMSetLinkage(function, LLVMExternalLinkage);
+
+ if (!set_callsite_attrs)
+ ac_add_func_attributes(ctx->context, function, attrib_mask);
+ }
+
+ call = LLVMBuildCall(ctx->builder, function, params, param_count, "");
+ if (set_callsite_attrs)
+ ac_add_func_attributes(ctx->context, call, attrib_mask);
+ return call;
+}
+
+static LLVMValueRef bitcast_to_float(struct ac_llvm_context *ctx,
+ LLVMValueRef value)
+{
+ LLVMTypeRef type = LLVMTypeOf(value);
+ LLVMTypeRef new_type;
+
+ if (LLVMGetTypeKind(type) == LLVMVectorTypeKind)
+ new_type = LLVMVectorType(ctx->f32, LLVMGetVectorSize(type));
+ else
+ new_type = ctx->f32;
+
+ return LLVMBuildBitCast(ctx->builder, value, new_type, "");
+}
+
+/**
+ * Given the i32 or vNi32 \p type, generate the textual name (e.g. for use with
+ * intrinsic names).
+ */
+void ac_build_type_name_for_intr(LLVMTypeRef type, char *buf, unsigned bufsize)
+{
+ LLVMTypeRef elem_type = type;
+
+ assert(bufsize >= 8);
+
+ if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
+ int ret = snprintf(buf, bufsize, "v%u",
+ LLVMGetVectorSize(type));
+ if (ret < 0) {
+ char *type_name = LLVMPrintTypeToString(type);
+ fprintf(stderr, "Error building type name for: %s\n",
+ type_name);
+ return;
+ }
+ elem_type = LLVMGetElementType(type);
+ buf += ret;
+ bufsize -= ret;
+ }
+ switch (LLVMGetTypeKind(elem_type)) {
+ default: break;
+ case LLVMIntegerTypeKind:
+ snprintf(buf, bufsize, "i%d", LLVMGetIntTypeWidth(elem_type));
+ break;
+ case LLVMFloatTypeKind:
+ snprintf(buf, bufsize, "f32");
+ break;
+ case LLVMDoubleTypeKind:
+ snprintf(buf, bufsize, "f64");
+ break;
+ }
+}
+
+/**
+ * Helper function that builds an LLVM IR PHI node and immediately adds
+ * incoming edges.
+ */
+LLVMValueRef
+ac_build_phi(struct ac_llvm_context *ctx, LLVMTypeRef type,
+ unsigned count_incoming, LLVMValueRef *values,
+ LLVMBasicBlockRef *blocks)
+{
+ LLVMValueRef phi = LLVMBuildPhi(ctx->builder, type, "");
+ LLVMAddIncoming(phi, values, blocks, count_incoming);
+ return phi;
+}
+
+LLVMValueRef
+ac_build_gather_values_extended(struct ac_llvm_context *ctx,
+ LLVMValueRef *values,
+ unsigned value_count,
+ unsigned value_stride,
+ bool load)
+{
+ LLVMBuilderRef builder = ctx->builder;
+ LLVMValueRef vec = NULL;
+ unsigned i;
+
+ if (value_count == 1) {
+ if (load)
+ return LLVMBuildLoad(builder, values[0], "");
+ return values[0];
+ } else if (!value_count)
+ unreachable("value_count is 0");
+
+ for (i = 0; i < value_count; i++) {
+ LLVMValueRef value = values[i * value_stride];
+ if (load)
+ value = LLVMBuildLoad(builder, value, "");
+
+ if (!i)
+ vec = LLVMGetUndef( LLVMVectorType(LLVMTypeOf(value), value_count));
+ LLVMValueRef index = LLVMConstInt(ctx->i32, i, false);
+ vec = LLVMBuildInsertElement(builder, vec, value, index, "");
+ }
+ return vec;
+}
+
+LLVMValueRef
+ac_build_gather_values(struct ac_llvm_context *ctx,
+ LLVMValueRef *values,
+ unsigned value_count)
+{
+ return ac_build_gather_values_extended(ctx, values, value_count, 1, false);
+}
+
+LLVMValueRef
+ac_build_fdiv(struct ac_llvm_context *ctx,
+ LLVMValueRef num,
+ LLVMValueRef den)
+{
+ LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
+
+ if (!LLVMIsConstant(ret))
+ LLVMSetMetadata(ret, ctx->fpmath_md_kind, ctx->fpmath_md_2p5_ulp);
+ return ret;
+}
+
+/* Coordinates for cube map selection. sc, tc, and ma are as in Table 8.27
+ * of the OpenGL 4.5 (Compatibility Profile) specification, except ma is
+ * already multiplied by two. id is the cube face number.
+ */
+struct cube_selection_coords {
+ LLVMValueRef stc[2];
+ LLVMValueRef ma;
+ LLVMValueRef id;
+};
+
+static void
+build_cube_intrinsic(struct ac_llvm_context *ctx,
+ LLVMValueRef in[3],
+ struct cube_selection_coords *out)
+{
+ LLVMTypeRef f32 = ctx->f32;
+
+ out->stc[1] = ac_build_intrinsic(ctx, "llvm.amdgcn.cubetc",
+ f32, in, 3, AC_FUNC_ATTR_READNONE);
+ out->stc[0] = ac_build_intrinsic(ctx, "llvm.amdgcn.cubesc",
+ f32, in, 3, AC_FUNC_ATTR_READNONE);
+ out->ma = ac_build_intrinsic(ctx, "llvm.amdgcn.cubema",
+ f32, in, 3, AC_FUNC_ATTR_READNONE);
+ out->id = ac_build_intrinsic(ctx, "llvm.amdgcn.cubeid",
+ f32, in, 3, AC_FUNC_ATTR_READNONE);
+}
+
+/**
+ * Build a manual selection sequence for cube face sc/tc coordinates and
+ * major axis vector (multiplied by 2 for consistency) for the given
+ * vec3 \p coords, for the face implied by \p selcoords.
+ *
+ * For the major axis, we always adjust the sign to be in the direction of
+ * selcoords.ma; i.e., a positive out_ma means that coords is pointed towards
+ * the selcoords major axis.
+ */
+static void build_cube_select(LLVMBuilderRef builder,
+ const struct cube_selection_coords *selcoords,
+ const LLVMValueRef *coords,
+ LLVMValueRef *out_st,
+ LLVMValueRef *out_ma)
+{
+ LLVMTypeRef f32 = LLVMTypeOf(coords[0]);
+ LLVMValueRef is_ma_positive;
+ LLVMValueRef sgn_ma;
+ LLVMValueRef is_ma_z, is_not_ma_z;
+ LLVMValueRef is_ma_y;
+ LLVMValueRef is_ma_x;
+ LLVMValueRef sgn;
+ LLVMValueRef tmp;
+
+ is_ma_positive = LLVMBuildFCmp(builder, LLVMRealUGE,
+ selcoords->ma, LLVMConstReal(f32, 0.0), "");
+ sgn_ma = LLVMBuildSelect(builder, is_ma_positive,
+ LLVMConstReal(f32, 1.0), LLVMConstReal(f32, -1.0), "");
+
+ is_ma_z = LLVMBuildFCmp(builder, LLVMRealUGE, selcoords->id, LLVMConstReal(f32, 4.0), "");
+ is_not_ma_z = LLVMBuildNot(builder, is_ma_z, "");
+ is_ma_y = LLVMBuildAnd(builder, is_not_ma_z,
+ LLVMBuildFCmp(builder, LLVMRealUGE, selcoords->id, LLVMConstReal(f32, 2.0), ""), "");
+ is_ma_x = LLVMBuildAnd(builder, is_not_ma_z, LLVMBuildNot(builder, is_ma_y, ""), "");
+
+ /* Select sc */
+ tmp = LLVMBuildSelect(builder, is_ma_x, coords[2], coords[0], "");
+ sgn = LLVMBuildSelect(builder, is_ma_y, LLVMConstReal(f32, 1.0),
+ LLVMBuildSelect(builder, is_ma_z, sgn_ma,
+ LLVMBuildFNeg(builder, sgn_ma, ""), ""), "");
+ out_st[0] = LLVMBuildFMul(builder, tmp, sgn, "");
+
+ /* Select tc */
+ tmp = LLVMBuildSelect(builder, is_ma_y, coords[2], coords[1], "");
+ sgn = LLVMBuildSelect(builder, is_ma_y, sgn_ma,
+ LLVMConstReal(f32, -1.0), "");
+ out_st[1] = LLVMBuildFMul(builder, tmp, sgn, "");
+
+ /* Select ma */
+ tmp = LLVMBuildSelect(builder, is_ma_z, coords[2],
+ LLVMBuildSelect(builder, is_ma_y, coords[1], coords[0], ""), "");
+ sgn = LLVMBuildSelect(builder, is_ma_positive,
+ LLVMConstReal(f32, 2.0), LLVMConstReal(f32, -2.0), "");
+ *out_ma = LLVMBuildFMul(builder, tmp, sgn, "");
+}
+
+void
+ac_prepare_cube_coords(struct ac_llvm_context *ctx,
+ bool is_deriv, bool is_array, bool is_lod,
+ LLVMValueRef *coords_arg,
+ LLVMValueRef *derivs_arg)
+{
+
+ LLVMBuilderRef builder = ctx->builder;
+ struct cube_selection_coords selcoords;
+ LLVMValueRef coords[3];
+ LLVMValueRef invma;
+
+ if (is_array && !is_lod) {
+ LLVMValueRef tmp = coords_arg[3];
+ tmp = ac_build_intrinsic(ctx, "llvm.rint.f32", ctx->f32, &tmp, 1, 0);
+
+ /* Section 8.9 (Texture Functions) of the GLSL 4.50 spec says:
+ *
+ * "For Array forms, the array layer used will be
+ *
+ * max(0, min(d−1, floor(layer+0.5)))
+ *
+ * where d is the depth of the texture array and layer
+ * comes from the component indicated in the tables below.
+ * Workaroudn for an issue where the layer is taken from a
+ * helper invocation which happens to fall on a different
+ * layer due to extrapolation."
+ *
+ * VI and earlier attempt to implement this in hardware by
+ * clamping the value of coords[2] = (8 * layer) + face.
+ * Unfortunately, this means that the we end up with the wrong
+ * face when clamping occurs.
+ *
+ * Clamp the layer earlier to work around the issue.
+ */
+ if (ctx->chip_class <= VI) {
+ LLVMValueRef ge0;
+ ge0 = LLVMBuildFCmp(builder, LLVMRealOGE, tmp, ctx->f32_0, "");
+ tmp = LLVMBuildSelect(builder, ge0, tmp, ctx->f32_0, "");
+ }
+
+ coords_arg[3] = tmp;
+ }
+
+ build_cube_intrinsic(ctx, coords_arg, &selcoords);
+
+ invma = ac_build_intrinsic(ctx, "llvm.fabs.f32",
+ ctx->f32, &selcoords.ma, 1, AC_FUNC_ATTR_READNONE);
+ invma = ac_build_fdiv(ctx, LLVMConstReal(ctx->f32, 1.0), invma);
+
+ for (int i = 0; i < 2; ++i)
+ coords[i] = LLVMBuildFMul(builder, selcoords.stc[i], invma, "");
+
+ coords[2] = selcoords.id;
+
+ if (is_deriv && derivs_arg) {
+ LLVMValueRef derivs[4];
+ int axis;
+
+ /* Convert cube derivatives to 2D derivatives. */
+ for (axis = 0; axis < 2; axis++) {
+ LLVMValueRef deriv_st[2];
+ LLVMValueRef deriv_ma;
+
+ /* Transform the derivative alongside the texture
+ * coordinate. Mathematically, the correct formula is
+ * as follows. Assume we're projecting onto the +Z face
+ * and denote by dx/dh the derivative of the (original)
+ * X texture coordinate with respect to horizontal
+ * window coordinates. The projection onto the +Z face
+ * plane is:
+ *
+ * f(x,z) = x/z
+ *
+ * Then df/dh = df/dx * dx/dh + df/dz * dz/dh
+ * = 1/z * dx/dh - x/z * 1/z * dz/dh.
+ *
+ * This motivatives the implementation below.
+ *
+ * Whether this actually gives the expected results for
+ * apps that might feed in derivatives obtained via
+ * finite differences is anyone's guess. The OpenGL spec
+ * seems awfully quiet about how textureGrad for cube
+ * maps should be handled.
+ */
+ build_cube_select(builder, &selcoords, &derivs_arg[axis * 3],
+ deriv_st, &deriv_ma);
+
+ deriv_ma = LLVMBuildFMul(builder, deriv_ma, invma, "");
+
+ for (int i = 0; i < 2; ++i)
+ derivs[axis * 2 + i] =
+ LLVMBuildFSub(builder,
+ LLVMBuildFMul(builder, deriv_st[i], invma, ""),
+ LLVMBuildFMul(builder, deriv_ma, coords[i], ""), "");
+ }
+
+ memcpy(derivs_arg, derivs, sizeof(derivs));
+ }
+
+ /* Shift the texture coordinate. This must be applied after the
+ * derivative calculation.
+ */
+ for (int i = 0; i < 2; ++i)
+ coords[i] = LLVMBuildFAdd(builder, coords[i], LLVMConstReal(ctx->f32, 1.5), "");
+
+ if (is_array) {
+ /* for cube arrays coord.z = coord.w(array_index) * 8 + face */
+ /* coords_arg.w component - array_index for cube arrays */
+ LLVMValueRef tmp = LLVMBuildFMul(ctx->builder, coords_arg[3], LLVMConstReal(ctx->f32, 8.0), "");
+ coords[2] = LLVMBuildFAdd(ctx->builder, tmp, coords[2], "");
+ }
+
+ memcpy(coords_arg, coords, sizeof(coords));
+}
+
+
+LLVMValueRef
+ac_build_fs_interp(struct ac_llvm_context *ctx,
+ LLVMValueRef llvm_chan,
+ LLVMValueRef attr_number,
+ LLVMValueRef params,
+ LLVMValueRef i,
+ LLVMValueRef j)
+{
+ LLVMValueRef args[5];
+ LLVMValueRef p1;
+
+ if (HAVE_LLVM < 0x0400) {
+ LLVMValueRef ij[2];
+ ij[0] = LLVMBuildBitCast(ctx->builder, i, ctx->i32, "");
+ ij[1] = LLVMBuildBitCast(ctx->builder, j, ctx->i32, "");
+
+ args[0] = llvm_chan;
+ args[1] = attr_number;
+ args[2] = params;
+ args[3] = ac_build_gather_values(ctx, ij, 2);
+ return ac_build_intrinsic(ctx, "llvm.SI.fs.interp",
+ ctx->f32, args, 4,
+ AC_FUNC_ATTR_READNONE);
+ }
+
+ args[0] = i;
+ args[1] = llvm_chan;
+ args[2] = attr_number;
+ args[3] = params;
+
+ p1 = ac_build_intrinsic(ctx, "llvm.amdgcn.interp.p1",
+ ctx->f32, args, 4, AC_FUNC_ATTR_READNONE);
+
+ args[0] = p1;
+ args[1] = j;
+ args[2] = llvm_chan;
+ args[3] = attr_number;
+ args[4] = params;
+
+ return ac_build_intrinsic(ctx, "llvm.amdgcn.interp.p2",
+ ctx->f32, args, 5, AC_FUNC_ATTR_READNONE);
+}
+
+LLVMValueRef
+ac_build_fs_interp_mov(struct ac_llvm_context *ctx,
+ LLVMValueRef parameter,
+ LLVMValueRef llvm_chan,
+ LLVMValueRef attr_number,
+ LLVMValueRef params)
+{
+ LLVMValueRef args[4];
+ if (HAVE_LLVM < 0x0400) {
+ args[0] = llvm_chan;
+ args[1] = attr_number;
+ args[2] = params;
+
+ return ac_build_intrinsic(ctx,
+ "llvm.SI.fs.constant",
+ ctx->f32, args, 3,
+ AC_FUNC_ATTR_READNONE);
+ }
+
+ args[0] = parameter;
+ args[1] = llvm_chan;
+ args[2] = attr_number;
+ args[3] = params;
+
+ return ac_build_intrinsic(ctx, "llvm.amdgcn.interp.mov",
+ ctx->f32, args, 4, AC_FUNC_ATTR_READNONE);
+}
+
+LLVMValueRef
+ac_build_gep0(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr,
+ LLVMValueRef index)
+{
+ LLVMValueRef indices[2] = {
+ LLVMConstInt(ctx->i32, 0, 0),
+ index,
+ };
+ return LLVMBuildGEP(ctx->builder, base_ptr,
+ indices, 2, "");
+}
+
+void
+ac_build_indexed_store(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index,
+ LLVMValueRef value)
+{
+ LLVMBuildStore(ctx->builder, value,
+ ac_build_gep0(ctx, base_ptr, index));
+}
+
+/**
+ * Build an LLVM bytecode indexed load using LLVMBuildGEP + LLVMBuildLoad.
+ * It's equivalent to doing a load from &base_ptr[index].
+ *
+ * \param base_ptr Where the array starts.
+ * \param index The element index into the array.
+ * \param uniform Whether the base_ptr and index can be assumed to be
+ * dynamically uniform
+ */
+LLVMValueRef
+ac_build_indexed_load(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index,
+ bool uniform)
+{
+ LLVMValueRef pointer;
+
+ pointer = ac_build_gep0(ctx, base_ptr, index);
+ if (uniform)
+ LLVMSetMetadata(pointer, ctx->uniform_md_kind, ctx->empty_md);
+ return LLVMBuildLoad(ctx->builder, pointer, "");
+}
+
+/**
+ * Do a load from &base_ptr[index], but also add a flag that it's loading
+ * a constant from a dynamically uniform index.
+ */
+LLVMValueRef
+ac_build_indexed_load_const(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index)
+{
+ LLVMValueRef result = ac_build_indexed_load(ctx, base_ptr, index, true);
+ LLVMSetMetadata(result, ctx->invariant_load_md_kind, ctx->empty_md);
+ return result;
+}
+
+/* TBUFFER_STORE_FORMAT_{X,XY,XYZ,XYZW} <- the suffix is selected by num_channels=1..4.
+ * The type of vdata must be one of i32 (num_channels=1), v2i32 (num_channels=2),
+ * or v4i32 (num_channels=3,4).
+ */
+void
+ac_build_buffer_store_dword(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ LLVMValueRef vdata,
+ unsigned num_channels,
+ LLVMValueRef voffset,
+ LLVMValueRef soffset,
+ unsigned inst_offset,
+ bool glc,
+ bool slc,
+ bool writeonly_memory,
+ bool has_add_tid)
+{
+ /* TODO: Fix stores with ADD_TID and remove the "has_add_tid" flag. */
+ if (!has_add_tid) {
+ /* Split 3 channel stores, becase LLVM doesn't support 3-channel
+ * intrinsics. */
+ if (num_channels == 3) {
+ LLVMValueRef v[3], v01;
+
+ for (int i = 0; i < 3; i++) {
+ v[i] = LLVMBuildExtractElement(ctx->builder, vdata,
+ LLVMConstInt(ctx->i32, i, 0), "");
+ }
+ v01 = ac_build_gather_values(ctx, v, 2);
+
+ ac_build_buffer_store_dword(ctx, rsrc, v01, 2, voffset,
+ soffset, inst_offset, glc, slc,
+ writeonly_memory, has_add_tid);
+ ac_build_buffer_store_dword(ctx, rsrc, v[2], 1, voffset,
+ soffset, inst_offset + 8,
+ glc, slc,
+ writeonly_memory, has_add_tid);
+ return;
+ }
+
+ unsigned func = CLAMP(num_channels, 1, 3) - 1;
+ static const char *types[] = {"f32", "v2f32", "v4f32"};
+ char name[256];
+ LLVMValueRef offset = soffset;
+
+ if (inst_offset)
+ offset = LLVMBuildAdd(ctx->builder, offset,
+ LLVMConstInt(ctx->i32, inst_offset, 0), "");
+ if (voffset)
+ offset = LLVMBuildAdd(ctx->builder, offset, voffset, "");
+
+ LLVMValueRef args[] = {
+ bitcast_to_float(ctx, vdata),
+ LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
+ LLVMConstInt(ctx->i32, 0, 0),
+ offset,
+ LLVMConstInt(ctx->i1, glc, 0),
+ LLVMConstInt(ctx->i1, slc, 0),
+ };
+
+ snprintf(name, sizeof(name), "llvm.amdgcn.buffer.store.%s",
+ types[func]);
+
+ ac_build_intrinsic(ctx, name, ctx->voidt,
+ args, ARRAY_SIZE(args),
+ writeonly_memory ?
+ AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY :
+ AC_FUNC_ATTR_WRITEONLY);
+ return;
+ }
+
+ static unsigned dfmt[] = {
+ V_008F0C_BUF_DATA_FORMAT_32,
+ V_008F0C_BUF_DATA_FORMAT_32_32,
+ V_008F0C_BUF_DATA_FORMAT_32_32_32,
+ V_008F0C_BUF_DATA_FORMAT_32_32_32_32
+ };
+ assert(num_channels >= 1 && num_channels <= 4);
+
+ LLVMValueRef args[] = {
+ rsrc,
+ vdata,
+ LLVMConstInt(ctx->i32, num_channels, 0),
+ voffset ? voffset : LLVMGetUndef(ctx->i32),
+ soffset,
+ LLVMConstInt(ctx->i32, inst_offset, 0),
+ LLVMConstInt(ctx->i32, dfmt[num_channels - 1], 0),
+ LLVMConstInt(ctx->i32, V_008F0C_BUF_NUM_FORMAT_UINT, 0),
+ LLVMConstInt(ctx->i32, voffset != NULL, 0),
+ LLVMConstInt(ctx->i32, 0, 0), /* idxen */
+ LLVMConstInt(ctx->i32, glc, 0),
+ LLVMConstInt(ctx->i32, slc, 0),
+ LLVMConstInt(ctx->i32, 0, 0), /* tfe*/
+ };
+
+ /* The instruction offset field has 12 bits */
+ assert(voffset || inst_offset < (1 << 12));
+
+ /* The intrinsic is overloaded, we need to add a type suffix for overloading to work. */
+ unsigned func = CLAMP(num_channels, 1, 3) - 1;
+ const char *types[] = {"i32", "v2i32", "v4i32"};
+ char name[256];
+ snprintf(name, sizeof(name), "llvm.SI.tbuffer.store.%s", types[func]);
+
+ ac_build_intrinsic(ctx, name, ctx->voidt,
+ args, ARRAY_SIZE(args),
+ AC_FUNC_ATTR_LEGACY);
+}
+
+LLVMValueRef
+ac_build_buffer_load(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ int num_channels,
+ LLVMValueRef vindex,
+ LLVMValueRef voffset,
+ LLVMValueRef soffset,
+ unsigned inst_offset,
+ unsigned glc,
+ unsigned slc,
+ bool can_speculate,
+ bool allow_smem)
+{
+ LLVMValueRef offset = LLVMConstInt(ctx->i32, inst_offset, 0);
+ if (voffset)
+ offset = LLVMBuildAdd(ctx->builder, offset, voffset, "");
+ if (soffset)
+ offset = LLVMBuildAdd(ctx->builder, offset, soffset, "");
+
+ /* TODO: VI and later generations can use SMEM with GLC=1.*/
+ if (allow_smem && !glc && !slc) {
+ assert(vindex == NULL);
+
+ LLVMValueRef result[4];
+
+ for (int i = 0; i < num_channels; i++) {
+ if (i) {
+ offset = LLVMBuildAdd(ctx->builder, offset,
+ LLVMConstInt(ctx->i32, 4, 0), "");
+ }
+ LLVMValueRef args[2] = {rsrc, offset};
+ result[i] = ac_build_intrinsic(ctx, "llvm.SI.load.const.v4i32",
+ ctx->f32, args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+ }
+ if (num_channels == 1)
+ return result[0];
+
+ if (num_channels == 3)
+ result[num_channels++] = LLVMGetUndef(ctx->f32);
+ return ac_build_gather_values(ctx, result, num_channels);
+ }
+
+ unsigned func = CLAMP(num_channels, 1, 3) - 1;
+
+ LLVMValueRef args[] = {
+ LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
+ vindex ? vindex : LLVMConstInt(ctx->i32, 0, 0),
+ offset,
+ LLVMConstInt(ctx->i1, glc, 0),
+ LLVMConstInt(ctx->i1, slc, 0)
+ };
+
+ LLVMTypeRef types[] = {ctx->f32, LLVMVectorType(ctx->f32, 2),
+ ctx->v4f32};
+ const char *type_names[] = {"f32", "v2f32", "v4f32"};
+ char name[256];
+
+ snprintf(name, sizeof(name), "llvm.amdgcn.buffer.load.%s",
+ type_names[func]);
+
+ return ac_build_intrinsic(ctx, name, types[func], args,
+ ARRAY_SIZE(args),
+ /* READNONE means writes can't affect it, while
+ * READONLY means that writes can affect it. */
+ can_speculate && HAVE_LLVM >= 0x0400 ?
+ AC_FUNC_ATTR_READNONE :
+ AC_FUNC_ATTR_READONLY);
+}
+
+LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ LLVMValueRef vindex,
+ LLVMValueRef voffset,
+ bool can_speculate)
+{
+ LLVMValueRef args [] = {
+ LLVMBuildBitCast(ctx->builder, rsrc, ctx->v4i32, ""),
+ vindex,
+ voffset,
+ LLVMConstInt(ctx->i1, 0, 0), /* glc */
+ LLVMConstInt(ctx->i1, 0, 0), /* slc */
+ };
+
+ return ac_build_intrinsic(ctx,
+ "llvm.amdgcn.buffer.load.format.v4f32",
+ ctx->v4f32, args, ARRAY_SIZE(args),
+ /* READNONE means writes can't affect it, while
+ * READONLY means that writes can affect it. */
+ can_speculate && HAVE_LLVM >= 0x0400 ?
+ AC_FUNC_ATTR_READNONE :
+ AC_FUNC_ATTR_READONLY);
+}
+
+/**
+ * Set range metadata on an instruction. This can only be used on load and
+ * call instructions. If you know an instruction can only produce the values
+ * 0, 1, 2, you would do set_range_metadata(value, 0, 3);
+ * \p lo is the minimum value inclusive.
+ * \p hi is the maximum value exclusive.
+ */
+static void set_range_metadata(struct ac_llvm_context *ctx,
+ LLVMValueRef value, unsigned lo, unsigned hi)
+{
+ LLVMValueRef range_md, md_args[2];
+ LLVMTypeRef type = LLVMTypeOf(value);
+ LLVMContextRef context = LLVMGetTypeContext(type);
+
+ md_args[0] = LLVMConstInt(type, lo, false);
+ md_args[1] = LLVMConstInt(type, hi, false);
+ range_md = LLVMMDNodeInContext(context, md_args, 2);
+ LLVMSetMetadata(value, ctx->range_md_kind, range_md);
+}
+
+LLVMValueRef
+ac_get_thread_id(struct ac_llvm_context *ctx)
+{
+ LLVMValueRef tid;
+
+ LLVMValueRef tid_args[2];
+ tid_args[0] = LLVMConstInt(ctx->i32, 0xffffffff, false);
+ tid_args[1] = LLVMConstInt(ctx->i32, 0, false);
+ tid_args[1] = ac_build_intrinsic(ctx,
+ "llvm.amdgcn.mbcnt.lo", ctx->i32,
+ tid_args, 2, AC_FUNC_ATTR_READNONE);
+
+ tid = ac_build_intrinsic(ctx, "llvm.amdgcn.mbcnt.hi",
+ ctx->i32, tid_args,
+ 2, AC_FUNC_ATTR_READNONE);
+ set_range_metadata(ctx, tid, 0, 64);
+ return tid;
+}
+
+/*
+ * SI implements derivatives using the local data store (LDS)
+ * All writes to the LDS happen in all executing threads at
+ * the same time. TID is the Thread ID for the current
+ * thread and is a value between 0 and 63, representing
+ * the thread's position in the wavefront.
+ *
+ * For the pixel shader threads are grouped into quads of four pixels.
+ * The TIDs of the pixels of a quad are:
+ *
+ * +------+------+
+ * |4n + 0|4n + 1|
+ * +------+------+
+ * |4n + 2|4n + 3|
+ * +------+------+
+ *
+ * So, masking the TID with 0xfffffffc yields the TID of the top left pixel
+ * of the quad, masking with 0xfffffffd yields the TID of the top pixel of
+ * the current pixel's column, and masking with 0xfffffffe yields the TID
+ * of the left pixel of the current pixel's row.
+ *
+ * Adding 1 yields the TID of the pixel to the right of the left pixel, and
+ * adding 2 yields the TID of the pixel below the top pixel.
+ */
+LLVMValueRef
+ac_build_ddxy(struct ac_llvm_context *ctx,
+ bool has_ds_bpermute,
+ uint32_t mask,
+ int idx,
+ LLVMValueRef val)
+{
+ LLVMValueRef tl, trbl, args[2];
+ LLVMValueRef result;
+
+ if (has_ds_bpermute) {
+ LLVMValueRef thread_id, tl_tid, trbl_tid;
+ thread_id = ac_get_thread_id(ctx);
+
+ tl_tid = LLVMBuildAnd(ctx->builder, thread_id,
+ LLVMConstInt(ctx->i32, mask, false), "");
+
+ trbl_tid = LLVMBuildAdd(ctx->builder, tl_tid,
+ LLVMConstInt(ctx->i32, idx, false), "");
+
+ args[0] = LLVMBuildMul(ctx->builder, tl_tid,
+ LLVMConstInt(ctx->i32, 4, false), "");
+ args[1] = val;
+ tl = ac_build_intrinsic(ctx,
+ "llvm.amdgcn.ds.bpermute", ctx->i32,
+ args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_CONVERGENT);
+
+ args[0] = LLVMBuildMul(ctx->builder, trbl_tid,
+ LLVMConstInt(ctx->i32, 4, false), "");
+ trbl = ac_build_intrinsic(ctx,
+ "llvm.amdgcn.ds.bpermute", ctx->i32,
+ args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_CONVERGENT);
+ } else {
+ uint32_t masks[2];
+
+ switch (mask) {
+ case AC_TID_MASK_TOP_LEFT:
+ masks[0] = 0x8000;
+ if (idx == 1)
+ masks[1] = 0x8055;
+ else
+ masks[1] = 0x80aa;
+
+ break;
+ case AC_TID_MASK_TOP:
+ masks[0] = 0x8044;
+ masks[1] = 0x80ee;
+ break;
+ case AC_TID_MASK_LEFT:
+ masks[0] = 0x80a0;
+ masks[1] = 0x80f5;
+ break;
+ }
+
+ args[0] = val;
+ args[1] = LLVMConstInt(ctx->i32, masks[0], false);
+
+ tl = ac_build_intrinsic(ctx,
+ "llvm.amdgcn.ds.swizzle", ctx->i32,
+ args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_CONVERGENT);
+
+ args[1] = LLVMConstInt(ctx->i32, masks[1], false);
+ trbl = ac_build_intrinsic(ctx,
+ "llvm.amdgcn.ds.swizzle", ctx->i32,
+ args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_CONVERGENT);
+ }
+
+ tl = LLVMBuildBitCast(ctx->builder, tl, ctx->f32, "");
+ trbl = LLVMBuildBitCast(ctx->builder, trbl, ctx->f32, "");
+ result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
+ return result;
+}
+
+void
+ac_build_sendmsg(struct ac_llvm_context *ctx,
+ uint32_t msg,
+ LLVMValueRef wave_id)
+{
+ LLVMValueRef args[2];
+ const char *intr_name = (HAVE_LLVM < 0x0400) ? "llvm.SI.sendmsg" : "llvm.amdgcn.s.sendmsg";
+ args[0] = LLVMConstInt(ctx->i32, msg, false);
+ args[1] = wave_id;
+ ac_build_intrinsic(ctx, intr_name, ctx->voidt, args, 2, 0);
+}
+
+LLVMValueRef
+ac_build_imsb(struct ac_llvm_context *ctx,
+ LLVMValueRef arg,
+ LLVMTypeRef dst_type)
+{
+ const char *intr_name = (HAVE_LLVM < 0x0400) ? "llvm.AMDGPU.flbit.i32" :
+ "llvm.amdgcn.sffbh.i32";
+ LLVMValueRef msb = ac_build_intrinsic(ctx, intr_name,
+ dst_type, &arg, 1,
+ AC_FUNC_ATTR_READNONE);
+
+ /* The HW returns the last bit index from MSB, but NIR/TGSI wants
+ * the index from LSB. Invert it by doing "31 - msb". */
+ msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
+ msb, "");
+
+ LLVMValueRef all_ones = LLVMConstInt(ctx->i32, -1, true);
+ LLVMValueRef cond = LLVMBuildOr(ctx->builder,
+ LLVMBuildICmp(ctx->builder, LLVMIntEQ,
+ arg, LLVMConstInt(ctx->i32, 0, 0), ""),
+ LLVMBuildICmp(ctx->builder, LLVMIntEQ,
+ arg, all_ones, ""), "");
+
+ return LLVMBuildSelect(ctx->builder, cond, all_ones, msb, "");
+}
+
+LLVMValueRef
+ac_build_umsb(struct ac_llvm_context *ctx,
+ LLVMValueRef arg,
+ LLVMTypeRef dst_type)
+{
+ LLVMValueRef args[2] = {
+ arg,
+ LLVMConstInt(ctx->i1, 1, 0),
+ };
+ LLVMValueRef msb = ac_build_intrinsic(ctx, "llvm.ctlz.i32",
+ dst_type, args, ARRAY_SIZE(args),
+ AC_FUNC_ATTR_READNONE);
+
+ /* The HW returns the last bit index from MSB, but TGSI/NIR wants
+ * the index from LSB. Invert it by doing "31 - msb". */
+ msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
+ msb, "");
+
+ /* check for zero */
+ return LLVMBuildSelect(ctx->builder,
+ LLVMBuildICmp(ctx->builder, LLVMIntEQ, arg,
+ LLVMConstInt(ctx->i32, 0, 0), ""),
+ LLVMConstInt(ctx->i32, -1, true), msb, "");
+}
+
+LLVMValueRef ac_build_clamp(struct ac_llvm_context *ctx, LLVMValueRef value)
+{
+ if (HAVE_LLVM >= 0x0500) {
+ LLVMValueRef max[2] = {
+ value,
+ LLVMConstReal(ctx->f32, 0),
+ };
+ LLVMValueRef min[2] = {
+ LLVMConstReal(ctx->f32, 1),
+ };
+
+ min[1] = ac_build_intrinsic(ctx, "llvm.maxnum.f32",
+ ctx->f32, max, 2,
+ AC_FUNC_ATTR_READNONE);
+ return ac_build_intrinsic(ctx, "llvm.minnum.f32",
+ ctx->f32, min, 2,
+ AC_FUNC_ATTR_READNONE);
+ }
+
+ LLVMValueRef args[3] = {
+ value,
+ LLVMConstReal(ctx->f32, 0),
+ LLVMConstReal(ctx->f32, 1),
+ };
+
+ return ac_build_intrinsic(ctx, "llvm.AMDGPU.clamp.", ctx->f32, args, 3,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+}
+
+void ac_build_export(struct ac_llvm_context *ctx, struct ac_export_args *a)
+{
+ LLVMValueRef args[9];
+
+ if (HAVE_LLVM >= 0x0500) {
+ args[0] = LLVMConstInt(ctx->i32, a->target, 0);
+ args[1] = LLVMConstInt(ctx->i32, a->enabled_channels, 0);
+
+ if (a->compr) {
+ LLVMTypeRef i16 = LLVMInt16TypeInContext(ctx->context);
+ LLVMTypeRef v2i16 = LLVMVectorType(i16, 2);
+
+ args[2] = LLVMBuildBitCast(ctx->builder, a->out[0],
+ v2i16, "");
+ args[3] = LLVMBuildBitCast(ctx->builder, a->out[1],
+ v2i16, "");
+ args[4] = LLVMConstInt(ctx->i1, a->done, 0);
+ args[5] = LLVMConstInt(ctx->i1, a->valid_mask, 0);
+
+ ac_build_intrinsic(ctx, "llvm.amdgcn.exp.compr.v2i16",
+ ctx->voidt, args, 6, 0);
+ } else {
+ args[2] = a->out[0];
+ args[3] = a->out[1];
+ args[4] = a->out[2];
+ args[5] = a->out[3];
+ args[6] = LLVMConstInt(ctx->i1, a->done, 0);
+ args[7] = LLVMConstInt(ctx->i1, a->valid_mask, 0);
+
+ ac_build_intrinsic(ctx, "llvm.amdgcn.exp.f32",
+ ctx->voidt, args, 8, 0);
+ }
+ return;
+ }
+
+ args[0] = LLVMConstInt(ctx->i32, a->enabled_channels, 0);
+ args[1] = LLVMConstInt(ctx->i32, a->valid_mask, 0);
+ args[2] = LLVMConstInt(ctx->i32, a->done, 0);
+ args[3] = LLVMConstInt(ctx->i32, a->target, 0);
+ args[4] = LLVMConstInt(ctx->i32, a->compr, 0);
+ memcpy(args + 5, a->out, sizeof(a->out[0]) * 4);
+
+ ac_build_intrinsic(ctx, "llvm.SI.export", ctx->voidt, args, 9,
+ AC_FUNC_ATTR_LEGACY);
+}
+
+LLVMValueRef ac_build_image_opcode(struct ac_llvm_context *ctx,
+ struct ac_image_args *a)
+{
+ LLVMTypeRef dst_type;
+ LLVMValueRef args[11];
+ unsigned num_args = 0;
+ const char *name;
+ char intr_name[128], type[64];
+
+ if (HAVE_LLVM >= 0x0400) {
+ bool sample = a->opcode == ac_image_sample ||
+ a->opcode == ac_image_gather4 ||
+ a->opcode == ac_image_get_lod;
+
+ if (sample)
+ args[num_args++] = bitcast_to_float(ctx, a->addr);
+ else
+ args[num_args++] = a->addr;
+
+ args[num_args++] = a->resource;
+ if (sample)
+ args[num_args++] = a->sampler;
+ args[num_args++] = LLVMConstInt(ctx->i32, a->dmask, 0);
+ if (sample)
+ args[num_args++] = LLVMConstInt(ctx->i1, a->unorm, 0);
+ args[num_args++] = LLVMConstInt(ctx->i1, 0, 0); /* glc */
+ args[num_args++] = LLVMConstInt(ctx->i1, 0, 0); /* slc */
+ args[num_args++] = LLVMConstInt(ctx->i1, 0, 0); /* lwe */
+ args[num_args++] = LLVMConstInt(ctx->i1, a->da, 0);
+
+ switch (a->opcode) {
+ case ac_image_sample:
+ name = "llvm.amdgcn.image.sample";
+ break;
+ case ac_image_gather4:
+ name = "llvm.amdgcn.image.gather4";
+ break;
+ case ac_image_load:
+ name = "llvm.amdgcn.image.load";
+ break;
+ case ac_image_load_mip:
+ name = "llvm.amdgcn.image.load.mip";
+ break;
+ case ac_image_get_lod:
+ name = "llvm.amdgcn.image.getlod";
+ break;
+ case ac_image_get_resinfo:
+ name = "llvm.amdgcn.image.getresinfo";
+ break;
+ default:
+ unreachable("invalid image opcode");
+ }
+
+ ac_build_type_name_for_intr(LLVMTypeOf(args[0]), type,
+ sizeof(type));
+
+ snprintf(intr_name, sizeof(intr_name), "%s%s%s%s.v4f32.%s.v8i32",
+ name,
+ a->compare ? ".c" : "",
+ a->bias ? ".b" :
+ a->lod ? ".l" :
+ a->deriv ? ".d" :
+ a->level_zero ? ".lz" : "",
+ a->offset ? ".o" : "",
+ type);
+
+ LLVMValueRef result =
+ ac_build_intrinsic(ctx, intr_name,
+ ctx->v4f32, args, num_args,
+ AC_FUNC_ATTR_READNONE);
+ if (!sample) {
+ result = LLVMBuildBitCast(ctx->builder, result,
+ ctx->v4i32, "");
+ }
+ return result;
+ }
+
+ args[num_args++] = a->addr;
+ args[num_args++] = a->resource;
+
+ if (a->opcode == ac_image_load ||
+ a->opcode == ac_image_load_mip ||
+ a->opcode == ac_image_get_resinfo) {
+ dst_type = ctx->v4i32;
+ } else {
+ dst_type = ctx->v4f32;
+ args[num_args++] = a->sampler;
+ }
+
+ args[num_args++] = LLVMConstInt(ctx->i32, a->dmask, 0);
+ args[num_args++] = LLVMConstInt(ctx->i32, a->unorm, 0);
+ args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* r128 */
+ args[num_args++] = LLVMConstInt(ctx->i32, a->da, 0);
+ args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* glc */
+ args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* slc */
+ args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* tfe */
+ args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* lwe */
+
+ switch (a->opcode) {
+ case ac_image_sample:
+ name = "llvm.SI.image.sample";
+ break;
+ case ac_image_gather4:
+ name = "llvm.SI.gather4";
+ break;
+ case ac_image_load:
+ name = "llvm.SI.image.load";
+ break;
+ case ac_image_load_mip:
+ name = "llvm.SI.image.load.mip";
+ break;
+ case ac_image_get_lod:
+ name = "llvm.SI.getlod";
+ break;
+ case ac_image_get_resinfo:
+ name = "llvm.SI.getresinfo";
+ break;
+ }
+
+ ac_build_type_name_for_intr(LLVMTypeOf(a->addr), type, sizeof(type));
+ snprintf(intr_name, sizeof(intr_name), "%s%s%s%s.%s",
+ name,
+ a->compare ? ".c" : "",
+ a->bias ? ".b" :
+ a->lod ? ".l" :
+ a->deriv ? ".d" :
+ a->level_zero ? ".lz" : "",
+ a->offset ? ".o" : "",
+ type);
+
+ return ac_build_intrinsic(ctx, intr_name,
+ dst_type, args, num_args,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+}
+
+LLVMValueRef ac_build_cvt_pkrtz_f16(struct ac_llvm_context *ctx,
+ LLVMValueRef args[2])
+{
+ if (HAVE_LLVM >= 0x0500) {
+ LLVMTypeRef v2f16 =
+ LLVMVectorType(LLVMHalfTypeInContext(ctx->context), 2);
+ LLVMValueRef res =
+ ac_build_intrinsic(ctx, "llvm.amdgcn.cvt.pkrtz",
+ v2f16, args, 2,
+ AC_FUNC_ATTR_READNONE);
+ return LLVMBuildBitCast(ctx->builder, res, ctx->i32, "");
+ }
+
+ return ac_build_intrinsic(ctx, "llvm.SI.packf16", ctx->i32, args, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+}
+
+/**
+ * KILL, AKA discard in GLSL.
+ *
+ * \param value kill if value < 0.0 or value == NULL.
+ */
+void ac_build_kill(struct ac_llvm_context *ctx, LLVMValueRef value)
+{
+ if (value) {
+ ac_build_intrinsic(ctx, "llvm.AMDGPU.kill", ctx->voidt,
+ &value, 1, AC_FUNC_ATTR_LEGACY);
+ } else {
+ ac_build_intrinsic(ctx, "llvm.AMDGPU.kilp", ctx->voidt,
+ NULL, 0, AC_FUNC_ATTR_LEGACY);
+ }
+}
+
+LLVMValueRef ac_build_bfe(struct ac_llvm_context *ctx, LLVMValueRef input,
+ LLVMValueRef offset, LLVMValueRef width,
+ bool is_signed)
+{
+ LLVMValueRef args[] = {
+ input,
+ offset,
+ width,
+ };
+
+ if (HAVE_LLVM >= 0x0500) {
+ return ac_build_intrinsic(ctx,
+ is_signed ? "llvm.amdgcn.sbfe.i32" :
+ "llvm.amdgcn.ubfe.i32",
+ ctx->i32, args, 3,
+ AC_FUNC_ATTR_READNONE);
+ }
+
+ return ac_build_intrinsic(ctx,
+ is_signed ? "llvm.AMDGPU.bfe.i32" :
+ "llvm.AMDGPU.bfe.u32",
+ ctx->i32, args, 3,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+}
+
+void ac_get_image_intr_name(const char *base_name,
+ LLVMTypeRef data_type,
+ LLVMTypeRef coords_type,
+ LLVMTypeRef rsrc_type,
+ char *out_name, unsigned out_len)
+{
+ char coords_type_name[8];
+
+ ac_build_type_name_for_intr(coords_type, coords_type_name,
+ sizeof(coords_type_name));
+
+ if (HAVE_LLVM <= 0x0309) {
+ snprintf(out_name, out_len, "%s.%s", base_name, coords_type_name);
+ } else {
+ char data_type_name[8];
+ char rsrc_type_name[8];
+
+ ac_build_type_name_for_intr(data_type, data_type_name,
+ sizeof(data_type_name));
+ ac_build_type_name_for_intr(rsrc_type, rsrc_type_name,
+ sizeof(rsrc_type_name));
+ snprintf(out_name, out_len, "%s.%s.%s.%s", base_name,
+ data_type_name, coords_type_name, rsrc_type_name);
+ }
+}
+
+#define AC_EXP_TARGET (HAVE_LLVM >= 0x0500 ? 0 : 3)
+#define AC_EXP_OUT0 (HAVE_LLVM >= 0x0500 ? 2 : 5)
+
+enum ac_ir_type {
+ AC_IR_UNDEF,
+ AC_IR_CONST,
+ AC_IR_VALUE,
+};
+
+struct ac_vs_exp_chan
+{
+ LLVMValueRef value;
+ float const_float;
+ enum ac_ir_type type;
+};
+
+struct ac_vs_exp_inst {
+ unsigned offset;
+ LLVMValueRef inst;
+ struct ac_vs_exp_chan chan[4];
+};
+
+struct ac_vs_exports {
+ unsigned num;
+ struct ac_vs_exp_inst exp[VARYING_SLOT_MAX];
+};
+
+/* Return true if the PARAM export has been eliminated. */
+static bool ac_eliminate_const_output(uint8_t *vs_output_param_offset,
+ uint32_t num_outputs,
+ struct ac_vs_exp_inst *exp)
+{
+ unsigned i, default_val; /* SPI_PS_INPUT_CNTL_i.DEFAULT_VAL */
+ bool is_zero[4] = {}, is_one[4] = {};
+
+ for (i = 0; i < 4; i++) {
+ /* It's a constant expression. Undef outputs are eliminated too. */
+ if (exp->chan[i].type == AC_IR_UNDEF) {
+ is_zero[i] = true;
+ is_one[i] = true;
+ } else if (exp->chan[i].type == AC_IR_CONST) {
+ if (exp->chan[i].const_float == 0)
+ is_zero[i] = true;
+ else if (exp->chan[i].const_float == 1)
+ is_one[i] = true;
+ else
+ return false; /* other constant */
+ } else
+ return false;
+ }
+
+ /* Only certain combinations of 0 and 1 can be eliminated. */
+ if (is_zero[0] && is_zero[1] && is_zero[2])
+ default_val = is_zero[3] ? 0 : 1;
+ else if (is_one[0] && is_one[1] && is_one[2])
+ default_val = is_zero[3] ? 2 : 3;
+ else
+ return false;
+
+ /* The PARAM export can be represented as DEFAULT_VAL. Kill it. */
+ LLVMInstructionEraseFromParent(exp->inst);
+
+ /* Change OFFSET to DEFAULT_VAL. */
+ for (i = 0; i < num_outputs; i++) {
+ if (vs_output_param_offset[i] == exp->offset) {
+ vs_output_param_offset[i] =
+ AC_EXP_PARAM_DEFAULT_VAL_0000 + default_val;
+ break;
+ }
+ }
+ return true;
+}
+
+static bool ac_eliminate_duplicated_output(uint8_t *vs_output_param_offset,
+ uint32_t num_outputs,
+ struct ac_vs_exports *processed,
+ struct ac_vs_exp_inst *exp)
+{
+ unsigned p, copy_back_channels = 0;
+
+ /* See if the output is already in the list of processed outputs.
+ * The LLVMValueRef comparison relies on SSA.
+ */
+ for (p = 0; p < processed->num; p++) {
+ bool different = false;
+
+ for (unsigned j = 0; j < 4; j++) {
+ struct ac_vs_exp_chan *c1 = &processed->exp[p].chan[j];
+ struct ac_vs_exp_chan *c2 = &exp->chan[j];
+
+ /* Treat undef as a match. */
+ if (c2->type == AC_IR_UNDEF)
+ continue;
+
+ /* If c1 is undef but c2 isn't, we can copy c2 to c1
+ * and consider the instruction duplicated.
+ */
+ if (c1->type == AC_IR_UNDEF) {
+ copy_back_channels |= 1 << j;
+ continue;
+ }
+
+ /* Test whether the channels are not equal. */
+ if (c1->type != c2->type ||
+ (c1->type == AC_IR_CONST &&
+ c1->const_float != c2->const_float) ||
+ (c1->type == AC_IR_VALUE &&
+ c1->value != c2->value)) {
+ different = true;
+ break;
+ }
+ }
+ if (!different)
+ break;
+
+ copy_back_channels = 0;
+ }
+ if (p == processed->num)
+ return false;
+
+ /* If a match was found, but the matching export has undef where the new
+ * one has a normal value, copy the normal value to the undef channel.
+ */
+ struct ac_vs_exp_inst *match = &processed->exp[p];
+
+ while (copy_back_channels) {
+ unsigned chan = u_bit_scan(&copy_back_channels);
+
+ assert(match->chan[chan].type == AC_IR_UNDEF);
+ LLVMSetOperand(match->inst, AC_EXP_OUT0 + chan,
+ exp->chan[chan].value);
+ match->chan[chan] = exp->chan[chan];
+ }
+
+ /* The PARAM export is duplicated. Kill it. */
+ LLVMInstructionEraseFromParent(exp->inst);
+
+ /* Change OFFSET to the matching export. */
+ for (unsigned i = 0; i < num_outputs; i++) {
+ if (vs_output_param_offset[i] == exp->offset) {
+ vs_output_param_offset[i] = match->offset;
+ break;
+ }
+ }
+ return true;
+}
+
+void ac_optimize_vs_outputs(struct ac_llvm_context *ctx,
+ LLVMValueRef main_fn,
+ uint8_t *vs_output_param_offset,
+ uint32_t num_outputs,
+ uint8_t *num_param_exports)
+{
+ LLVMBasicBlockRef bb;
+ bool removed_any = false;
+ struct ac_vs_exports exports;
+
+ exports.num = 0;
+
+ /* Process all LLVM instructions. */
+ bb = LLVMGetFirstBasicBlock(main_fn);
+ while (bb) {
+ LLVMValueRef inst = LLVMGetFirstInstruction(bb);
+
+ while (inst) {
+ LLVMValueRef cur = inst;
+ inst = LLVMGetNextInstruction(inst);
+ struct ac_vs_exp_inst exp;
+
+ if (LLVMGetInstructionOpcode(cur) != LLVMCall)
+ continue;
+
+ LLVMValueRef callee = ac_llvm_get_called_value(cur);
+
+ if (!ac_llvm_is_function(callee))
+ continue;
+
+ const char *name = LLVMGetValueName(callee);
+ unsigned num_args = LLVMCountParams(callee);
+
+ /* Check if this is an export instruction. */
+ if ((num_args != 9 && num_args != 8) ||
+ (strcmp(name, "llvm.SI.export") &&
+ strcmp(name, "llvm.amdgcn.exp.f32")))
+ continue;
+
+ LLVMValueRef arg = LLVMGetOperand(cur, AC_EXP_TARGET);
+ unsigned target = LLVMConstIntGetZExtValue(arg);
+
+ if (target < V_008DFC_SQ_EXP_PARAM)
+ continue;
+
+ target -= V_008DFC_SQ_EXP_PARAM;
+
+ /* Parse the instruction. */
+ memset(&exp, 0, sizeof(exp));
+ exp.offset = target;
+ exp.inst = cur;
+
+ for (unsigned i = 0; i < 4; i++) {
+ LLVMValueRef v = LLVMGetOperand(cur, AC_EXP_OUT0 + i);
+
+ exp.chan[i].value = v;
+
+ if (LLVMIsUndef(v)) {
+ exp.chan[i].type = AC_IR_UNDEF;
+ } else if (LLVMIsAConstantFP(v)) {
+ LLVMBool loses_info;
+ exp.chan[i].type = AC_IR_CONST;
+ exp.chan[i].const_float =
+ LLVMConstRealGetDouble(v, &loses_info);
+ } else {
+ exp.chan[i].type = AC_IR_VALUE;
+ }
+ }
+
+ /* Eliminate constant and duplicated PARAM exports. */
+ if (ac_eliminate_const_output(vs_output_param_offset,
+ num_outputs, &exp) ||
+ ac_eliminate_duplicated_output(vs_output_param_offset,
+ num_outputs, &exports,
+ &exp)) {
+ removed_any = true;
+ } else {
+ exports.exp[exports.num++] = exp;
+ }
+ }
+ bb = LLVMGetNextBasicBlock(bb);
+ }
+
+ /* Remove holes in export memory due to removed PARAM exports.
+ * This is done by renumbering all PARAM exports.
+ */
+ if (removed_any) {
+ uint8_t old_offset[VARYING_SLOT_MAX];
+ unsigned out, i;
+
+ /* Make a copy of the offsets. We need the old version while
+ * we are modifying some of them. */
+ memcpy(old_offset, vs_output_param_offset,
+ sizeof(old_offset));
+
+ for (i = 0; i < exports.num; i++) {
+ unsigned offset = exports.exp[i].offset;
+
+ /* Update vs_output_param_offset. Multiple outputs can
+ * have the same offset.
+ */
+ for (out = 0; out < num_outputs; out++) {
+ if (old_offset[out] == offset)
+ vs_output_param_offset[out] = i;
+ }
+
+ /* Change the PARAM offset in the instruction. */
+ LLVMSetOperand(exports.exp[i].inst, AC_EXP_TARGET,
+ LLVMConstInt(ctx->i32,
+ V_008DFC_SQ_EXP_PARAM + i, 0));
+ }
+ *num_param_exports = exports.num;
+ }
+}
diff --git a/lib/mesa/src/amd/common/ac_llvm_build.h b/lib/mesa/src/amd/common/ac_llvm_build.h
new file mode 100644
index 000000000..f4f485d8b
--- /dev/null
+++ b/lib/mesa/src/amd/common/ac_llvm_build.h
@@ -0,0 +1,271 @@
+/*
+ * Copyright 2016 Bas Nieuwenhuizen
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ */
+#ifndef AC_LLVM_BUILD_H
+#define AC_LLVM_BUILD_H
+
+#include <stdbool.h>
+#include <llvm-c/TargetMachine.h>
+
+#include "amd_family.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct ac_llvm_context {
+ LLVMContextRef context;
+ LLVMModuleRef module;
+ LLVMBuilderRef builder;
+
+ LLVMTypeRef voidt;
+ LLVMTypeRef i1;
+ LLVMTypeRef i8;
+ LLVMTypeRef i16;
+ LLVMTypeRef i32;
+ LLVMTypeRef i64;
+ LLVMTypeRef f16;
+ LLVMTypeRef f32;
+ LLVMTypeRef f64;
+ LLVMTypeRef v4i32;
+ LLVMTypeRef v4f32;
+ LLVMTypeRef v8i32;
+
+ LLVMValueRef i32_0;
+ LLVMValueRef i32_1;
+ LLVMValueRef f32_0;
+ LLVMValueRef f32_1;
+
+ unsigned range_md_kind;
+ unsigned invariant_load_md_kind;
+ unsigned uniform_md_kind;
+ unsigned fpmath_md_kind;
+ LLVMValueRef fpmath_md_2p5_ulp;
+ LLVMValueRef empty_md;
+
+ enum chip_class chip_class;
+};
+
+void
+ac_llvm_context_init(struct ac_llvm_context *ctx, LLVMContextRef context,
+ enum chip_class chip_class);
+
+LLVMValueRef
+ac_build_intrinsic(struct ac_llvm_context *ctx, const char *name,
+ LLVMTypeRef return_type, LLVMValueRef *params,
+ unsigned param_count, unsigned attrib_mask);
+
+void ac_build_type_name_for_intr(LLVMTypeRef type, char *buf, unsigned bufsize);
+
+LLVMValueRef
+ac_build_phi(struct ac_llvm_context *ctx, LLVMTypeRef type,
+ unsigned count_incoming, LLVMValueRef *values,
+ LLVMBasicBlockRef *blocks);
+
+LLVMValueRef
+ac_build_gather_values_extended(struct ac_llvm_context *ctx,
+ LLVMValueRef *values,
+ unsigned value_count,
+ unsigned value_stride,
+ bool load);
+LLVMValueRef
+ac_build_gather_values(struct ac_llvm_context *ctx,
+ LLVMValueRef *values,
+ unsigned value_count);
+
+LLVMValueRef
+ac_build_fdiv(struct ac_llvm_context *ctx,
+ LLVMValueRef num,
+ LLVMValueRef den);
+
+void
+ac_prepare_cube_coords(struct ac_llvm_context *ctx,
+ bool is_deriv, bool is_array, bool is_lod,
+ LLVMValueRef *coords_arg,
+ LLVMValueRef *derivs_arg);
+
+
+LLVMValueRef
+ac_build_fs_interp(struct ac_llvm_context *ctx,
+ LLVMValueRef llvm_chan,
+ LLVMValueRef attr_number,
+ LLVMValueRef params,
+ LLVMValueRef i,
+ LLVMValueRef j);
+
+LLVMValueRef
+ac_build_fs_interp_mov(struct ac_llvm_context *ctx,
+ LLVMValueRef parameter,
+ LLVMValueRef llvm_chan,
+ LLVMValueRef attr_number,
+ LLVMValueRef params);
+
+LLVMValueRef
+ac_build_gep0(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr,
+ LLVMValueRef index);
+
+void
+ac_build_indexed_store(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index,
+ LLVMValueRef value);
+
+LLVMValueRef
+ac_build_indexed_load(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index,
+ bool uniform);
+
+LLVMValueRef
+ac_build_indexed_load_const(struct ac_llvm_context *ctx,
+ LLVMValueRef base_ptr, LLVMValueRef index);
+
+void
+ac_build_buffer_store_dword(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ LLVMValueRef vdata,
+ unsigned num_channels,
+ LLVMValueRef voffset,
+ LLVMValueRef soffset,
+ unsigned inst_offset,
+ bool glc,
+ bool slc,
+ bool writeonly_memory,
+ bool has_add_tid);
+LLVMValueRef
+ac_build_buffer_load(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ int num_channels,
+ LLVMValueRef vindex,
+ LLVMValueRef voffset,
+ LLVMValueRef soffset,
+ unsigned inst_offset,
+ unsigned glc,
+ unsigned slc,
+ bool can_speculate,
+ bool allow_smem);
+
+LLVMValueRef ac_build_buffer_load_format(struct ac_llvm_context *ctx,
+ LLVMValueRef rsrc,
+ LLVMValueRef vindex,
+ LLVMValueRef voffset,
+ bool can_speculate);
+
+LLVMValueRef
+ac_get_thread_id(struct ac_llvm_context *ctx);
+
+#define AC_TID_MASK_TOP_LEFT 0xfffffffc
+#define AC_TID_MASK_TOP 0xfffffffd
+#define AC_TID_MASK_LEFT 0xfffffffe
+
+LLVMValueRef
+ac_build_ddxy(struct ac_llvm_context *ctx,
+ bool has_ds_bpermute,
+ uint32_t mask,
+ int idx,
+ LLVMValueRef val);
+
+#define AC_SENDMSG_GS 2
+#define AC_SENDMSG_GS_DONE 3
+
+#define AC_SENDMSG_GS_OP_NOP (0 << 4)
+#define AC_SENDMSG_GS_OP_CUT (1 << 4)
+#define AC_SENDMSG_GS_OP_EMIT (2 << 4)
+#define AC_SENDMSG_GS_OP_EMIT_CUT (3 << 4)
+
+void ac_build_sendmsg(struct ac_llvm_context *ctx,
+ uint32_t msg,
+ LLVMValueRef wave_id);
+
+LLVMValueRef ac_build_imsb(struct ac_llvm_context *ctx,
+ LLVMValueRef arg,
+ LLVMTypeRef dst_type);
+
+LLVMValueRef ac_build_umsb(struct ac_llvm_context *ctx,
+ LLVMValueRef arg,
+ LLVMTypeRef dst_type);
+
+LLVMValueRef ac_build_clamp(struct ac_llvm_context *ctx, LLVMValueRef value);
+
+struct ac_export_args {
+ LLVMValueRef out[4];
+ unsigned target;
+ unsigned enabled_channels;
+ bool compr;
+ bool done;
+ bool valid_mask;
+};
+
+void ac_build_export(struct ac_llvm_context *ctx, struct ac_export_args *a);
+
+enum ac_image_opcode {
+ ac_image_sample,
+ ac_image_gather4,
+ ac_image_load,
+ ac_image_load_mip,
+ ac_image_get_lod,
+ ac_image_get_resinfo,
+};
+
+struct ac_image_args {
+ enum ac_image_opcode opcode;
+ bool level_zero;
+ bool bias;
+ bool lod;
+ bool deriv;
+ bool compare;
+ bool offset;
+
+ LLVMValueRef resource;
+ LLVMValueRef sampler;
+ LLVMValueRef addr;
+ unsigned dmask;
+ bool unorm;
+ bool da;
+};
+
+LLVMValueRef ac_build_image_opcode(struct ac_llvm_context *ctx,
+ struct ac_image_args *a);
+LLVMValueRef ac_build_cvt_pkrtz_f16(struct ac_llvm_context *ctx,
+ LLVMValueRef args[2]);
+void ac_build_kill(struct ac_llvm_context *ctx, LLVMValueRef value);
+LLVMValueRef ac_build_bfe(struct ac_llvm_context *ctx, LLVMValueRef input,
+ LLVMValueRef offset, LLVMValueRef width,
+ bool is_signed);
+
+void ac_get_image_intr_name(const char *base_name,
+ LLVMTypeRef data_type,
+ LLVMTypeRef coords_type,
+ LLVMTypeRef rsrc_type,
+ char *out_name, unsigned out_len);
+
+void ac_optimize_vs_outputs(struct ac_llvm_context *ac,
+ LLVMValueRef main_fn,
+ uint8_t *vs_output_param_offset,
+ uint32_t num_outputs,
+ uint8_t *num_param_exports);
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/mesa/src/amd/common/ac_llvm_helper.cpp b/lib/mesa/src/amd/common/ac_llvm_helper.cpp
index 062f0aad9..4db703622 100644
--- a/lib/mesa/src/amd/common/ac_llvm_helper.cpp
+++ b/lib/mesa/src/amd/common/ac_llvm_helper.cpp
@@ -26,21 +26,57 @@
/* based on Marek's patch to lp_bld_misc.cpp */
// Workaround http://llvm.org/PR23628
-#if HAVE_LLVM >= 0x0307
-# pragma push_macro("DEBUG")
-# undef DEBUG
-#endif
+#pragma push_macro("DEBUG")
+#undef DEBUG
-#include "ac_nir_to_llvm.h"
+#include "ac_llvm_util.h"
#include <llvm-c/Core.h>
#include <llvm/Target/TargetOptions.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
+#include <llvm/IR/Attributes.h>
+#include <llvm/IR/CallSite.h>
+
+#if HAVE_LLVM < 0x0500
+namespace llvm {
+typedef AttributeSet AttributeList;
+}
+#endif
-extern "C" void
-ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
+void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes)
{
llvm::Argument *A = llvm::unwrap<llvm::Argument>(val);
+#if HAVE_LLVM < 0x0500
llvm::AttrBuilder B;
B.addDereferenceableAttr(bytes);
- A->addAttr(llvm::AttributeSet::get(A->getContext(), A->getArgNo() + 1, B));
+ A->addAttr(llvm::AttributeList::get(A->getContext(), A->getArgNo() + 1, B));
+#else
+ A->addAttr(llvm::Attribute::getWithDereferenceableBytes(A->getContext(), bytes));
+#endif
+}
+
+bool ac_is_sgpr_param(LLVMValueRef arg)
+{
+ llvm::Argument *A = llvm::unwrap<llvm::Argument>(arg);
+ llvm::AttributeList AS = A->getParent()->getAttributes();
+ unsigned ArgNo = A->getArgNo();
+ return AS.hasAttribute(ArgNo + 1, llvm::Attribute::ByVal) ||
+ AS.hasAttribute(ArgNo + 1, llvm::Attribute::InReg);
+}
+
+LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call)
+{
+#if HAVE_LLVM >= 0x0309
+ return LLVMGetCalledValue(call);
+#else
+ return llvm::wrap(llvm::CallSite(llvm::unwrap<llvm::Instruction>(call)).getCalledValue());
+#endif
+}
+
+bool ac_llvm_is_function(LLVMValueRef v)
+{
+#if HAVE_LLVM >= 0x0309
+ return LLVMGetValueKind(v) == LLVMFunctionValueKind;
+#else
+ return llvm::isa<llvm::Function>(llvm::unwrap(v));
+#endif
}
diff --git a/lib/mesa/src/amd/common/ac_llvm_util.c b/lib/mesa/src/amd/common/ac_llvm_util.c
index a8408dd79..675926ea6 100644
--- a/lib/mesa/src/amd/common/ac_llvm_util.c
+++ b/lib/mesa/src/amd/common/ac_llvm_util.c
@@ -24,32 +24,39 @@
*/
/* based on pieces from si_pipe.c and radeon_llvm_emit.c */
#include "ac_llvm_util.h"
-
+#include "util/bitscan.h"
#include <llvm-c/Core.h>
-
+#include <llvm-c/Support.h>
#include "c11/threads.h"
#include <assert.h>
#include <stdio.h>
+#include <string.h>
static void ac_init_llvm_target()
{
-#if HAVE_LLVM < 0x0307
- LLVMInitializeR600TargetInfo();
- LLVMInitializeR600Target();
- LLVMInitializeR600TargetMC();
- LLVMInitializeR600AsmPrinter();
-#else
LLVMInitializeAMDGPUTargetInfo();
LLVMInitializeAMDGPUTarget();
LLVMInitializeAMDGPUTargetMC();
LLVMInitializeAMDGPUAsmPrinter();
-#endif
+
+ /* For inline assembly. */
+ LLVMInitializeAMDGPUAsmParser();
+
+ /* Workaround for bug in llvm 4.0 that causes image intrinsics
+ * to disappear.
+ * https://reviews.llvm.org/D26348
+ */
+ if (HAVE_LLVM >= 0x0400) {
+ /* "mesa" is the prefix for error messages */
+ const char *argv[2] = { "mesa", "-simplifycfg-sink-common=false" };
+ LLVMParseCommandLineOptions(2, argv, NULL);
+ }
}
static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
-static LLVMTargetRef ac_get_llvm_target(const char *triple)
+LLVMTargetRef ac_get_llvm_target(const char *triple)
{
LLVMTargetRef target = NULL;
char *err_message = NULL;
@@ -96,47 +103,137 @@ static const char *ac_get_llvm_processor_name(enum radeon_family family)
return "iceland";
case CHIP_CARRIZO:
return "carrizo";
-#if HAVE_LLVM <= 0x0307
- case CHIP_FIJI:
- return "tonga";
- case CHIP_STONEY:
- return "carrizo";
-#else
case CHIP_FIJI:
return "fiji";
case CHIP_STONEY:
return "stoney";
-#endif
-#if HAVE_LLVM <= 0x0308
- case CHIP_POLARIS10:
- return "tonga";
- case CHIP_POLARIS11:
- return "tonga";
-#else
case CHIP_POLARIS10:
return "polaris10";
case CHIP_POLARIS11:
+ case CHIP_POLARIS12:
return "polaris11";
-#endif
+ case CHIP_VEGA10:
+ case CHIP_RAVEN:
+ return "gfx900";
default:
return "";
}
}
-LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family)
+LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options)
{
assert(family >= CHIP_TAHITI);
-
- const char *triple = "amdgcn--";
+ char features[256];
+ const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--";
LLVMTargetRef target = ac_get_llvm_target(triple);
+
+ snprintf(features, sizeof(features),
+ "+DumpCode,+vgpr-spilling,-fp32-denormals%s",
+ tm_options & AC_TM_SISCHED ? ",+si-scheduler" : "");
+
LLVMTargetMachineRef tm = LLVMCreateTargetMachine(
target,
triple,
ac_get_llvm_processor_name(family),
- "+DumpCode,+vgpr-spilling",
+ features,
LLVMCodeGenLevelDefault,
LLVMRelocDefault,
LLVMCodeModelDefault);
return tm;
}
+
+
+#if HAVE_LLVM < 0x0400
+static LLVMAttribute ac_attr_to_llvm_attr(enum ac_func_attr attr)
+{
+ switch (attr) {
+ case AC_FUNC_ATTR_ALWAYSINLINE: return LLVMAlwaysInlineAttribute;
+ case AC_FUNC_ATTR_BYVAL: return LLVMByValAttribute;
+ case AC_FUNC_ATTR_INREG: return LLVMInRegAttribute;
+ case AC_FUNC_ATTR_NOALIAS: return LLVMNoAliasAttribute;
+ case AC_FUNC_ATTR_NOUNWIND: return LLVMNoUnwindAttribute;
+ case AC_FUNC_ATTR_READNONE: return LLVMReadNoneAttribute;
+ case AC_FUNC_ATTR_READONLY: return LLVMReadOnlyAttribute;
+ default:
+ fprintf(stderr, "Unhandled function attribute: %x\n", attr);
+ return 0;
+ }
+}
+
+#else
+
+static const char *attr_to_str(enum ac_func_attr attr)
+{
+ switch (attr) {
+ case AC_FUNC_ATTR_ALWAYSINLINE: return "alwaysinline";
+ case AC_FUNC_ATTR_BYVAL: return "byval";
+ case AC_FUNC_ATTR_INREG: return "inreg";
+ case AC_FUNC_ATTR_NOALIAS: return "noalias";
+ case AC_FUNC_ATTR_NOUNWIND: return "nounwind";
+ case AC_FUNC_ATTR_READNONE: return "readnone";
+ case AC_FUNC_ATTR_READONLY: return "readonly";
+ case AC_FUNC_ATTR_WRITEONLY: return "writeonly";
+ case AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY: return "inaccessiblememonly";
+ case AC_FUNC_ATTR_CONVERGENT: return "convergent";
+ default:
+ fprintf(stderr, "Unhandled function attribute: %x\n", attr);
+ return 0;
+ }
+}
+
+#endif
+
+void
+ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function,
+ int attr_idx, enum ac_func_attr attr)
+{
+#if HAVE_LLVM < 0x0400
+ LLVMAttribute llvm_attr = ac_attr_to_llvm_attr(attr);
+ if (attr_idx == -1) {
+ LLVMAddFunctionAttr(function, llvm_attr);
+ } else {
+ LLVMAddAttribute(LLVMGetParam(function, attr_idx - 1), llvm_attr);
+ }
+#else
+ const char *attr_name = attr_to_str(attr);
+ unsigned kind_id = LLVMGetEnumAttributeKindForName(attr_name,
+ strlen(attr_name));
+ LLVMAttributeRef llvm_attr = LLVMCreateEnumAttribute(ctx, kind_id, 0);
+
+ if (LLVMIsAFunction(function))
+ LLVMAddAttributeAtIndex(function, attr_idx, llvm_attr);
+ else
+ LLVMAddCallSiteAttribute(function, attr_idx, llvm_attr);
+#endif
+}
+
+void ac_add_func_attributes(LLVMContextRef ctx, LLVMValueRef function,
+ unsigned attrib_mask)
+{
+ attrib_mask |= AC_FUNC_ATTR_NOUNWIND;
+ attrib_mask &= ~AC_FUNC_ATTR_LEGACY;
+
+ while (attrib_mask) {
+ enum ac_func_attr attr = 1u << u_bit_scan(&attrib_mask);
+ ac_add_function_attr(ctx, function, -1, attr);
+ }
+}
+
+void
+ac_dump_module(LLVMModuleRef module)
+{
+ char *str = LLVMPrintModuleToString(module);
+ fprintf(stderr, "%s", str);
+ LLVMDisposeMessage(str);
+}
+
+void
+ac_llvm_add_target_dep_function_attr(LLVMValueRef F,
+ const char *name, int value)
+{
+ char str[16];
+
+ snprintf(str, sizeof(str), "%i", value);
+ LLVMAddTargetDependentFunctionAttr(F, name, str);
+}
diff --git a/lib/mesa/src/amd/common/ac_llvm_util.h b/lib/mesa/src/amd/common/ac_llvm_util.h
index 8357fbf3f..cc4fe3bd6 100644
--- a/lib/mesa/src/amd/common/ac_llvm_util.h
+++ b/lib/mesa/src/amd/common/ac_llvm_util.h
@@ -22,10 +22,62 @@
* of the Software.
*
*/
-#pragma once
+#ifndef AC_LLVM_UTIL_H
+#define AC_LLVM_UTIL_H
+
+#include <stdbool.h>
#include <llvm-c/TargetMachine.h>
#include "amd_family.h"
-LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family);
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum ac_func_attr {
+ AC_FUNC_ATTR_ALWAYSINLINE = (1 << 0),
+ AC_FUNC_ATTR_BYVAL = (1 << 1),
+ AC_FUNC_ATTR_INREG = (1 << 2),
+ AC_FUNC_ATTR_NOALIAS = (1 << 3),
+ AC_FUNC_ATTR_NOUNWIND = (1 << 4),
+ AC_FUNC_ATTR_READNONE = (1 << 5),
+ AC_FUNC_ATTR_READONLY = (1 << 6),
+ AC_FUNC_ATTR_WRITEONLY = HAVE_LLVM >= 0x0400 ? (1 << 7) : 0,
+ AC_FUNC_ATTR_INACCESSIBLE_MEM_ONLY = HAVE_LLVM >= 0x0400 ? (1 << 8) : 0,
+ AC_FUNC_ATTR_CONVERGENT = HAVE_LLVM >= 0x0400 ? (1 << 9) : 0,
+
+ /* Legacy intrinsic that needs attributes on function declarations
+ * and they must match the internal LLVM definition exactly, otherwise
+ * intrinsic selection fails.
+ */
+ AC_FUNC_ATTR_LEGACY = (1u << 31),
+};
+
+enum ac_target_machine_options {
+ AC_TM_SUPPORTS_SPILL = (1 << 0),
+ AC_TM_SISCHED = (1 << 1),
+};
+LLVMTargetMachineRef ac_create_target_machine(enum radeon_family family, enum ac_target_machine_options tm_options);
+
+LLVMTargetRef ac_get_llvm_target(const char *triple);
+void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes);
+bool ac_is_sgpr_param(LLVMValueRef param);
+void ac_add_function_attr(LLVMContextRef ctx, LLVMValueRef function,
+ int attr_idx, enum ac_func_attr attr);
+void ac_add_func_attributes(LLVMContextRef ctx, LLVMValueRef function,
+ unsigned attrib_mask);
+void ac_dump_module(LLVMModuleRef module);
+
+LLVMValueRef ac_llvm_get_called_value(LLVMValueRef call);
+bool ac_llvm_is_function(LLVMValueRef v);
+
+void
+ac_llvm_add_target_dep_function_attr(LLVMValueRef F,
+ const char *name, int value);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* AC_LLVM_UTIL_H */
diff --git a/lib/mesa/src/amd/common/ac_nir_to_llvm.c b/lib/mesa/src/amd/common/ac_nir_to_llvm.c
index 60a3f0997..a9c231ccb 100644
--- a/lib/mesa/src/amd/common/ac_nir_to_llvm.c
+++ b/lib/mesa/src/amd/common/ac_nir_to_llvm.c
@@ -22,12 +22,16 @@
*/
#include "ac_nir_to_llvm.h"
+#include "ac_llvm_build.h"
+#include "ac_llvm_util.h"
#include "ac_binary.h"
#include "sid.h"
#include "nir/nir.h"
#include "../vulkan/radv_descriptor_set.h"
#include "util/bitscan.h"
#include <llvm-c/Transforms/Scalar.h>
+#include "ac_shader_info.h"
+#include "ac_exp_param.h"
enum radeon_llvm_calling_convention {
RADEON_LLVM_AMDGPU_VS = 87,
@@ -50,9 +54,10 @@ enum desc_type {
};
struct nir_to_llvm_context {
+ struct ac_llvm_context ac;
const struct ac_nir_compiler_options *options;
struct ac_shader_variant_info *shader_info;
-
+ unsigned max_workgroup_size;
LLVMContextRef context;
LLVMModuleRef module;
LLVMBuilderRef builder;
@@ -60,8 +65,10 @@ struct nir_to_llvm_context {
struct hash_table *defs;
struct hash_table *phis;
+ struct hash_table *vars;
- LLVMValueRef descriptor_sets[4];
+ LLVMValueRef descriptor_sets[AC_UD_MAX_SETS];
+ LLVMValueRef ring_offsets;
LLVMValueRef push_constants;
LLVMValueRef num_work_groups;
LLVMValueRef workgroup_ids;
@@ -71,17 +78,46 @@ struct nir_to_llvm_context {
LLVMValueRef vertex_buffers;
LLVMValueRef base_vertex;
LLVMValueRef start_instance;
+ LLVMValueRef draw_index;
LLVMValueRef vertex_id;
LLVMValueRef rel_auto_id;
LLVMValueRef vs_prim_id;
LLVMValueRef instance_id;
+ LLVMValueRef ls_out_layout;
+ LLVMValueRef es2gs_offset;
+
+ LLVMValueRef tcs_offchip_layout;
+ LLVMValueRef tcs_out_offsets;
+ LLVMValueRef tcs_out_layout;
+ LLVMValueRef tcs_in_layout;
+ LLVMValueRef oc_lds;
+ LLVMValueRef tess_factor_offset;
+ LLVMValueRef tcs_patch_id;
+ LLVMValueRef tcs_rel_ids;
+ LLVMValueRef tes_rel_patch_id;
+ LLVMValueRef tes_patch_id;
+ LLVMValueRef tes_u;
+ LLVMValueRef tes_v;
+
+ LLVMValueRef gsvs_ring_stride;
+ LLVMValueRef gsvs_num_entries;
+ LLVMValueRef gs2vs_offset;
+ LLVMValueRef gs_wave_id;
+ LLVMValueRef gs_vtx_offset[6];
+ LLVMValueRef gs_prim_id, gs_invocation_id;
+
+ LLVMValueRef esgs_ring;
+ LLVMValueRef gsvs_ring;
+ LLVMValueRef hs_ring_tess_offchip;
+ LLVMValueRef hs_ring_tess_factor;
LLVMValueRef prim_mask;
- LLVMValueRef sample_positions;
+ LLVMValueRef sample_pos_offset;
LLVMValueRef persp_sample, persp_center, persp_centroid;
LLVMValueRef linear_sample, linear_center, linear_centroid;
LLVMValueRef front_face;
LLVMValueRef ancillary;
+ LLVMValueRef sample_coverage;
LLVMValueRef frag_pos[4];
LLVMBasicBlockRef continue_block;
@@ -96,60 +132,77 @@ struct nir_to_llvm_context {
LLVMTypeRef v3i32;
LLVMTypeRef v4i32;
LLVMTypeRef v8i32;
+ LLVMTypeRef f64;
LLVMTypeRef f32;
LLVMTypeRef f16;
LLVMTypeRef v2f32;
LLVMTypeRef v4f32;
- LLVMTypeRef v16i8;
LLVMTypeRef voidt;
+ LLVMValueRef i1true;
+ LLVMValueRef i1false;
LLVMValueRef i32zero;
LLVMValueRef i32one;
LLVMValueRef f32zero;
LLVMValueRef f32one;
LLVMValueRef v4f32empty;
- unsigned range_md_kind;
unsigned uniform_md_kind;
- unsigned fpmath_md_kind;
- unsigned invariant_load_md_kind;
LLVMValueRef empty_md;
- LLVMValueRef fpmath_md_2p5_ulp;
gl_shader_stage stage;
LLVMValueRef lds;
LLVMValueRef inputs[RADEON_LLVM_MAX_INPUTS * 4];
LLVMValueRef outputs[RADEON_LLVM_MAX_OUTPUTS * 4];
- LLVMValueRef shared_memory;
uint64_t input_mask;
uint64_t output_mask;
int num_locals;
LLVMValueRef *locals;
- bool has_ddxy;
- unsigned num_clips;
- unsigned num_culls;
-};
+ uint8_t num_output_clips;
+ uint8_t num_output_culls;
+
+ bool has_ds_bpermute;
-struct ac_tex_info {
- LLVMValueRef args[12];
- int arg_count;
- LLVMTypeRef dst_type;
- bool has_offset;
+ bool is_gs_copy_shader;
+ LLVMValueRef gs_next_vertex;
+ unsigned gs_max_out_vertices;
+
+ unsigned tes_primitive_mode;
+ uint64_t tess_outputs_written;
+ uint64_t tess_patch_outputs_written;
};
-static LLVMValueRef
-emit_llvm_intrinsic(struct nir_to_llvm_context *ctx, const char *name,
- LLVMTypeRef return_type, LLVMValueRef *params,
- unsigned param_count, LLVMAttribute attribs);
static LLVMValueRef get_sampler_desc(struct nir_to_llvm_context *ctx,
- nir_deref_var *deref,
+ const nir_deref_var *deref,
enum desc_type desc_type);
static unsigned radeon_llvm_reg_index_soa(unsigned index, unsigned chan)
{
return (index * 4) + chan;
}
+static unsigned shader_io_get_unique_index(gl_varying_slot slot)
+{
+ /* handle patch indices separate */
+ if (slot == VARYING_SLOT_TESS_LEVEL_OUTER)
+ return 0;
+ if (slot == VARYING_SLOT_TESS_LEVEL_INNER)
+ return 1;
+ if (slot >= VARYING_SLOT_PATCH0 && slot <= VARYING_SLOT_TESS_MAX)
+ return 2 + (slot - VARYING_SLOT_PATCH0);
+
+ if (slot == VARYING_SLOT_POS)
+ return 0;
+ if (slot == VARYING_SLOT_PSIZ)
+ return 1;
+ if (slot == VARYING_SLOT_CLIP_DIST0)
+ return 2;
+ /* 3 is reserved for clip dist as well */
+ if (slot >= VARYING_SLOT_VAR0 && slot <= VARYING_SLOT_VAR31)
+ return 4 + (slot - VARYING_SLOT_VAR0);
+ unreachable("illegal slot in get unique index\n");
+}
+
static unsigned llvm_get_type_size(LLVMTypeRef type)
{
LLVMTypeKind kind = LLVMGetTypeKind(type);
@@ -197,12 +250,83 @@ static void set_llvm_calling_convention(LLVMValueRef func,
LLVMSetFunctionCallConv(func, calling_conv);
}
+#define MAX_ARGS 23
+struct arg_info {
+ LLVMTypeRef types[MAX_ARGS];
+ LLVMValueRef *assign[MAX_ARGS];
+ unsigned array_params_mask;
+ uint8_t count;
+ uint8_t user_sgpr_count;
+ uint8_t sgpr_count;
+ uint8_t num_user_sgprs_used;
+ uint8_t num_sgprs_used;
+ uint8_t num_vgprs_used;
+};
+
+static inline void
+add_argument(struct arg_info *info,
+ LLVMTypeRef type, LLVMValueRef *param_ptr)
+{
+ assert(info->count < MAX_ARGS);
+ info->assign[info->count] = param_ptr;
+ info->types[info->count] = type;
+ info->count++;
+}
+
+static inline void
+add_sgpr_argument(struct arg_info *info,
+ LLVMTypeRef type, LLVMValueRef *param_ptr)
+{
+ add_argument(info, type, param_ptr);
+ info->num_sgprs_used += llvm_get_type_size(type) / 4;
+ info->sgpr_count++;
+}
+
+static inline void
+add_user_sgpr_argument(struct arg_info *info,
+ LLVMTypeRef type,
+ LLVMValueRef *param_ptr)
+{
+ add_sgpr_argument(info, type, param_ptr);
+ info->num_user_sgprs_used += llvm_get_type_size(type) / 4;
+ info->user_sgpr_count++;
+}
+
+static inline void
+add_vgpr_argument(struct arg_info *info,
+ LLVMTypeRef type,
+ LLVMValueRef *param_ptr)
+{
+ add_argument(info, type, param_ptr);
+ info->num_vgprs_used += llvm_get_type_size(type) / 4;
+}
+
+static inline void
+add_user_sgpr_array_argument(struct arg_info *info,
+ LLVMTypeRef type,
+ LLVMValueRef *param_ptr)
+{
+ info->array_params_mask |= (1 << info->count);
+ add_user_sgpr_argument(info, type, param_ptr);
+}
+
+static void assign_arguments(LLVMValueRef main_function,
+ struct arg_info *info)
+{
+ unsigned i;
+ for (i = 0; i < info->count; i++) {
+ if (info->assign[i])
+ *info->assign[i] = LLVMGetParam(main_function, i);
+ }
+}
+
static LLVMValueRef
create_llvm_function(LLVMContextRef ctx, LLVMModuleRef module,
LLVMBuilderRef builder, LLVMTypeRef *return_types,
- unsigned num_return_elems, LLVMTypeRef *param_types,
- unsigned param_count, unsigned array_params,
- unsigned sgpr_params, bool unsafe_math)
+ unsigned num_return_elems,
+ struct arg_info *args,
+ unsigned max_workgroup_size,
+ bool unsafe_math)
{
LLVMTypeRef main_function_type, ret_type;
LLVMBasicBlockRef main_function_body;
@@ -215,7 +339,7 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef module,
/* Setup the function */
main_function_type =
- LLVMFunctionType(ret_type, param_types, param_count, 0);
+ LLVMFunctionType(ret_type, args->types, args->count, 0);
LLVMValueRef main_function =
LLVMAddFunction(module, "main", main_function_type);
main_function_body =
@@ -223,17 +347,22 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef module,
LLVMPositionBuilderAtEnd(builder, main_function_body);
LLVMSetFunctionCallConv(main_function, RADEON_LLVM_AMDGPU_CS);
- for (unsigned i = 0; i < sgpr_params; ++i) {
- LLVMValueRef P = LLVMGetParam(main_function, i);
-
- if (i < array_params) {
- LLVMAddAttribute(P, LLVMByValAttribute);
+ for (unsigned i = 0; i < args->sgpr_count; ++i) {
+ if (args->array_params_mask & (1 << i)) {
+ LLVMValueRef P = LLVMGetParam(main_function, i);
+ ac_add_function_attr(ctx, main_function, i + 1, AC_FUNC_ATTR_BYVAL);
ac_add_attr_dereferenceable(P, UINT64_MAX);
}
- else
- LLVMAddAttribute(P, LLVMInRegAttribute);
+ else {
+ ac_add_function_attr(ctx, main_function, i + 1, AC_FUNC_ATTR_INREG);
+ }
}
+ if (max_workgroup_size) {
+ ac_llvm_add_target_dep_function_attr(main_function,
+ "amdgpu-max-work-group-size",
+ max_workgroup_size);
+ }
if (unsafe_math) {
/* These were copied from some LLVM test. */
LLVMAddTargetDependentFunctionAttr(main_function,
@@ -258,201 +387,521 @@ static LLVMTypeRef const_array(LLVMTypeRef elem_type, int num_elements)
CONST_ADDR_SPACE);
}
-static LLVMValueRef get_shared_memory_ptr(struct nir_to_llvm_context *ctx,
- int idx,
- LLVMTypeRef type)
+static LLVMTypeRef to_integer_type_scalar(struct ac_llvm_context *ctx, LLVMTypeRef t)
{
- LLVMValueRef offset;
- LLVMValueRef ptr;
- int addr_space;
-
- offset = LLVMConstInt(ctx->i32, idx, false);
+ if (t == ctx->f16 || t == ctx->i16)
+ return ctx->i16;
+ else if (t == ctx->f32 || t == ctx->i32)
+ return ctx->i32;
+ else if (t == ctx->f64 || t == ctx->i64)
+ return ctx->i64;
+ else
+ unreachable("Unhandled integer size");
+}
- ptr = ctx->shared_memory;
- ptr = LLVMBuildGEP(ctx->builder, ptr, &offset, 1, "");
- addr_space = LLVMGetPointerAddressSpace(LLVMTypeOf(ptr));
- ptr = LLVMBuildBitCast(ctx->builder, ptr, LLVMPointerType(type, addr_space), "");
- return ptr;
+static LLVMTypeRef to_integer_type(struct ac_llvm_context *ctx, LLVMTypeRef t)
+{
+ if (LLVMGetTypeKind(t) == LLVMVectorTypeKind) {
+ LLVMTypeRef elem_type = LLVMGetElementType(t);
+ return LLVMVectorType(to_integer_type_scalar(ctx, elem_type),
+ LLVMGetVectorSize(t));
+ }
+ return to_integer_type_scalar(ctx, t);
}
-static LLVMValueRef to_integer(struct nir_to_llvm_context *ctx, LLVMValueRef v)
+static LLVMValueRef to_integer(struct ac_llvm_context *ctx, LLVMValueRef v)
{
LLVMTypeRef type = LLVMTypeOf(v);
- if (type == ctx->f32) {
- return LLVMBuildBitCast(ctx->builder, v, ctx->i32, "");
- } else if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
- LLVMTypeRef elem_type = LLVMGetElementType(type);
- if (elem_type == ctx->f32) {
- LLVMTypeRef nt = LLVMVectorType(ctx->i32, LLVMGetVectorSize(type));
- return LLVMBuildBitCast(ctx->builder, v, nt, "");
- }
+ return LLVMBuildBitCast(ctx->builder, v, to_integer_type(ctx, type), "");
+}
+
+static LLVMTypeRef to_float_type_scalar(struct ac_llvm_context *ctx, LLVMTypeRef t)
+{
+ if (t == ctx->i16 || t == ctx->f16)
+ return ctx->f16;
+ else if (t == ctx->i32 || t == ctx->f32)
+ return ctx->f32;
+ else if (t == ctx->i64 || t == ctx->f64)
+ return ctx->f64;
+ else
+ unreachable("Unhandled float size");
+}
+
+static LLVMTypeRef to_float_type(struct ac_llvm_context *ctx, LLVMTypeRef t)
+{
+ if (LLVMGetTypeKind(t) == LLVMVectorTypeKind) {
+ LLVMTypeRef elem_type = LLVMGetElementType(t);
+ return LLVMVectorType(to_float_type_scalar(ctx, elem_type),
+ LLVMGetVectorSize(t));
}
- return v;
+ return to_float_type_scalar(ctx, t);
}
-static LLVMValueRef to_float(struct nir_to_llvm_context *ctx, LLVMValueRef v)
+static LLVMValueRef to_float(struct ac_llvm_context *ctx, LLVMValueRef v)
{
LLVMTypeRef type = LLVMTypeOf(v);
- if (type == ctx->i32) {
- return LLVMBuildBitCast(ctx->builder, v, ctx->f32, "");
- } else if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
- LLVMTypeRef elem_type = LLVMGetElementType(type);
- if (elem_type == ctx->i32) {
- LLVMTypeRef nt = LLVMVectorType(ctx->f32, LLVMGetVectorSize(type));
- return LLVMBuildBitCast(ctx->builder, v, nt, "");
- }
+ return LLVMBuildBitCast(ctx->builder, v, to_float_type(ctx, type), "");
+}
+
+static int get_elem_bits(struct ac_llvm_context *ctx, LLVMTypeRef type)
+{
+ if (LLVMGetTypeKind(type) == LLVMVectorTypeKind)
+ type = LLVMGetElementType(type);
+
+ if (LLVMGetTypeKind(type) == LLVMIntegerTypeKind)
+ return LLVMGetIntTypeWidth(type);
+
+ if (type == ctx->f16)
+ return 16;
+ if (type == ctx->f32)
+ return 32;
+ if (type == ctx->f64)
+ return 64;
+
+ unreachable("Unhandled type kind in get_elem_bits");
+}
+
+static LLVMValueRef unpack_param(struct nir_to_llvm_context *ctx,
+ LLVMValueRef param, unsigned rshift,
+ unsigned bitwidth)
+{
+ LLVMValueRef value = param;
+ if (rshift)
+ value = LLVMBuildLShr(ctx->builder, value,
+ LLVMConstInt(ctx->i32, rshift, false), "");
+
+ if (rshift + bitwidth < 32) {
+ unsigned mask = (1 << bitwidth) - 1;
+ value = LLVMBuildAnd(ctx->builder, value,
+ LLVMConstInt(ctx->i32, mask, false), "");
+ }
+ return value;
+}
+
+static LLVMValueRef get_rel_patch_id(struct nir_to_llvm_context *ctx)
+{
+ switch (ctx->stage) {
+ case MESA_SHADER_TESS_CTRL:
+ return unpack_param(ctx, ctx->tcs_rel_ids, 0, 8);
+ case MESA_SHADER_TESS_EVAL:
+ return ctx->tes_rel_patch_id;
+ break;
+ default:
+ unreachable("Illegal stage");
}
- return v;
}
-static LLVMValueRef build_indexed_load(struct nir_to_llvm_context *ctx,
- LLVMValueRef base_ptr, LLVMValueRef index,
- bool uniform)
+/* Tessellation shaders pass outputs to the next shader using LDS.
+ *
+ * LS outputs = TCS inputs
+ * TCS outputs = TES inputs
+ *
+ * The LDS layout is:
+ * - TCS inputs for patch 0
+ * - TCS inputs for patch 1
+ * - TCS inputs for patch 2 = get_tcs_in_current_patch_offset (if RelPatchID==2)
+ * - ...
+ * - TCS outputs for patch 0 = get_tcs_out_patch0_offset
+ * - Per-patch TCS outputs for patch 0 = get_tcs_out_patch0_patch_data_offset
+ * - TCS outputs for patch 1
+ * - Per-patch TCS outputs for patch 1
+ * - TCS outputs for patch 2 = get_tcs_out_current_patch_offset (if RelPatchID==2)
+ * - Per-patch TCS outputs for patch 2 = get_tcs_out_current_patch_data_offset (if RelPatchID==2)
+ * - ...
+ *
+ * All three shaders VS(LS), TCS, TES share the same LDS space.
+ */
+static LLVMValueRef
+get_tcs_in_patch_stride(struct nir_to_llvm_context *ctx)
{
- LLVMValueRef pointer;
- LLVMValueRef indices[] = {ctx->i32zero, index};
+ if (ctx->stage == MESA_SHADER_VERTEX)
+ return unpack_param(ctx, ctx->ls_out_layout, 0, 13);
+ else if (ctx->stage == MESA_SHADER_TESS_CTRL)
+ return unpack_param(ctx, ctx->tcs_in_layout, 0, 13);
+ else {
+ assert(0);
+ return NULL;
+ }
+}
- pointer = LLVMBuildGEP(ctx->builder, base_ptr, indices, 2, "");
- if (uniform)
- LLVMSetMetadata(pointer, ctx->uniform_md_kind, ctx->empty_md);
- return LLVMBuildLoad(ctx->builder, pointer, "");
+static LLVMValueRef
+get_tcs_out_patch_stride(struct nir_to_llvm_context *ctx)
+{
+ return unpack_param(ctx, ctx->tcs_out_layout, 0, 13);
}
-static LLVMValueRef build_indexed_load_const(struct nir_to_llvm_context *ctx,
- LLVMValueRef base_ptr, LLVMValueRef index)
+static LLVMValueRef
+get_tcs_out_patch0_offset(struct nir_to_llvm_context *ctx)
{
- LLVMValueRef result = build_indexed_load(ctx, base_ptr, index, true);
- LLVMSetMetadata(result, ctx->invariant_load_md_kind, ctx->empty_md);
- return result;
+ return LLVMBuildMul(ctx->builder,
+ unpack_param(ctx, ctx->tcs_out_offsets, 0, 16),
+ LLVMConstInt(ctx->i32, 4, false), "");
}
-static void create_function(struct nir_to_llvm_context *ctx,
- struct nir_shader *nir)
+static LLVMValueRef
+get_tcs_out_patch0_patch_data_offset(struct nir_to_llvm_context *ctx)
{
- LLVMTypeRef arg_types[23];
- unsigned arg_idx = 0;
- unsigned array_count = 0;
- unsigned sgpr_count = 0, user_sgpr_count;
- unsigned i;
+ return LLVMBuildMul(ctx->builder,
+ unpack_param(ctx, ctx->tcs_out_offsets, 16, 16),
+ LLVMConstInt(ctx->i32, 4, false), "");
+}
- /* 1 for each descriptor set */
- for (unsigned i = 0; i < 4; ++i)
- arg_types[arg_idx++] = const_array(ctx->i8, 1024 * 1024);
+static LLVMValueRef
+get_tcs_in_current_patch_offset(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef patch_stride = get_tcs_in_patch_stride(ctx);
+ LLVMValueRef rel_patch_id = get_rel_patch_id(ctx);
- /* 1 for push constants and dynamic descriptors */
- arg_types[arg_idx++] = const_array(ctx->i8, 1024 * 1024);
+ return LLVMBuildMul(ctx->builder, patch_stride, rel_patch_id, "");
+}
- array_count = arg_idx;
- switch (nir->stage) {
+static LLVMValueRef
+get_tcs_out_current_patch_offset(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef patch0_offset = get_tcs_out_patch0_offset(ctx);
+ LLVMValueRef patch_stride = get_tcs_out_patch_stride(ctx);
+ LLVMValueRef rel_patch_id = get_rel_patch_id(ctx);
+
+ return LLVMBuildAdd(ctx->builder, patch0_offset,
+ LLVMBuildMul(ctx->builder, patch_stride,
+ rel_patch_id, ""),
+ "");
+}
+
+static LLVMValueRef
+get_tcs_out_current_patch_data_offset(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef patch0_patch_data_offset =
+ get_tcs_out_patch0_patch_data_offset(ctx);
+ LLVMValueRef patch_stride = get_tcs_out_patch_stride(ctx);
+ LLVMValueRef rel_patch_id = get_rel_patch_id(ctx);
+
+ return LLVMBuildAdd(ctx->builder, patch0_patch_data_offset,
+ LLVMBuildMul(ctx->builder, patch_stride,
+ rel_patch_id, ""),
+ "");
+}
+
+static void set_userdata_location(struct ac_userdata_info *ud_info, uint8_t *sgpr_idx, uint8_t num_sgprs)
+{
+ ud_info->sgpr_idx = *sgpr_idx;
+ ud_info->num_sgprs = num_sgprs;
+ ud_info->indirect = false;
+ ud_info->indirect_offset = 0;
+ *sgpr_idx += num_sgprs;
+}
+
+static void set_userdata_location_shader(struct nir_to_llvm_context *ctx,
+ int idx, uint8_t *sgpr_idx, uint8_t num_sgprs)
+{
+ set_userdata_location(&ctx->shader_info->user_sgprs_locs.shader_data[idx], sgpr_idx, num_sgprs);
+}
+
+
+static void set_userdata_location_indirect(struct ac_userdata_info *ud_info, uint8_t sgpr_idx, uint8_t num_sgprs,
+ uint32_t indirect_offset)
+{
+ ud_info->sgpr_idx = sgpr_idx;
+ ud_info->num_sgprs = num_sgprs;
+ ud_info->indirect = true;
+ ud_info->indirect_offset = indirect_offset;
+}
+
+static void declare_tess_lds(struct nir_to_llvm_context *ctx)
+{
+ unsigned lds_size = ctx->options->chip_class >= CIK ? 65536 : 32768;
+ ctx->lds = LLVMBuildIntToPtr(ctx->builder, ctx->i32zero,
+ LLVMPointerType(LLVMArrayType(ctx->i32, lds_size / 4), LOCAL_ADDR_SPACE),
+ "tess_lds");
+}
+
+struct user_sgpr_info {
+ bool need_ring_offsets;
+ uint8_t sgpr_count;
+ bool indirect_all_descriptor_sets;
+};
+
+static void allocate_user_sgprs(struct nir_to_llvm_context *ctx,
+ struct user_sgpr_info *user_sgpr_info)
+{
+ memset(user_sgpr_info, 0, sizeof(struct user_sgpr_info));
+
+ /* until we sort out scratch/global buffers always assign ring offsets for gs/vs/es */
+ if (ctx->stage == MESA_SHADER_GEOMETRY ||
+ ctx->stage == MESA_SHADER_VERTEX ||
+ ctx->stage == MESA_SHADER_TESS_CTRL ||
+ ctx->stage == MESA_SHADER_TESS_EVAL ||
+ ctx->is_gs_copy_shader)
+ user_sgpr_info->need_ring_offsets = true;
+
+ if (ctx->stage == MESA_SHADER_FRAGMENT &&
+ ctx->shader_info->info.ps.needs_sample_positions)
+ user_sgpr_info->need_ring_offsets = true;
+
+ /* 2 user sgprs will nearly always be allocated for scratch/rings */
+ if (ctx->options->supports_spill || user_sgpr_info->need_ring_offsets) {
+ user_sgpr_info->sgpr_count += 2;
+ }
+
+ switch (ctx->stage) {
case MESA_SHADER_COMPUTE:
- arg_types[arg_idx++] = LLVMVectorType(ctx->i32, 3); /* grid size */
- user_sgpr_count = arg_idx;
- arg_types[arg_idx++] = LLVMVectorType(ctx->i32, 3);
- arg_types[arg_idx++] = ctx->i32;
- sgpr_count = arg_idx;
+ user_sgpr_info->sgpr_count += ctx->shader_info->info.cs.grid_components_used;
+ break;
+ case MESA_SHADER_FRAGMENT:
+ user_sgpr_info->sgpr_count += ctx->shader_info->info.ps.needs_sample_positions;
+ break;
+ case MESA_SHADER_VERTEX:
+ if (!ctx->is_gs_copy_shader) {
+ user_sgpr_info->sgpr_count += ctx->shader_info->info.vs.has_vertex_buffers ? 2 : 0;
+ if (ctx->shader_info->info.vs.needs_draw_id) {
+ user_sgpr_info->sgpr_count += 3;
+ } else {
+ user_sgpr_info->sgpr_count += 2;
+ }
+ }
+ if (ctx->options->key.vs.as_ls)
+ user_sgpr_info->sgpr_count++;
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ user_sgpr_info->sgpr_count += 4;
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ user_sgpr_info->sgpr_count += 1;
+ break;
+ case MESA_SHADER_GEOMETRY:
+ user_sgpr_info->sgpr_count += 2;
+ break;
+ default:
+ break;
+ }
+
+ if (ctx->shader_info->info.needs_push_constants)
+ user_sgpr_info->sgpr_count += 2;
+
+ uint32_t remaining_sgprs = 16 - user_sgpr_info->sgpr_count;
+ if (remaining_sgprs / 2 < util_bitcount(ctx->shader_info->info.desc_set_used_mask)) {
+ user_sgpr_info->sgpr_count += 2;
+ user_sgpr_info->indirect_all_descriptor_sets = true;
+ } else {
+ user_sgpr_info->sgpr_count += util_bitcount(ctx->shader_info->info.desc_set_used_mask) * 2;
+ }
+}
+
+static void create_function(struct nir_to_llvm_context *ctx)
+{
+ unsigned num_sets = ctx->options->layout ? ctx->options->layout->num_sets : 0;
+ uint8_t user_sgpr_idx;
+ struct user_sgpr_info user_sgpr_info;
+ struct arg_info args = {};
+ LLVMValueRef desc_sets;
+
+ allocate_user_sgprs(ctx, &user_sgpr_info);
+ if (user_sgpr_info.need_ring_offsets && !ctx->options->supports_spill) {
+ add_user_sgpr_argument(&args, const_array(ctx->v4i32, 16), &ctx->ring_offsets); /* address of rings */
+ }
- arg_types[arg_idx++] = LLVMVectorType(ctx->i32, 3);
+ /* 1 for each descriptor set */
+ if (!user_sgpr_info.indirect_all_descriptor_sets) {
+ for (unsigned i = 0; i < num_sets; ++i) {
+ if (ctx->options->layout->set[i].layout->shader_stages & (1 << ctx->stage)) {
+ add_user_sgpr_array_argument(&args, const_array(ctx->i8, 1024 * 1024), &ctx->descriptor_sets[i]);
+ }
+ }
+ } else
+ add_user_sgpr_array_argument(&args, const_array(const_array(ctx->i8, 1024 * 1024), 32), &desc_sets);
+
+ if (ctx->shader_info->info.needs_push_constants) {
+ /* 1 for push constants and dynamic descriptors */
+ add_user_sgpr_array_argument(&args, const_array(ctx->i8, 1024 * 1024), &ctx->push_constants);
+ }
+
+ switch (ctx->stage) {
+ case MESA_SHADER_COMPUTE:
+ if (ctx->shader_info->info.cs.grid_components_used)
+ add_user_sgpr_argument(&args, LLVMVectorType(ctx->i32, ctx->shader_info->info.cs.grid_components_used), &ctx->num_work_groups); /* grid size */
+ add_sgpr_argument(&args, LLVMVectorType(ctx->i32, 3), &ctx->workgroup_ids);
+ add_sgpr_argument(&args, ctx->i32, &ctx->tg_size);
+ add_vgpr_argument(&args, LLVMVectorType(ctx->i32, 3), &ctx->local_invocation_ids);
break;
case MESA_SHADER_VERTEX:
- arg_types[arg_idx++] = const_array(ctx->v16i8, 16); /* vertex buffers */
- arg_types[arg_idx++] = ctx->i32; // base vertex
- arg_types[arg_idx++] = ctx->i32; // start instance
- user_sgpr_count = sgpr_count = arg_idx;
- arg_types[arg_idx++] = ctx->i32; // vertex id
- arg_types[arg_idx++] = ctx->i32; // rel auto id
- arg_types[arg_idx++] = ctx->i32; // vs prim id
- arg_types[arg_idx++] = ctx->i32; // instance id
+ if (!ctx->is_gs_copy_shader) {
+ if (ctx->shader_info->info.vs.has_vertex_buffers)
+ add_user_sgpr_argument(&args, const_array(ctx->v4i32, 16), &ctx->vertex_buffers); /* vertex buffers */
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->base_vertex); // base vertex
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->start_instance);// start instance
+ if (ctx->shader_info->info.vs.needs_draw_id)
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->draw_index); // draw id
+ }
+ if (ctx->options->key.vs.as_es)
+ add_sgpr_argument(&args, ctx->i32, &ctx->es2gs_offset); // es2gs offset
+ else if (ctx->options->key.vs.as_ls)
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->ls_out_layout); // ls out layout
+ add_vgpr_argument(&args, ctx->i32, &ctx->vertex_id); // vertex id
+ if (!ctx->is_gs_copy_shader) {
+ add_vgpr_argument(&args, ctx->i32, &ctx->rel_auto_id); // rel auto id
+ add_vgpr_argument(&args, ctx->i32, &ctx->vs_prim_id); // vs prim id
+ add_vgpr_argument(&args, ctx->i32, &ctx->instance_id); // instance id
+ }
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->tcs_offchip_layout); // tcs offchip layout
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->tcs_out_offsets); // tcs out offsets
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->tcs_out_layout); // tcs out layout
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->tcs_in_layout); // tcs in layout
+ add_sgpr_argument(&args, ctx->i32, &ctx->oc_lds); // param oc lds
+ add_sgpr_argument(&args, ctx->i32, &ctx->tess_factor_offset); // tess factor offset
+ add_vgpr_argument(&args, ctx->i32, &ctx->tcs_patch_id); // patch id
+ add_vgpr_argument(&args, ctx->i32, &ctx->tcs_rel_ids); // rel ids;
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->tcs_offchip_layout); // tcs offchip layout
+ if (ctx->options->key.tes.as_es) {
+ add_sgpr_argument(&args, ctx->i32, &ctx->oc_lds); // OC LDS
+ add_sgpr_argument(&args, ctx->i32, NULL); //
+ add_sgpr_argument(&args, ctx->i32, &ctx->es2gs_offset); // es2gs offset
+ } else {
+ add_sgpr_argument(&args, ctx->i32, NULL); //
+ add_sgpr_argument(&args, ctx->i32, &ctx->oc_lds); // OC LDS
+ }
+ add_vgpr_argument(&args, ctx->f32, &ctx->tes_u); // tes_u
+ add_vgpr_argument(&args, ctx->f32, &ctx->tes_v); // tes_v
+ add_vgpr_argument(&args, ctx->i32, &ctx->tes_rel_patch_id); // tes rel patch id
+ add_vgpr_argument(&args, ctx->i32, &ctx->tes_patch_id); // tes patch id
+ break;
+ case MESA_SHADER_GEOMETRY:
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->gsvs_ring_stride); // gsvs stride
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->gsvs_num_entries); // gsvs num entires
+ add_sgpr_argument(&args, ctx->i32, &ctx->gs2vs_offset); // gs2vs offset
+ add_sgpr_argument(&args, ctx->i32, &ctx->gs_wave_id); // wave id
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[0]); // vtx0
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[1]); // vtx1
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_prim_id); // prim id
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[2]);
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[3]);
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[4]);
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_vtx_offset[5]);
+ add_vgpr_argument(&args, ctx->i32, &ctx->gs_invocation_id);
break;
case MESA_SHADER_FRAGMENT:
- arg_types[arg_idx++] = const_array(ctx->f32, 32); /* sample positions */
- user_sgpr_count = arg_idx;
- arg_types[arg_idx++] = ctx->i32; /* prim mask */
- sgpr_count = arg_idx;
- arg_types[arg_idx++] = ctx->v2i32; /* persp sample */
- arg_types[arg_idx++] = ctx->v2i32; /* persp center */
- arg_types[arg_idx++] = ctx->v2i32; /* persp centroid */
- arg_types[arg_idx++] = ctx->v3i32; /* persp pull model */
- arg_types[arg_idx++] = ctx->v2i32; /* linear sample */
- arg_types[arg_idx++] = ctx->v2i32; /* linear center */
- arg_types[arg_idx++] = ctx->v2i32; /* linear centroid */
- arg_types[arg_idx++] = ctx->f32; /* line stipple tex */
- arg_types[arg_idx++] = ctx->f32; /* pos x float */
- arg_types[arg_idx++] = ctx->f32; /* pos y float */
- arg_types[arg_idx++] = ctx->f32; /* pos z float */
- arg_types[arg_idx++] = ctx->f32; /* pos w float */
- arg_types[arg_idx++] = ctx->i32; /* front face */
- arg_types[arg_idx++] = ctx->i32; /* ancillary */
- arg_types[arg_idx++] = ctx->f32; /* sample coverage */
- arg_types[arg_idx++] = ctx->i32; /* fixed pt */
+ if (ctx->shader_info->info.ps.needs_sample_positions)
+ add_user_sgpr_argument(&args, ctx->i32, &ctx->sample_pos_offset); /* sample position offset */
+ add_sgpr_argument(&args, ctx->i32, &ctx->prim_mask); /* prim mask */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_sample); /* persp sample */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_center); /* persp center */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->persp_centroid); /* persp centroid */
+ add_vgpr_argument(&args, ctx->v3i32, NULL); /* persp pull model */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_sample); /* linear sample */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_center); /* linear center */
+ add_vgpr_argument(&args, ctx->v2i32, &ctx->linear_centroid); /* linear centroid */
+ add_vgpr_argument(&args, ctx->f32, NULL); /* line stipple tex */
+ add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[0]); /* pos x float */
+ add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[1]); /* pos y float */
+ add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[2]); /* pos z float */
+ add_vgpr_argument(&args, ctx->f32, &ctx->frag_pos[3]); /* pos w float */
+ add_vgpr_argument(&args, ctx->i32, &ctx->front_face); /* front face */
+ add_vgpr_argument(&args, ctx->i32, &ctx->ancillary); /* ancillary */
+ add_vgpr_argument(&args, ctx->i32, &ctx->sample_coverage); /* sample coverage */
+ add_vgpr_argument(&args, ctx->i32, NULL); /* fixed pt */
break;
default:
unreachable("Shader stage not implemented");
}
ctx->main_function = create_llvm_function(
- ctx->context, ctx->module, ctx->builder, NULL, 0, arg_types,
- arg_idx, array_count, sgpr_count, ctx->options->unsafe_math);
- set_llvm_calling_convention(ctx->main_function, nir->stage);
+ ctx->context, ctx->module, ctx->builder, NULL, 0, &args,
+ ctx->max_workgroup_size,
+ ctx->options->unsafe_math);
+ set_llvm_calling_convention(ctx->main_function, ctx->stage);
- ctx->shader_info->num_input_sgprs = 0;
ctx->shader_info->num_input_vgprs = 0;
+ ctx->shader_info->num_input_sgprs = ctx->shader_info->num_user_sgprs =
+ ctx->options->supports_spill ? 2 : 0;
- for (i = 0; i < user_sgpr_count; i++)
- ctx->shader_info->num_user_sgprs += llvm_get_type_size(arg_types[i]) / 4;
+ ctx->shader_info->num_user_sgprs += args.num_user_sgprs_used;
+ ctx->shader_info->num_input_sgprs += args.num_sgprs_used;
- ctx->shader_info->num_input_sgprs = ctx->shader_info->num_user_sgprs;
- for (; i < sgpr_count; i++)
- ctx->shader_info->num_input_sgprs += llvm_get_type_size(arg_types[i]) / 4;
+ if (ctx->stage != MESA_SHADER_FRAGMENT)
+ ctx->shader_info->num_input_vgprs = args.num_vgprs_used;
- if (nir->stage != MESA_SHADER_FRAGMENT)
- for (; i < arg_idx; ++i)
- ctx->shader_info->num_input_vgprs += llvm_get_type_size(arg_types[i]) / 4;
+ assign_arguments(ctx->main_function, &args);
- arg_idx = 0;
- for (unsigned i = 0; i < 4; ++i)
- ctx->descriptor_sets[i] =
- LLVMGetParam(ctx->main_function, arg_idx++);
+ user_sgpr_idx = 0;
- ctx->push_constants = LLVMGetParam(ctx->main_function, arg_idx++);
+ if (ctx->options->supports_spill || user_sgpr_info.need_ring_offsets) {
+ set_userdata_location_shader(ctx, AC_UD_SCRATCH_RING_OFFSETS, &user_sgpr_idx, 2);
+ if (ctx->options->supports_spill) {
+ ctx->ring_offsets = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.implicit.buffer.ptr",
+ LLVMPointerType(ctx->i8, CONST_ADDR_SPACE),
+ NULL, 0, AC_FUNC_ATTR_READNONE);
+ ctx->ring_offsets = LLVMBuildBitCast(ctx->builder, ctx->ring_offsets,
+ const_array(ctx->v4i32, 16), "");
+ }
+ }
- switch (nir->stage) {
+ if (!user_sgpr_info.indirect_all_descriptor_sets) {
+ for (unsigned i = 0; i < num_sets; ++i) {
+ if (ctx->options->layout->set[i].layout->shader_stages & (1 << ctx->stage)) {
+ set_userdata_location(&ctx->shader_info->user_sgprs_locs.descriptor_sets[i], &user_sgpr_idx, 2);
+ } else
+ ctx->descriptor_sets[i] = NULL;
+ }
+ } else {
+ uint32_t desc_sgpr_idx = user_sgpr_idx;
+ set_userdata_location_shader(ctx, AC_UD_INDIRECT_DESCRIPTOR_SETS, &user_sgpr_idx, 2);
+
+ for (unsigned i = 0; i < num_sets; ++i) {
+ if (ctx->options->layout->set[i].layout->shader_stages & (1 << ctx->stage)) {
+ set_userdata_location_indirect(&ctx->shader_info->user_sgprs_locs.descriptor_sets[i], desc_sgpr_idx, 2, i * 8);
+ ctx->descriptor_sets[i] = ac_build_indexed_load_const(&ctx->ac, desc_sets, LLVMConstInt(ctx->i32, i, false));
+
+ } else
+ ctx->descriptor_sets[i] = NULL;
+ }
+ ctx->shader_info->need_indirect_descriptor_sets = true;
+ }
+
+ if (ctx->shader_info->info.needs_push_constants) {
+ set_userdata_location_shader(ctx, AC_UD_PUSH_CONSTANTS, &user_sgpr_idx, 2);
+ }
+
+ switch (ctx->stage) {
case MESA_SHADER_COMPUTE:
- ctx->num_work_groups =
- LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->workgroup_ids =
- LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->tg_size =
- LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->local_invocation_ids =
- LLVMGetParam(ctx->main_function, arg_idx++);
+ if (ctx->shader_info->info.cs.grid_components_used) {
+ set_userdata_location_shader(ctx, AC_UD_CS_GRID_SIZE, &user_sgpr_idx, ctx->shader_info->info.cs.grid_components_used);
+ }
break;
case MESA_SHADER_VERTEX:
- ctx->vertex_buffers = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->base_vertex = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->start_instance = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->vertex_id = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->rel_auto_id = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->vs_prim_id = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->instance_id = LLVMGetParam(ctx->main_function, arg_idx++);
+ if (!ctx->is_gs_copy_shader) {
+ if (ctx->shader_info->info.vs.has_vertex_buffers) {
+ set_userdata_location_shader(ctx, AC_UD_VS_VERTEX_BUFFERS, &user_sgpr_idx, 2);
+ }
+ unsigned vs_num = 2;
+ if (ctx->shader_info->info.vs.needs_draw_id)
+ vs_num++;
+
+ set_userdata_location_shader(ctx, AC_UD_VS_BASE_VERTEX_START_INSTANCE, &user_sgpr_idx, vs_num);
+ }
+ if (ctx->options->key.vs.as_ls) {
+ set_userdata_location_shader(ctx, AC_UD_VS_LS_TCS_IN_LAYOUT, &user_sgpr_idx, 1);
+ }
+ if (ctx->options->key.vs.as_ls)
+ declare_tess_lds(ctx);
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ set_userdata_location_shader(ctx, AC_UD_TCS_OFFCHIP_LAYOUT, &user_sgpr_idx, 4);
+ declare_tess_lds(ctx);
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ set_userdata_location_shader(ctx, AC_UD_TES_OFFCHIP_LAYOUT, &user_sgpr_idx, 1);
+ break;
+ case MESA_SHADER_GEOMETRY:
+ set_userdata_location_shader(ctx, AC_UD_GS_VS_RING_STRIDE_ENTRIES, &user_sgpr_idx, 2);
break;
case MESA_SHADER_FRAGMENT:
- ctx->sample_positions = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->prim_mask = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->persp_sample = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->persp_center = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->persp_centroid = LLVMGetParam(ctx->main_function, arg_idx++);
- arg_idx++;
- ctx->linear_sample = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->linear_center = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->linear_centroid = LLVMGetParam(ctx->main_function, arg_idx++);
- arg_idx++; /* line stipple */
- ctx->frag_pos[0] = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->frag_pos[1] = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->frag_pos[2] = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->frag_pos[3] = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->front_face = LLVMGetParam(ctx->main_function, arg_idx++);
- ctx->ancillary = LLVMGetParam(ctx->main_function, arg_idx++);
+ if (ctx->shader_info->info.ps.needs_sample_positions) {
+ set_userdata_location_shader(ctx, AC_UD_PS_SAMPLE_POS_OFFSET, &user_sgpr_idx, 1);
+ }
break;
default:
unreachable("Shader stage not implemented");
@@ -475,10 +924,12 @@ static void setup_types(struct nir_to_llvm_context *ctx)
ctx->v8i32 = LLVMVectorType(ctx->i32, 8);
ctx->f32 = LLVMFloatTypeInContext(ctx->context);
ctx->f16 = LLVMHalfTypeInContext(ctx->context);
+ ctx->f64 = LLVMDoubleTypeInContext(ctx->context);
ctx->v2f32 = LLVMVectorType(ctx->f32, 2);
ctx->v4f32 = LLVMVectorType(ctx->f32, 4);
- ctx->v16i8 = LLVMVectorType(ctx->i8, 16);
+ ctx->i1false = LLVMConstInt(ctx->i1, 0, false);
+ ctx->i1true = LLVMConstInt(ctx->i1, 1, false);
ctx->i32zero = LLVMConstInt(ctx->i32, 0, false);
ctx->i32one = LLVMConstInt(ctx->i32, 1, false);
ctx->f32zero = LLVMConstReal(ctx->f32, 0.0);
@@ -490,18 +941,11 @@ static void setup_types(struct nir_to_llvm_context *ctx)
args[3] = ctx->f32one;
ctx->v4f32empty = LLVMConstVector(args, 4);
- ctx->range_md_kind = LLVMGetMDKindIDInContext(ctx->context,
- "range", 5);
- ctx->invariant_load_md_kind = LLVMGetMDKindIDInContext(ctx->context,
- "invariant.load", 14);
ctx->uniform_md_kind =
LLVMGetMDKindIDInContext(ctx->context, "amdgpu.uniform", 14);
ctx->empty_md = LLVMMDNodeInContext(ctx->context, NULL, 0);
- ctx->fpmath_md_kind = LLVMGetMDKindIDInContext(ctx->context, "fpmath", 6);
-
args[0] = LLVMConstReal(ctx->f32, 2.5);
- ctx->fpmath_md_2p5_ulp = LLVMMDNodeInContext(ctx->context, args, 1);
}
static int get_llvm_num_components(LLVMValueRef value)
@@ -546,38 +990,6 @@ static LLVMValueRef trim_vector(struct nir_to_llvm_context *ctx,
return LLVMBuildShuffleVector(ctx->builder, value, value, swizzle, "");
}
-static LLVMValueRef
-build_gather_values_extended(struct nir_to_llvm_context *ctx,
- LLVMValueRef *values,
- unsigned value_count,
- unsigned value_stride,
- bool load)
-{
- LLVMBuilderRef builder = ctx->builder;
- LLVMValueRef vec;
- unsigned i;
-
-
- if (value_count == 1) {
- if (load)
- return LLVMBuildLoad(builder, values[0], "");
- return values[0];
- }
-
- for (i = 0; i < value_count; i++) {
- LLVMValueRef value = values[i * value_stride];
- if (load)
- value = LLVMBuildLoad(builder, value, "");
-
- if (!i)
- vec = LLVMGetUndef( LLVMVectorType(LLVMTypeOf(value), value_count));
- LLVMValueRef index = LLVMConstInt(ctx->i32, i, false);
- vec = LLVMBuildInsertElement(builder, vec, value, index, "");
- }
- return vec;
-}
-
-
static void
build_store_values_extended(struct nir_to_llvm_context *ctx,
LLVMValueRef *values,
@@ -601,16 +1013,8 @@ build_store_values_extended(struct nir_to_llvm_context *ctx,
}
}
-static LLVMValueRef
-build_gather_values(struct nir_to_llvm_context *ctx,
- LLVMValueRef *values,
- unsigned value_count)
-{
- return build_gather_values_extended(ctx, values, value_count, 1, false);
-}
-
static LLVMTypeRef get_def_type(struct nir_to_llvm_context *ctx,
- nir_ssa_def *def)
+ const nir_ssa_def *def)
{
LLVMTypeRef type = LLVMIntTypeInContext(ctx->context, def->bit_size);
if (def->num_components > 1) {
@@ -628,7 +1032,7 @@ static LLVMValueRef get_src(struct nir_to_llvm_context *ctx, nir_src src)
static LLVMBasicBlockRef get_block(struct nir_to_llvm_context *ctx,
- struct nir_block *b)
+ const struct nir_block *b)
{
struct hash_entry *entry = _mesa_hash_table_search(ctx->defs, b);
return (LLVMBasicBlockRef)entry->data;
@@ -665,7 +1069,7 @@ static LLVMValueRef get_alu_src(struct nir_to_llvm_context *ctx,
masks[0], "");
} else if (src_components == 1 && num_components > 1) {
LLVMValueRef values[] = {value, value, value, value};
- value = build_gather_values(ctx, values, num_components);
+ value = ac_build_gather_values(&ctx->ac, values, num_components);
} else {
LLVMValueRef swizzle = LLVMConstVector(masks, num_components);
value = LLVMBuildShuffleVector(ctx->builder, value, value,
@@ -677,7 +1081,7 @@ static LLVMValueRef get_alu_src(struct nir_to_llvm_context *ctx,
return value;
}
-static LLVMValueRef emit_int_cmp(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_int_cmp(struct ac_llvm_context *ctx,
LLVMIntPredicate pred, LLVMValueRef src0,
LLVMValueRef src1)
{
@@ -687,7 +1091,7 @@ static LLVMValueRef emit_int_cmp(struct nir_to_llvm_context *ctx,
LLVMConstInt(ctx->i32, 0, false), "");
}
-static LLVMValueRef emit_float_cmp(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_float_cmp(struct ac_llvm_context *ctx,
LLVMRealPredicate pred, LLVMValueRef src0,
LLVMValueRef src1)
{
@@ -700,48 +1104,66 @@ static LLVMValueRef emit_float_cmp(struct nir_to_llvm_context *ctx,
LLVMConstInt(ctx->i32, 0, false), "");
}
-static LLVMValueRef emit_intrin_1f_param(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_intrin_1f_param(struct ac_llvm_context *ctx,
const char *intrin,
+ LLVMTypeRef result_type,
LLVMValueRef src0)
{
+ char name[64];
LLVMValueRef params[] = {
to_float(ctx, src0),
};
- return emit_llvm_intrinsic(ctx, intrin, ctx->f32, params, 1, LLVMReadNoneAttribute);
+
+ MAYBE_UNUSED const int length = snprintf(name, sizeof(name), "%s.f%d", intrin,
+ get_elem_bits(ctx, result_type));
+ assert(length < sizeof(name));
+ return ac_build_intrinsic(ctx, name, result_type, params, 1, AC_FUNC_ATTR_READNONE);
}
-static LLVMValueRef emit_intrin_2f_param(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_intrin_2f_param(struct ac_llvm_context *ctx,
const char *intrin,
+ LLVMTypeRef result_type,
LLVMValueRef src0, LLVMValueRef src1)
{
+ char name[64];
LLVMValueRef params[] = {
to_float(ctx, src0),
to_float(ctx, src1),
};
- return emit_llvm_intrinsic(ctx, intrin, ctx->f32, params, 2, LLVMReadNoneAttribute);
+
+ MAYBE_UNUSED const int length = snprintf(name, sizeof(name), "%s.f%d", intrin,
+ get_elem_bits(ctx, result_type));
+ assert(length < sizeof(name));
+ return ac_build_intrinsic(ctx, name, result_type, params, 2, AC_FUNC_ATTR_READNONE);
}
-static LLVMValueRef emit_intrin_3f_param(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_intrin_3f_param(struct ac_llvm_context *ctx,
const char *intrin,
+ LLVMTypeRef result_type,
LLVMValueRef src0, LLVMValueRef src1, LLVMValueRef src2)
{
+ char name[64];
LLVMValueRef params[] = {
to_float(ctx, src0),
to_float(ctx, src1),
to_float(ctx, src2),
};
- return emit_llvm_intrinsic(ctx, intrin, ctx->f32, params, 3, LLVMReadNoneAttribute);
+
+ MAYBE_UNUSED const int length = snprintf(name, sizeof(name), "%s.f%d", intrin,
+ get_elem_bits(ctx, result_type));
+ assert(length < sizeof(name));
+ return ac_build_intrinsic(ctx, name, result_type, params, 3, AC_FUNC_ATTR_READNONE);
}
-static LLVMValueRef emit_bcsel(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_bcsel(struct ac_llvm_context *ctx,
LLVMValueRef src0, LLVMValueRef src1, LLVMValueRef src2)
{
LLVMValueRef v = LLVMBuildICmp(ctx->builder, LLVMIntNE, src0,
- ctx->i32zero, "");
+ ctx->i32_0, "");
return LLVMBuildSelect(ctx->builder, v, src1, src2, "");
}
-static LLVMValueRef emit_find_lsb(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_find_lsb(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
LLVMValueRef params[2] = {
@@ -754,56 +1176,34 @@ static LLVMValueRef emit_find_lsb(struct nir_to_llvm_context *ctx,
*
* The hardware already implements the correct behavior.
*/
- LLVMConstInt(ctx->i32, 1, false),
+ LLVMConstInt(ctx->i1, 1, false),
};
- return emit_llvm_intrinsic(ctx, "llvm.cttz.i32", ctx->i32, params, 2, LLVMReadNoneAttribute);
+
+ LLVMValueRef lsb = ac_build_intrinsic(ctx, "llvm.cttz.i32", ctx->i32,
+ params, 2,
+ AC_FUNC_ATTR_READNONE);
+
+ /* TODO: We need an intrinsic to skip this conditional. */
+ /* Check for zero: */
+ return LLVMBuildSelect(ctx->builder, LLVMBuildICmp(ctx->builder,
+ LLVMIntEQ, src0,
+ ctx->i32_0, ""),
+ LLVMConstInt(ctx->i32, -1, 0), lsb, "");
}
-static LLVMValueRef emit_ifind_msb(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_ifind_msb(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
- LLVMValueRef msb = emit_llvm_intrinsic(ctx, "llvm.AMDGPU.flbit.i32",
- ctx->i32, &src0, 1,
- LLVMReadNoneAttribute);
-
- /* The HW returns the last bit index from MSB, but NIR wants
- * the index from LSB. Invert it by doing "31 - msb". */
- msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
- msb, "");
-
- LLVMValueRef all_ones = LLVMConstInt(ctx->i32, -1, true);
- LLVMValueRef cond = LLVMBuildOr(ctx->builder,
- LLVMBuildICmp(ctx->builder, LLVMIntEQ,
- src0, ctx->i32zero, ""),
- LLVMBuildICmp(ctx->builder, LLVMIntEQ,
- src0, all_ones, ""), "");
-
- return LLVMBuildSelect(ctx->builder, cond, all_ones, msb, "");
+ return ac_build_imsb(ctx, src0, ctx->i32);
}
-static LLVMValueRef emit_ufind_msb(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_ufind_msb(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
- LLVMValueRef args[2] = {
- src0,
- ctx->i32one,
- };
- LLVMValueRef msb = emit_llvm_intrinsic(ctx, "llvm.ctlz.i32",
- ctx->i32, args, ARRAY_SIZE(args),
- LLVMReadNoneAttribute);
-
- /* The HW returns the last bit index from MSB, but NIR wants
- * the index from LSB. Invert it by doing "31 - msb". */
- msb = LLVMBuildSub(ctx->builder, LLVMConstInt(ctx->i32, 31, false),
- msb, "");
-
- return LLVMBuildSelect(ctx->builder,
- LLVMBuildICmp(ctx->builder, LLVMIntEQ, src0,
- ctx->i32zero, ""),
- LLVMConstInt(ctx->i32, -1, true), msb, "");
+ return ac_build_umsb(ctx, src0, ctx->i32);
}
-static LLVMValueRef emit_minmax_int(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_minmax_int(struct ac_llvm_context *ctx,
LLVMIntPredicate pred,
LLVMValueRef src0, LLVMValueRef src1)
{
@@ -813,38 +1213,38 @@ static LLVMValueRef emit_minmax_int(struct nir_to_llvm_context *ctx,
src1, "");
}
-static LLVMValueRef emit_iabs(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_iabs(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
return emit_minmax_int(ctx, LLVMIntSGT, src0,
LLVMBuildNeg(ctx->builder, src0, ""));
}
-static LLVMValueRef emit_fsign(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_fsign(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
LLVMValueRef cmp, val;
- cmp = LLVMBuildFCmp(ctx->builder, LLVMRealOGT, src0, ctx->f32zero, "");
- val = LLVMBuildSelect(ctx->builder, cmp, ctx->f32one, src0, "");
- cmp = LLVMBuildFCmp(ctx->builder, LLVMRealOGE, val, ctx->f32zero, "");
+ cmp = LLVMBuildFCmp(ctx->builder, LLVMRealOGT, src0, ctx->f32_0, "");
+ val = LLVMBuildSelect(ctx->builder, cmp, ctx->f32_1, src0, "");
+ cmp = LLVMBuildFCmp(ctx->builder, LLVMRealOGE, val, ctx->f32_0, "");
val = LLVMBuildSelect(ctx->builder, cmp, val, LLVMConstReal(ctx->f32, -1.0), "");
return val;
}
-static LLVMValueRef emit_isign(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_isign(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
LLVMValueRef cmp, val;
- cmp = LLVMBuildICmp(ctx->builder, LLVMIntSGT, src0, ctx->i32zero, "");
- val = LLVMBuildSelect(ctx->builder, cmp, ctx->i32one, src0, "");
- cmp = LLVMBuildICmp(ctx->builder, LLVMIntSGE, val, ctx->i32zero, "");
+ cmp = LLVMBuildICmp(ctx->builder, LLVMIntSGT, src0, ctx->i32_0, "");
+ val = LLVMBuildSelect(ctx->builder, cmp, ctx->i32_1, src0, "");
+ cmp = LLVMBuildICmp(ctx->builder, LLVMIntSGE, val, ctx->i32_0, "");
val = LLVMBuildSelect(ctx->builder, cmp, val, LLVMConstInt(ctx->i32, -1, true), "");
return val;
}
-static LLVMValueRef emit_ffract(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_ffract(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
const char *intr = "llvm.floor.f32";
@@ -852,13 +1252,13 @@ static LLVMValueRef emit_ffract(struct nir_to_llvm_context *ctx,
LLVMValueRef params[] = {
fsrc0,
};
- LLVMValueRef floor = emit_llvm_intrinsic(ctx, intr,
- ctx->f32, params, 1,
- LLVMReadNoneAttribute);
+ LLVMValueRef floor = ac_build_intrinsic(ctx, intr,
+ ctx->f32, params, 1,
+ AC_FUNC_ATTR_READNONE);
return LLVMBuildFSub(ctx->builder, fsrc0, floor, "");
}
-static LLVMValueRef emit_uint_carry(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_uint_carry(struct ac_llvm_context *ctx,
const char *intrin,
LLVMValueRef src0, LLVMValueRef src1)
{
@@ -869,21 +1269,85 @@ static LLVMValueRef emit_uint_carry(struct nir_to_llvm_context *ctx,
ret_type = LLVMStructTypeInContext(ctx->context, types,
2, true);
- res = emit_llvm_intrinsic(ctx, intrin, ret_type,
- params, 2, LLVMReadNoneAttribute);
+ res = ac_build_intrinsic(ctx, intrin, ret_type,
+ params, 2, AC_FUNC_ATTR_READNONE);
res = LLVMBuildExtractValue(ctx->builder, res, 1, "");
res = LLVMBuildZExt(ctx->builder, res, ctx->i32, "");
return res;
}
-static LLVMValueRef emit_b2f(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_b2f(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
return LLVMBuildAnd(ctx->builder, src0, LLVMBuildBitCast(ctx->builder, LLVMConstReal(ctx->f32, 1.0), ctx->i32, ""), "");
}
-static LLVMValueRef emit_umul_high(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_f2b(struct ac_llvm_context *ctx,
+ LLVMValueRef src0)
+{
+ src0 = to_float(ctx, src0);
+ return LLVMBuildSExt(ctx->builder,
+ LLVMBuildFCmp(ctx->builder, LLVMRealUNE, src0, ctx->f32_0, ""),
+ ctx->i32, "");
+}
+
+static LLVMValueRef emit_b2i(struct ac_llvm_context *ctx,
+ LLVMValueRef src0)
+{
+ return LLVMBuildAnd(ctx->builder, src0, ctx->i32_1, "");
+}
+
+static LLVMValueRef emit_i2b(struct ac_llvm_context *ctx,
+ LLVMValueRef src0)
+{
+ return LLVMBuildSExt(ctx->builder,
+ LLVMBuildICmp(ctx->builder, LLVMIntNE, src0, ctx->i32_0, ""),
+ ctx->i32, "");
+}
+
+static LLVMValueRef emit_f2f16(struct nir_to_llvm_context *ctx,
+ LLVMValueRef src0)
+{
+ LLVMValueRef result;
+ LLVMValueRef cond;
+
+ src0 = to_float(&ctx->ac, src0);
+ result = LLVMBuildFPTrunc(ctx->builder, src0, ctx->f16, "");
+
+ if (ctx->options->chip_class >= VI) {
+ LLVMValueRef args[2];
+ /* Check if the result is a denormal - and flush to 0 if so. */
+ args[0] = result;
+ args[1] = LLVMConstInt(ctx->i32, N_SUBNORMAL | P_SUBNORMAL, false);
+ cond = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.class.f16", ctx->i1, args, 2, AC_FUNC_ATTR_READNONE);
+ }
+
+ /* need to convert back up to f32 */
+ result = LLVMBuildFPExt(ctx->builder, result, ctx->f32, "");
+
+ if (ctx->options->chip_class >= VI)
+ result = LLVMBuildSelect(ctx->builder, cond, ctx->f32zero, result, "");
+ else {
+ /* for SI/CIK */
+ /* 0x38800000 is smallest half float value (2^-14) in 32-bit float,
+ * so compare the result and flush to 0 if it's smaller.
+ */
+ LLVMValueRef temp, cond2;
+ temp = emit_intrin_1f_param(&ctx->ac, "llvm.fabs",
+ ctx->f32, result);
+ cond = LLVMBuildFCmp(ctx->builder, LLVMRealUGT,
+ LLVMBuildBitCast(ctx->builder, LLVMConstInt(ctx->i32, 0x38800000, false), ctx->f32, ""),
+ temp, "");
+ cond2 = LLVMBuildFCmp(ctx->builder, LLVMRealUNE,
+ temp, ctx->f32zero, "");
+ cond = LLVMBuildAnd(ctx->builder, cond, cond2, "");
+ result = LLVMBuildSelect(ctx->builder, cond, ctx->f32zero, result, "");
+ }
+ return result;
+}
+
+static LLVMValueRef emit_umul_high(struct ac_llvm_context *ctx,
LLVMValueRef src0, LLVMValueRef src1)
{
LLVMValueRef dst64, result;
@@ -896,7 +1360,7 @@ static LLVMValueRef emit_umul_high(struct nir_to_llvm_context *ctx,
return result;
}
-static LLVMValueRef emit_imul_high(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_imul_high(struct ac_llvm_context *ctx,
LLVMValueRef src0, LLVMValueRef src1)
{
LLVMValueRef dst64, result;
@@ -909,19 +1373,19 @@ static LLVMValueRef emit_imul_high(struct nir_to_llvm_context *ctx,
return result;
}
-static LLVMValueRef emit_bitfield_extract(struct nir_to_llvm_context *ctx,
- const char *intrin,
- LLVMValueRef srcs[3])
+static LLVMValueRef emit_bitfield_extract(struct ac_llvm_context *ctx,
+ bool is_signed,
+ const LLVMValueRef srcs[3])
{
LLVMValueRef result;
LLVMValueRef icond = LLVMBuildICmp(ctx->builder, LLVMIntEQ, srcs[2], LLVMConstInt(ctx->i32, 32, false), "");
- result = emit_llvm_intrinsic(ctx, intrin, ctx->i32, srcs, 3, LLVMReadNoneAttribute);
+ result = ac_build_bfe(ctx, srcs[0], srcs[1], srcs[2], is_signed);
result = LLVMBuildSelect(ctx->builder, icond, srcs[0], result, "");
return result;
}
-static LLVMValueRef emit_bitfield_insert(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_bitfield_insert(struct ac_llvm_context *ctx,
LLVMValueRef src0, LLVMValueRef src1,
LLVMValueRef src2, LLVMValueRef src3)
{
@@ -930,9 +1394,9 @@ static LLVMValueRef emit_bitfield_insert(struct nir_to_llvm_context *ctx,
bfi_args[0] = LLVMBuildShl(ctx->builder,
LLVMBuildSub(ctx->builder,
LLVMBuildShl(ctx->builder,
- ctx->i32one,
+ ctx->i32_1,
src3, ""),
- ctx->i32one, ""),
+ ctx->i32_1, ""),
src2, "");
bfi_args[1] = LLVMBuildShl(ctx->builder, src1, src2, "");
bfi_args[2] = src0;
@@ -951,7 +1415,7 @@ static LLVMValueRef emit_bitfield_insert(struct nir_to_llvm_context *ctx,
return result;
}
-static LLVMValueRef emit_pack_half_2x16(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_pack_half_2x16(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
LLVMValueRef const16 = LLVMConstInt(ctx->i32, 16, false);
@@ -959,8 +1423,8 @@ static LLVMValueRef emit_pack_half_2x16(struct nir_to_llvm_context *ctx,
LLVMValueRef comp[2];
src0 = to_float(ctx, src0);
- comp[0] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, "");
- comp[1] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, "");
+ comp[0] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32_0, "");
+ comp[1] = LLVMBuildExtractElement(ctx->builder, src0, ctx->i32_1, "");
for (i = 0; i < 2; i++) {
comp[i] = LLVMBuildFPTrunc(ctx->builder, comp[i], ctx->f16, "");
comp[i] = LLVMBuildBitCast(ctx->builder, comp[i], ctx->i16, "");
@@ -973,7 +1437,7 @@ static LLVMValueRef emit_pack_half_2x16(struct nir_to_llvm_context *ctx,
return comp[0];
}
-static LLVMValueRef emit_unpack_half_2x16(struct nir_to_llvm_context *ctx,
+static LLVMValueRef emit_unpack_half_2x16(struct ac_llvm_context *ctx,
LLVMValueRef src0)
{
LLVMValueRef const16 = LLVMConstInt(ctx->i32, 16, false);
@@ -987,149 +1451,40 @@ static LLVMValueRef emit_unpack_half_2x16(struct nir_to_llvm_context *ctx,
temps[i] = LLVMBuildFPExt(ctx->builder, val, ctx->f32, "");
}
- result = LLVMBuildInsertElement(ctx->builder, LLVMGetUndef(ctx->v2f32), temps[0],
- ctx->i32zero, "");
+ LLVMTypeRef v2f32 = LLVMVectorType(ctx->f32, 2);
+ result = LLVMBuildInsertElement(ctx->builder, LLVMGetUndef(v2f32), temps[0],
+ ctx->i32_0, "");
result = LLVMBuildInsertElement(ctx->builder, result, temps[1],
- ctx->i32one, "");
+ ctx->i32_1, "");
return result;
}
-/**
- * Set range metadata on an instruction. This can only be used on load and
- * call instructions. If you know an instruction can only produce the values
- * 0, 1, 2, you would do set_range_metadata(value, 0, 3);
- * \p lo is the minimum value inclusive.
- * \p hi is the maximum value exclusive.
- */
-static void set_range_metadata(struct nir_to_llvm_context *ctx,
- LLVMValueRef value, unsigned lo, unsigned hi)
-{
- LLVMValueRef range_md, md_args[2];
- LLVMTypeRef type = LLVMTypeOf(value);
- LLVMContextRef context = LLVMGetTypeContext(type);
-
- md_args[0] = LLVMConstInt(type, lo, false);
- md_args[1] = LLVMConstInt(type, hi, false);
- range_md = LLVMMDNodeInContext(context, md_args, 2);
- LLVMSetMetadata(value, ctx->range_md_kind, range_md);
-}
-
-static LLVMValueRef get_thread_id(struct nir_to_llvm_context *ctx)
-{
- LLVMValueRef tid;
- LLVMValueRef tid_args[2];
- tid_args[0] = LLVMConstInt(ctx->i32, 0xffffffff, false);
- tid_args[1] = ctx->i32zero;
- tid_args[1] = emit_llvm_intrinsic(ctx,
- "llvm.amdgcn.mbcnt.lo", ctx->i32,
- tid_args, 2, LLVMReadNoneAttribute);
-
- tid = emit_llvm_intrinsic(ctx,
- "llvm.amdgcn.mbcnt.hi", ctx->i32,
- tid_args, 2, LLVMReadNoneAttribute);
- set_range_metadata(ctx, tid, 0, 64);
- return tid;
-}
-
-/*
- * SI implements derivatives using the local data store (LDS)
- * All writes to the LDS happen in all executing threads at
- * the same time. TID is the Thread ID for the current
- * thread and is a value between 0 and 63, representing
- * the thread's position in the wavefront.
- *
- * For the pixel shader threads are grouped into quads of four pixels.
- * The TIDs of the pixels of a quad are:
- *
- * +------+------+
- * |4n + 0|4n + 1|
- * +------+------+
- * |4n + 2|4n + 3|
- * +------+------+
- *
- * So, masking the TID with 0xfffffffc yields the TID of the top left pixel
- * of the quad, masking with 0xfffffffd yields the TID of the top pixel of
- * the current pixel's column, and masking with 0xfffffffe yields the TID
- * of the left pixel of the current pixel's row.
- *
- * Adding 1 yields the TID of the pixel to the right of the left pixel, and
- * adding 2 yields the TID of the pixel below the top pixel.
- */
-/* masks for thread ID. */
-#define TID_MASK_TOP_LEFT 0xfffffffc
-#define TID_MASK_TOP 0xfffffffd
-#define TID_MASK_LEFT 0xfffffffe
static LLVMValueRef emit_ddxy(struct nir_to_llvm_context *ctx,
- nir_alu_instr *instr,
+ nir_op op,
LLVMValueRef src0)
{
- LLVMValueRef indices[2];
- LLVMValueRef store_ptr, load_ptr0, load_ptr1;
- LLVMValueRef tl, trbl, result;
- LLVMValueRef tl_tid, trbl_tid;
- LLVMValueRef args[2];
unsigned mask;
int idx;
- ctx->has_ddxy = true;
- if (!ctx->lds)
- ctx->lds = LLVMAddGlobalInAddressSpace(ctx->module,
- LLVMArrayType(ctx->i32, 64),
- "ddxy_lds", LOCAL_ADDR_SPACE);
-
- indices[0] = ctx->i32zero;
- indices[1] = get_thread_id(ctx);
- store_ptr = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- if (instr->op == nir_op_fddx_fine || instr->op == nir_op_fddx)
- mask = TID_MASK_LEFT;
- else if (instr->op == nir_op_fddy_fine || instr->op == nir_op_fddy)
- mask = TID_MASK_TOP;
- else
- mask = TID_MASK_TOP_LEFT;
+ LLVMValueRef result;
- tl_tid = LLVMBuildAnd(ctx->builder, indices[1],
- LLVMConstInt(ctx->i32, mask, false), "");
- indices[1] = tl_tid;
- load_ptr0 = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
+ if (op == nir_op_fddx_fine || op == nir_op_fddx)
+ mask = AC_TID_MASK_LEFT;
+ else if (op == nir_op_fddy_fine || op == nir_op_fddy)
+ mask = AC_TID_MASK_TOP;
+ else
+ mask = AC_TID_MASK_TOP_LEFT;
/* for DDX we want to next X pixel, DDY next Y pixel. */
- if (instr->op == nir_op_fddx_fine ||
- instr->op == nir_op_fddx_coarse ||
- instr->op == nir_op_fddx)
+ if (op == nir_op_fddx_fine ||
+ op == nir_op_fddx_coarse ||
+ op == nir_op_fddx)
idx = 1;
else
idx = 2;
- trbl_tid = LLVMBuildAdd(ctx->builder, indices[1],
- LLVMConstInt(ctx->i32, idx, false), "");
- indices[1] = trbl_tid;
- load_ptr1 = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- if (ctx->options->family >= CHIP_TONGA) {
- args[0] = LLVMBuildMul(ctx->builder, tl_tid,
- LLVMConstInt(ctx->i32, 4, false), "");
- args[1] = src0;
- tl = emit_llvm_intrinsic(ctx, "llvm.amdgcn.ds.bpermute",
- ctx->i32, args, 2,
- LLVMReadNoneAttribute);
-
- args[0] = LLVMBuildMul(ctx->builder, trbl_tid,
- LLVMConstInt(ctx->i32, 4, false), "");
- trbl = emit_llvm_intrinsic(ctx, "llvm.amdgcn.ds.bpermute",
- ctx->i32, args, 2,
- LLVMReadNoneAttribute);
- } else {
- LLVMBuildStore(ctx->builder, src0, store_ptr);
-
- tl = LLVMBuildLoad(ctx->builder, load_ptr0, "");
- trbl = LLVMBuildLoad(ctx->builder, load_ptr1, "");
- }
- tl = LLVMBuildBitCast(ctx->builder, tl, ctx->f32, "");
- trbl = LLVMBuildBitCast(ctx->builder, trbl, ctx->f32, "");
- result = LLVMBuildFSub(ctx->builder, trbl, tl, "");
+ result = ac_build_ddxy(&ctx->ac, ctx->has_ds_bpermute,
+ mask, idx,
+ src0);
return result;
}
@@ -1142,91 +1497,24 @@ static LLVMValueRef emit_ddxy_interp(
struct nir_to_llvm_context *ctx,
LLVMValueRef interp_ij)
{
- LLVMValueRef indices[2];
- LLVMValueRef store_ptr, load_ptr_x, load_ptr_y, load_ptr_ddx, load_ptr_ddy, temp, temp2;
- LLVMValueRef tl, tr, bl, result[4];
- unsigned c;
-
- if (!ctx->lds)
- ctx->lds = LLVMAddGlobalInAddressSpace(ctx->module,
- LLVMArrayType(ctx->i32, 64),
- "ddxy_lds", LOCAL_ADDR_SPACE);
-
- indices[0] = ctx->i32zero;
- indices[1] = get_thread_id(ctx);
- store_ptr = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- temp = LLVMBuildAnd(ctx->builder, indices[1],
- LLVMConstInt(ctx->i32, TID_MASK_LEFT, false), "");
-
- temp2 = LLVMBuildAnd(ctx->builder, indices[1],
- LLVMConstInt(ctx->i32, TID_MASK_TOP, false), "");
-
- indices[1] = temp;
- load_ptr_x = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- indices[1] = temp2;
- load_ptr_y = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- indices[1] = LLVMBuildAdd(ctx->builder, temp,
- LLVMConstInt(ctx->i32, 1, false), "");
- load_ptr_ddx = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- indices[1] = LLVMBuildAdd(ctx->builder, temp2,
- LLVMConstInt(ctx->i32, 2, false), "");
- load_ptr_ddy = LLVMBuildGEP(ctx->builder, ctx->lds,
- indices, 2, "");
-
- for (c = 0; c < 2; ++c) {
- LLVMValueRef store_val;
- LLVMValueRef c_ll = LLVMConstInt(ctx->i32, c, false);
-
- store_val = LLVMBuildExtractElement(ctx->builder,
- interp_ij, c_ll, "");
- LLVMBuildStore(ctx->builder,
- store_val,
- store_ptr);
-
- tl = LLVMBuildLoad(ctx->builder, load_ptr_x, "");
- tl = LLVMBuildBitCast(ctx->builder, tl, ctx->f32, "");
-
- tr = LLVMBuildLoad(ctx->builder, load_ptr_ddx, "");
- tr = LLVMBuildBitCast(ctx->builder, tr, ctx->f32, "");
-
- result[c] = LLVMBuildFSub(ctx->builder, tr, tl, "");
-
- tl = LLVMBuildLoad(ctx->builder, load_ptr_y, "");
- tl = LLVMBuildBitCast(ctx->builder, tl, ctx->f32, "");
-
- bl = LLVMBuildLoad(ctx->builder, load_ptr_ddy, "");
- bl = LLVMBuildBitCast(ctx->builder, bl, ctx->f32, "");
+ LLVMValueRef result[4], a;
+ unsigned i;
- result[c + 2] = LLVMBuildFSub(ctx->builder, bl, tl, "");
+ for (i = 0; i < 2; i++) {
+ a = LLVMBuildExtractElement(ctx->builder, interp_ij,
+ LLVMConstInt(ctx->i32, i, false), "");
+ result[i] = emit_ddxy(ctx, nir_op_fddx, a);
+ result[2+i] = emit_ddxy(ctx, nir_op_fddy, a);
}
-
- return build_gather_values(ctx, result, 4);
+ return ac_build_gather_values(&ctx->ac, result, 4);
}
-static LLVMValueRef emit_fdiv(struct nir_to_llvm_context *ctx,
- LLVMValueRef num,
- LLVMValueRef den)
-{
- LLVMValueRef ret = LLVMBuildFDiv(ctx->builder, num, den, "");
-
- if (!LLVMIsConstant(ret))
- LLVMSetMetadata(ret, ctx->fpmath_md_kind, ctx->fpmath_md_2p5_ulp);
- return ret;
-}
-
-static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
+static void visit_alu(struct nir_to_llvm_context *ctx, const nir_alu_instr *instr)
{
LLVMValueRef src[4], result = NULL;
unsigned num_components = instr->dest.dest.ssa.num_components;
unsigned src_components;
+ LLVMTypeRef def_type = get_def_type(ctx, &instr->dest.dest.ssa);
assert(nir_op_infos[instr->op].num_inputs <= ARRAY_SIZE(src));
switch (instr->op) {
@@ -1254,7 +1542,7 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
result = src[0];
break;
case nir_op_fneg:
- src[0] = to_float(ctx, src[0]);
+ src[0] = to_float(&ctx->ac, src[0]);
result = LLVMBuildFNeg(ctx->builder, src[0], "");
break;
case nir_op_ineg:
@@ -1267,13 +1555,13 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
result = LLVMBuildAdd(ctx->builder, src[0], src[1], "");
break;
case nir_op_fadd:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
result = LLVMBuildFAdd(ctx->builder, src[0], src[1], "");
break;
case nir_op_fsub:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
result = LLVMBuildFSub(ctx->builder, src[0], src[1], "");
break;
case nir_op_isub:
@@ -1289,16 +1577,17 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
result = LLVMBuildURem(ctx->builder, src[0], src[1], "");
break;
case nir_op_fmod:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
- result = emit_fdiv(ctx, src[0], src[1]);
- result = emit_intrin_1f_param(ctx, "llvm.floor.f32", result);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
+ result = ac_build_fdiv(&ctx->ac, src[0], src[1]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.floor",
+ to_float_type(&ctx->ac, def_type), result);
result = LLVMBuildFMul(ctx->builder, src[1] , result, "");
result = LLVMBuildFSub(ctx->builder, src[0], result, "");
break;
case nir_op_frem:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
result = LLVMBuildFRem(ctx->builder, src[0], src[1], "");
break;
case nir_op_irem:
@@ -1311,18 +1600,18 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
result = LLVMBuildUDiv(ctx->builder, src[0], src[1], "");
break;
case nir_op_fmul:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
result = LLVMBuildFMul(ctx->builder, src[0], src[1], "");
break;
case nir_op_fdiv:
- src[0] = to_float(ctx, src[0]);
- src[1] = to_float(ctx, src[1]);
- result = emit_fdiv(ctx, src[0], src[1]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ src[1] = to_float(&ctx->ac, src[1]);
+ result = ac_build_fdiv(&ctx->ac, src[0], src[1]);
break;
case nir_op_frcp:
- src[0] = to_float(ctx, src[0]);
- result = emit_fdiv(ctx, ctx->f32one, src[0]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ result = ac_build_fdiv(&ctx->ac, ctx->f32one, src[0]);
break;
case nir_op_iand:
result = LLVMBuildAnd(ctx->builder, src[0], src[1], "");
@@ -1334,189 +1623,267 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
result = LLVMBuildXor(ctx->builder, src[0], src[1], "");
break;
case nir_op_ishl:
- result = LLVMBuildShl(ctx->builder, src[0], src[1], "");
+ result = LLVMBuildShl(ctx->builder, src[0],
+ LLVMBuildZExt(ctx->builder, src[1],
+ LLVMTypeOf(src[0]), ""),
+ "");
break;
case nir_op_ishr:
- result = LLVMBuildAShr(ctx->builder, src[0], src[1], "");
+ result = LLVMBuildAShr(ctx->builder, src[0],
+ LLVMBuildZExt(ctx->builder, src[1],
+ LLVMTypeOf(src[0]), ""),
+ "");
break;
case nir_op_ushr:
- result = LLVMBuildLShr(ctx->builder, src[0], src[1], "");
+ result = LLVMBuildLShr(ctx->builder, src[0],
+ LLVMBuildZExt(ctx->builder, src[1],
+ LLVMTypeOf(src[0]), ""),
+ "");
break;
case nir_op_ilt:
- result = emit_int_cmp(ctx, LLVMIntSLT, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntSLT, src[0], src[1]);
break;
case nir_op_ine:
- result = emit_int_cmp(ctx, LLVMIntNE, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntNE, src[0], src[1]);
break;
case nir_op_ieq:
- result = emit_int_cmp(ctx, LLVMIntEQ, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntEQ, src[0], src[1]);
break;
case nir_op_ige:
- result = emit_int_cmp(ctx, LLVMIntSGE, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntSGE, src[0], src[1]);
break;
case nir_op_ult:
- result = emit_int_cmp(ctx, LLVMIntULT, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntULT, src[0], src[1]);
break;
case nir_op_uge:
- result = emit_int_cmp(ctx, LLVMIntUGE, src[0], src[1]);
+ result = emit_int_cmp(&ctx->ac, LLVMIntUGE, src[0], src[1]);
break;
case nir_op_feq:
- result = emit_float_cmp(ctx, LLVMRealUEQ, src[0], src[1]);
+ result = emit_float_cmp(&ctx->ac, LLVMRealUEQ, src[0], src[1]);
break;
case nir_op_fne:
- result = emit_float_cmp(ctx, LLVMRealUNE, src[0], src[1]);
+ result = emit_float_cmp(&ctx->ac, LLVMRealUNE, src[0], src[1]);
break;
case nir_op_flt:
- result = emit_float_cmp(ctx, LLVMRealULT, src[0], src[1]);
+ result = emit_float_cmp(&ctx->ac, LLVMRealULT, src[0], src[1]);
break;
case nir_op_fge:
- result = emit_float_cmp(ctx, LLVMRealUGE, src[0], src[1]);
+ result = emit_float_cmp(&ctx->ac, LLVMRealUGE, src[0], src[1]);
break;
case nir_op_fabs:
- result = emit_intrin_1f_param(ctx, "llvm.fabs.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.fabs",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_iabs:
- result = emit_iabs(ctx, src[0]);
+ result = emit_iabs(&ctx->ac, src[0]);
break;
case nir_op_imax:
- result = emit_minmax_int(ctx, LLVMIntSGT, src[0], src[1]);
+ result = emit_minmax_int(&ctx->ac, LLVMIntSGT, src[0], src[1]);
break;
case nir_op_imin:
- result = emit_minmax_int(ctx, LLVMIntSLT, src[0], src[1]);
+ result = emit_minmax_int(&ctx->ac, LLVMIntSLT, src[0], src[1]);
break;
case nir_op_umax:
- result = emit_minmax_int(ctx, LLVMIntUGT, src[0], src[1]);
+ result = emit_minmax_int(&ctx->ac, LLVMIntUGT, src[0], src[1]);
break;
case nir_op_umin:
- result = emit_minmax_int(ctx, LLVMIntULT, src[0], src[1]);
+ result = emit_minmax_int(&ctx->ac, LLVMIntULT, src[0], src[1]);
break;
case nir_op_isign:
- result = emit_isign(ctx, src[0]);
+ result = emit_isign(&ctx->ac, src[0]);
break;
case nir_op_fsign:
- src[0] = to_float(ctx, src[0]);
- result = emit_fsign(ctx, src[0]);
+ src[0] = to_float(&ctx->ac, src[0]);
+ result = emit_fsign(&ctx->ac, src[0]);
break;
case nir_op_ffloor:
- result = emit_intrin_1f_param(ctx, "llvm.floor.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.floor",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_ftrunc:
- result = emit_intrin_1f_param(ctx, "llvm.trunc.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.trunc",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_fceil:
- result = emit_intrin_1f_param(ctx, "llvm.ceil.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.ceil",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_fround_even:
- result = emit_intrin_1f_param(ctx, "llvm.rint.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.rint",
+ to_float_type(&ctx->ac, def_type),src[0]);
break;
case nir_op_ffract:
- result = emit_ffract(ctx, src[0]);
+ result = emit_ffract(&ctx->ac, src[0]);
break;
case nir_op_fsin:
- result = emit_intrin_1f_param(ctx, "llvm.sin.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.sin",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_fcos:
- result = emit_intrin_1f_param(ctx, "llvm.cos.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.cos",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_fsqrt:
- result = emit_intrin_1f_param(ctx, "llvm.sqrt.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.sqrt",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_fexp2:
- result = emit_intrin_1f_param(ctx, "llvm.exp2.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.exp2",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_flog2:
- result = emit_intrin_1f_param(ctx, "llvm.log2.f32", src[0]);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.log2",
+ to_float_type(&ctx->ac, def_type), src[0]);
break;
case nir_op_frsq:
- result = emit_intrin_1f_param(ctx, "llvm.sqrt.f32", src[0]);
- result = emit_fdiv(ctx, ctx->f32one, result);
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.sqrt",
+ to_float_type(&ctx->ac, def_type), src[0]);
+ result = ac_build_fdiv(&ctx->ac, ctx->f32one, result);
break;
case nir_op_fpow:
- result = emit_intrin_2f_param(ctx, "llvm.pow.f32", src[0], src[1]);
+ result = emit_intrin_2f_param(&ctx->ac, "llvm.pow",
+ to_float_type(&ctx->ac, def_type), src[0], src[1]);
break;
case nir_op_fmax:
- result = emit_intrin_2f_param(ctx, "llvm.maxnum.f32", src[0], src[1]);
+ result = emit_intrin_2f_param(&ctx->ac, "llvm.maxnum",
+ to_float_type(&ctx->ac, def_type), src[0], src[1]);
+ if (instr->dest.dest.ssa.bit_size == 32)
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.canonicalize",
+ to_float_type(&ctx->ac, def_type),
+ result);
break;
case nir_op_fmin:
- result = emit_intrin_2f_param(ctx, "llvm.minnum.f32", src[0], src[1]);
+ result = emit_intrin_2f_param(&ctx->ac, "llvm.minnum",
+ to_float_type(&ctx->ac, def_type), src[0], src[1]);
+ if (instr->dest.dest.ssa.bit_size == 32)
+ result = emit_intrin_1f_param(&ctx->ac, "llvm.canonicalize",
+ to_float_type(&ctx->ac, def_type),
+ result);
break;
case nir_op_ffma:
- result = emit_intrin_3f_param(ctx, "llvm.fma.f32", src[0], src[1], src[2]);
+ result = emit_intrin_3f_param(&ctx->ac, "llvm.fmuladd",
+ to_float_type(&ctx->ac, def_type), src[0], src[1], src[2]);
break;
case nir_op_ibitfield_extract:
- result = emit_bitfield_extract(ctx, "llvm.AMDGPU.bfe.i32", src);
+ result = emit_bitfield_extract(&ctx->ac, true, src);
break;
case nir_op_ubitfield_extract:
- result = emit_bitfield_extract(ctx, "llvm.AMDGPU.bfe.u32", src);
+ result = emit_bitfield_extract(&ctx->ac, false, src);
break;
case nir_op_bitfield_insert:
- result = emit_bitfield_insert(ctx, src[0], src[1], src[2], src[3]);
+ result = emit_bitfield_insert(&ctx->ac, src[0], src[1], src[2], src[3]);
break;
case nir_op_bitfield_reverse:
- result = emit_llvm_intrinsic(ctx, "llvm.bitreverse.i32", ctx->i32, src, 1, LLVMReadNoneAttribute);
+ result = ac_build_intrinsic(&ctx->ac, "llvm.bitreverse.i32", ctx->i32, src, 1, AC_FUNC_ATTR_READNONE);
break;
case nir_op_bit_count:
- result = emit_llvm_intrinsic(ctx, "llvm.ctpop.i32", ctx->i32, src, 1, LLVMReadNoneAttribute);
+ result = ac_build_intrinsic(&ctx->ac, "llvm.ctpop.i32", ctx->i32, src, 1, AC_FUNC_ATTR_READNONE);
break;
case nir_op_vec2:
case nir_op_vec3:
case nir_op_vec4:
for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++)
- src[i] = to_integer(ctx, src[i]);
- result = build_gather_values(ctx, src, num_components);
- break;
- case nir_op_f2i:
- src[0] = to_float(ctx, src[0]);
- result = LLVMBuildFPToSI(ctx->builder, src[0], ctx->i32, "");
- break;
- case nir_op_f2u:
- src[0] = to_float(ctx, src[0]);
- result = LLVMBuildFPToUI(ctx->builder, src[0], ctx->i32, "");
- break;
- case nir_op_i2f:
- result = LLVMBuildSIToFP(ctx->builder, src[0], ctx->f32, "");
+ src[i] = to_integer(&ctx->ac, src[i]);
+ result = ac_build_gather_values(&ctx->ac, src, num_components);
+ break;
+ case nir_op_f2i32:
+ case nir_op_f2i64:
+ src[0] = to_float(&ctx->ac, src[0]);
+ result = LLVMBuildFPToSI(ctx->builder, src[0], def_type, "");
+ break;
+ case nir_op_f2u32:
+ case nir_op_f2u64:
+ src[0] = to_float(&ctx->ac, src[0]);
+ result = LLVMBuildFPToUI(ctx->builder, src[0], def_type, "");
+ break;
+ case nir_op_i2f32:
+ case nir_op_i2f64:
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = LLVMBuildSIToFP(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
+ break;
+ case nir_op_u2f32:
+ case nir_op_u2f64:
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = LLVMBuildUIToFP(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
+ break;
+ case nir_op_f2f64:
+ result = LLVMBuildFPExt(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
+ break;
+ case nir_op_f2f32:
+ result = LLVMBuildFPTrunc(ctx->builder, src[0], to_float_type(&ctx->ac, def_type), "");
+ break;
+ case nir_op_u2u32:
+ case nir_op_u2u64:
+ src[0] = to_integer(&ctx->ac, src[0]);
+ if (get_elem_bits(&ctx->ac, LLVMTypeOf(src[0])) < get_elem_bits(&ctx->ac, def_type))
+ result = LLVMBuildZExt(ctx->builder, src[0], def_type, "");
+ else
+ result = LLVMBuildTrunc(ctx->builder, src[0], def_type, "");
break;
- case nir_op_u2f:
- result = LLVMBuildUIToFP(ctx->builder, src[0], ctx->f32, "");
+ case nir_op_i2i32:
+ case nir_op_i2i64:
+ src[0] = to_integer(&ctx->ac, src[0]);
+ if (get_elem_bits(&ctx->ac, LLVMTypeOf(src[0])) < get_elem_bits(&ctx->ac, def_type))
+ result = LLVMBuildSExt(ctx->builder, src[0], def_type, "");
+ else
+ result = LLVMBuildTrunc(ctx->builder, src[0], def_type, "");
break;
case nir_op_bcsel:
- result = emit_bcsel(ctx, src[0], src[1], src[2]);
+ result = emit_bcsel(&ctx->ac, src[0], src[1], src[2]);
break;
case nir_op_find_lsb:
- result = emit_find_lsb(ctx, src[0]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = emit_find_lsb(&ctx->ac, src[0]);
break;
case nir_op_ufind_msb:
- result = emit_ufind_msb(ctx, src[0]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = emit_ufind_msb(&ctx->ac, src[0]);
break;
case nir_op_ifind_msb:
- result = emit_ifind_msb(ctx, src[0]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = emit_ifind_msb(&ctx->ac, src[0]);
break;
case nir_op_uadd_carry:
- result = emit_uint_carry(ctx, "llvm.uadd.with.overflow.i32", src[0], src[1]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ src[1] = to_integer(&ctx->ac, src[1]);
+ result = emit_uint_carry(&ctx->ac, "llvm.uadd.with.overflow.i32", src[0], src[1]);
break;
case nir_op_usub_borrow:
- result = emit_uint_carry(ctx, "llvm.usub.with.overflow.i32", src[0], src[1]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ src[1] = to_integer(&ctx->ac, src[1]);
+ result = emit_uint_carry(&ctx->ac, "llvm.usub.with.overflow.i32", src[0], src[1]);
break;
case nir_op_b2f:
- result = emit_b2f(ctx, src[0]);
+ result = emit_b2f(&ctx->ac, src[0]);
+ break;
+ case nir_op_f2b:
+ result = emit_f2b(&ctx->ac, src[0]);
+ break;
+ case nir_op_b2i:
+ result = emit_b2i(&ctx->ac, src[0]);
+ break;
+ case nir_op_i2b:
+ src[0] = to_integer(&ctx->ac, src[0]);
+ result = emit_i2b(&ctx->ac, src[0]);
break;
case nir_op_fquantize2f16:
- src[0] = to_float(ctx, src[0]);
- result = LLVMBuildFPTrunc(ctx->builder, src[0], ctx->f16, "");
- /* need to convert back up to f32 */
- result = LLVMBuildFPExt(ctx->builder, result, ctx->f32, "");
+ result = emit_f2f16(ctx, src[0]);
break;
case nir_op_umul_high:
- result = emit_umul_high(ctx, src[0], src[1]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ src[1] = to_integer(&ctx->ac, src[1]);
+ result = emit_umul_high(&ctx->ac, src[0], src[1]);
break;
case nir_op_imul_high:
- result = emit_imul_high(ctx, src[0], src[1]);
+ src[0] = to_integer(&ctx->ac, src[0]);
+ src[1] = to_integer(&ctx->ac, src[1]);
+ result = emit_imul_high(&ctx->ac, src[0], src[1]);
break;
case nir_op_pack_half_2x16:
- result = emit_pack_half_2x16(ctx, src[0]);
+ result = emit_pack_half_2x16(&ctx->ac, src[0]);
break;
case nir_op_unpack_half_2x16:
- result = emit_unpack_half_2x16(ctx, src[0]);
+ result = emit_unpack_half_2x16(&ctx->ac, src[0]);
break;
case nir_op_fddx:
case nir_op_fddy:
@@ -1524,8 +1891,39 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
case nir_op_fddy_fine:
case nir_op_fddx_coarse:
case nir_op_fddy_coarse:
- result = emit_ddxy(ctx, instr, src[0]);
+ result = emit_ddxy(ctx, instr->op, src[0]);
+ break;
+
+ case nir_op_unpack_64_2x32_split_x: {
+ assert(instr->src[0].src.ssa->num_components == 1);
+ LLVMValueRef tmp = LLVMBuildBitCast(ctx->builder, src[0],
+ LLVMVectorType(ctx->i32, 2),
+ "");
+ result = LLVMBuildExtractElement(ctx->builder, tmp,
+ ctx->i32zero, "");
+ break;
+ }
+
+ case nir_op_unpack_64_2x32_split_y: {
+ assert(instr->src[0].src.ssa->num_components == 1);
+ LLVMValueRef tmp = LLVMBuildBitCast(ctx->builder, src[0],
+ LLVMVectorType(ctx->i32, 2),
+ "");
+ result = LLVMBuildExtractElement(ctx->builder, tmp,
+ ctx->i32one, "");
+ break;
+ }
+
+ case nir_op_pack_64_2x32_split: {
+ LLVMValueRef tmp = LLVMGetUndef(LLVMVectorType(ctx->i32, 2));
+ tmp = LLVMBuildInsertElement(ctx->builder, tmp,
+ src[0], ctx->i32zero, "");
+ tmp = LLVMBuildInsertElement(ctx->builder, tmp,
+ src[1], ctx->i32one, "");
+ result = LLVMBuildBitCast(ctx->builder, tmp, ctx->i64, "");
break;
+ }
+
default:
fprintf(stderr, "Unknown NIR alu instr: ");
nir_print_instr(&instr->instr, stderr);
@@ -1535,14 +1933,14 @@ static void visit_alu(struct nir_to_llvm_context *ctx, nir_alu_instr *instr)
if (result) {
assert(instr->dest.dest.is_ssa);
- result = to_integer(ctx, result);
+ result = to_integer(&ctx->ac, result);
_mesa_hash_table_insert(ctx->defs, &instr->dest.dest.ssa,
result);
}
}
static void visit_load_const(struct nir_to_llvm_context *ctx,
- nir_load_const_instr *instr)
+ const nir_load_const_instr *instr)
{
LLVMValueRef values[4], value = NULL;
LLVMTypeRef element_type =
@@ -1582,36 +1980,6 @@ static LLVMValueRef cast_ptr(struct nir_to_llvm_context *ctx, LLVMValueRef ptr,
}
static LLVMValueRef
-emit_llvm_intrinsic(struct nir_to_llvm_context *ctx, const char *name,
- LLVMTypeRef return_type, LLVMValueRef *params,
- unsigned param_count, LLVMAttribute attribs)
-{
- LLVMValueRef function;
-
- function = LLVMGetNamedFunction(ctx->module, name);
- if (!function) {
- LLVMTypeRef param_types[32], function_type;
- unsigned i;
-
- assert(param_count <= 32);
-
- for (i = 0; i < param_count; ++i) {
- assert(params[i]);
- param_types[i] = LLVMTypeOf(params[i]);
- }
- function_type =
- LLVMFunctionType(return_type, param_types, param_count, 0);
- function = LLVMAddFunction(ctx->module, name, function_type);
-
- LLVMSetFunctionCallConv(function, LLVMCCallConv);
- LLVMSetLinkage(function, LLVMExternalLinkage);
-
- LLVMAddFunctionAttr(function, attribs | LLVMNoUnwindAttribute);
- }
- return LLVMBuildCall(ctx->builder, function, params, param_count, "");
-}
-
-static LLVMValueRef
get_buffer_size(struct nir_to_llvm_context *ctx, LLVMValueRef descriptor, bool in_elements)
{
LLVMValueRef size =
@@ -1655,45 +2023,40 @@ static void build_int_type_name(
}
static LLVMValueRef radv_lower_gather4_integer(struct nir_to_llvm_context *ctx,
- struct ac_tex_info *tinfo,
- nir_tex_instr *instr,
- const char *intr_name,
- unsigned coord_vgpr_index)
+ struct ac_image_args *args,
+ const nir_tex_instr *instr)
{
- LLVMValueRef coord = tinfo->args[0];
+ enum glsl_base_type stype = glsl_get_sampler_result_type(instr->texture->var->type);
+ LLVMValueRef coord = args->addr;
LLVMValueRef half_texel[2];
+ LLVMValueRef compare_cube_wa;
+ LLVMValueRef result;
int c;
+ unsigned coord_vgpr_index = (unsigned)args->offset + (unsigned)args->compare;
//TODO Rect
{
- LLVMValueRef txq_args[10];
- int txq_arg_count = 0;
- LLVMValueRef size;
- bool da = instr->is_array || instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE;
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, false);
- txq_args[txq_arg_count++] = tinfo->args[1];
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0xf, 0); /* dmask */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* unorm */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* r128 */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, da ? 1 : 0, 0);
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* glc */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* slc */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* tfe */
- txq_args[txq_arg_count++] = LLVMConstInt(ctx->i32, 0, 0); /* lwe */
- size = emit_llvm_intrinsic(ctx, "llvm.SI.getresinfo.i32", ctx->v4i32,
- txq_args, txq_arg_count,
- LLVMReadNoneAttribute);
+ struct ac_image_args txq_args = { 0 };
+
+ txq_args.da = instr->is_array || instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE;
+ txq_args.opcode = ac_image_get_resinfo;
+ txq_args.dmask = 0xf;
+ txq_args.addr = ctx->i32zero;
+ txq_args.resource = args->resource;
+ LLVMValueRef size = ac_build_image_opcode(&ctx->ac, &txq_args);
for (c = 0; c < 2; c++) {
half_texel[c] = LLVMBuildExtractElement(ctx->builder, size,
LLVMConstInt(ctx->i32, c, false), "");
half_texel[c] = LLVMBuildUIToFP(ctx->builder, half_texel[c], ctx->f32, "");
- half_texel[c] = emit_fdiv(ctx, ctx->f32one, half_texel[c]);
+ half_texel[c] = ac_build_fdiv(&ctx->ac, ctx->f32one, half_texel[c]);
half_texel[c] = LLVMBuildFMul(ctx->builder, half_texel[c],
LLVMConstReal(ctx->f32, -0.5), "");
}
}
+ LLVMValueRef orig_coords = args->addr;
+
for (c = 0; c < 2; c++) {
LLVMValueRef tmp;
LLVMValueRef index = LLVMConstInt(ctx->i32, coord_vgpr_index + c, 0);
@@ -1704,78 +2067,139 @@ static LLVMValueRef radv_lower_gather4_integer(struct nir_to_llvm_context *ctx,
coord = LLVMBuildInsertElement(ctx->builder, coord, tmp, index, "");
}
- tinfo->args[0] = coord;
- return emit_llvm_intrinsic(ctx, intr_name, tinfo->dst_type, tinfo->args, tinfo->arg_count,
- LLVMReadNoneAttribute | LLVMNoUnwindAttribute);
+ /*
+ * Apparantly cube has issue with integer types that the workaround doesn't solve,
+ * so this tests if the format is 8_8_8_8 and an integer type do an alternate
+ * workaround by sampling using a scaled type and converting.
+ * This is taken from amdgpu-pro shaders.
+ */
+ /* NOTE this produces some ugly code compared to amdgpu-pro,
+ * LLVM ends up dumping SGPRs into VGPRs to deal with the compare/select,
+ * and then reads them back. -pro generates two selects,
+ * one s_cmp for the descriptor rewriting
+ * one v_cmp for the coordinate and result changes.
+ */
+ if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE) {
+ LLVMValueRef tmp, tmp2;
+
+ /* workaround 8/8/8/8 uint/sint cube gather bug */
+ /* first detect it then change to a scaled read and f2i */
+ tmp = LLVMBuildExtractElement(ctx->builder, args->resource, ctx->i32one, "");
+ tmp2 = tmp;
+
+ /* extract the DATA_FORMAT */
+ tmp = ac_build_bfe(&ctx->ac, tmp, LLVMConstInt(ctx->i32, 20, false),
+ LLVMConstInt(ctx->i32, 6, false), false);
+
+ /* is the DATA_FORMAT == 8_8_8_8 */
+ compare_cube_wa = LLVMBuildICmp(ctx->builder, LLVMIntEQ, tmp, LLVMConstInt(ctx->i32, V_008F14_IMG_DATA_FORMAT_8_8_8_8, false), "");
+
+ if (stype == GLSL_TYPE_UINT)
+ /* Create a NUM FORMAT - 0x2 or 0x4 - USCALED or UINT */
+ tmp = LLVMBuildSelect(ctx->builder, compare_cube_wa, LLVMConstInt(ctx->i32, 0x8000000, false),
+ LLVMConstInt(ctx->i32, 0x10000000, false), "");
+ else
+ /* Create a NUM FORMAT - 0x3 or 0x5 - SSCALED or SINT */
+ tmp = LLVMBuildSelect(ctx->builder, compare_cube_wa, LLVMConstInt(ctx->i32, 0xc000000, false),
+ LLVMConstInt(ctx->i32, 0x14000000, false), "");
+
+ /* replace the NUM FORMAT in the descriptor */
+ tmp2 = LLVMBuildAnd(ctx->builder, tmp2, LLVMConstInt(ctx->i32, C_008F14_NUM_FORMAT_GFX6, false), "");
+ tmp2 = LLVMBuildOr(ctx->builder, tmp2, tmp, "");
+
+ args->resource = LLVMBuildInsertElement(ctx->builder, args->resource, tmp2, ctx->i32one, "");
+
+ /* don't modify the coordinates for this case */
+ coord = LLVMBuildSelect(ctx->builder, compare_cube_wa, orig_coords, coord, "");
+ }
+ args->addr = coord;
+ result = ac_build_image_opcode(&ctx->ac, args);
+
+ if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE) {
+ LLVMValueRef tmp, tmp2;
+
+ /* if the cube workaround is in place, f2i the result. */
+ for (c = 0; c < 4; c++) {
+ tmp = LLVMBuildExtractElement(ctx->builder, result, LLVMConstInt(ctx->i32, c, false), "");
+ if (stype == GLSL_TYPE_UINT)
+ tmp2 = LLVMBuildFPToUI(ctx->builder, tmp, ctx->i32, "");
+ else
+ tmp2 = LLVMBuildFPToSI(ctx->builder, tmp, ctx->i32, "");
+ tmp = LLVMBuildBitCast(ctx->builder, tmp, ctx->i32, "");
+ tmp2 = LLVMBuildBitCast(ctx->builder, tmp2, ctx->i32, "");
+ tmp = LLVMBuildSelect(ctx->builder, compare_cube_wa, tmp2, tmp, "");
+ tmp = LLVMBuildBitCast(ctx->builder, tmp, ctx->f32, "");
+ result = LLVMBuildInsertElement(ctx->builder, result, tmp, LLVMConstInt(ctx->i32, c, false), "");
+ }
+ }
+ return result;
}
static LLVMValueRef build_tex_intrinsic(struct nir_to_llvm_context *ctx,
- nir_tex_instr *instr,
- struct ac_tex_info *tinfo)
-{
- const char *name = "llvm.SI.image.sample";
- const char *infix = "";
- char intr_name[127];
- char type[64];
- bool is_shadow = instr->is_shadow;
- bool has_offset = tinfo->has_offset;
+ const nir_tex_instr *instr,
+ bool lod_is_zero,
+ struct ac_image_args *args)
+{
+ if (instr->sampler_dim == GLSL_SAMPLER_DIM_BUF) {
+ return ac_build_buffer_load_format(&ctx->ac,
+ args->resource,
+ args->addr,
+ LLVMConstInt(ctx->i32, 0, false),
+ true);
+ }
+
+ args->opcode = ac_image_sample;
+ args->compare = instr->is_shadow;
+
switch (instr->op) {
case nir_texop_txf:
case nir_texop_txf_ms:
case nir_texop_samples_identical:
- name = instr->sampler_dim == GLSL_SAMPLER_DIM_MS ? "llvm.SI.image.load" :
- instr->sampler_dim == GLSL_SAMPLER_DIM_BUF ? "llvm.SI.vs.load.input" :
- "llvm.SI.image.load.mip";
- is_shadow = false;
- has_offset = false;
+ args->opcode = instr->sampler_dim == GLSL_SAMPLER_DIM_MS ? ac_image_load : ac_image_load_mip;
+ args->compare = false;
+ args->offset = false;
break;
case nir_texop_txb:
- infix = ".b";
+ args->bias = true;
break;
case nir_texop_txl:
- infix = ".l";
+ if (lod_is_zero)
+ args->level_zero = true;
+ else
+ args->lod = true;
break;
case nir_texop_txs:
- name = "llvm.SI.getresinfo";
- break;
case nir_texop_query_levels:
- name = "llvm.SI.getresinfo";
+ args->opcode = ac_image_get_resinfo;
break;
case nir_texop_tex:
if (ctx->stage != MESA_SHADER_FRAGMENT)
- infix = ".lz";
+ args->level_zero = true;
break;
case nir_texop_txd:
- infix = ".d";
+ args->deriv = true;
break;
case nir_texop_tg4:
- name = "llvm.SI.gather4";
- infix = ".lz";
+ args->opcode = ac_image_gather4;
+ args->level_zero = true;
break;
case nir_texop_lod:
- name = "llvm.SI.getlod";
- is_shadow = false;
- has_offset = false;
+ args->opcode = ac_image_get_lod;
+ args->compare = false;
+ args->offset = false;
break;
default:
break;
}
- build_int_type_name(LLVMTypeOf(tinfo->args[0]), type, sizeof(type));
- sprintf(intr_name, "%s%s%s%s.%s", name, is_shadow ? ".c" : "", infix,
- has_offset ? ".o" : "", type);
-
- if (instr->op == nir_texop_tg4) {
+ if (instr->op == nir_texop_tg4 && ctx->options->chip_class <= VI) {
enum glsl_base_type stype = glsl_get_sampler_result_type(instr->texture->var->type);
if (stype == GLSL_TYPE_UINT || stype == GLSL_TYPE_INT) {
- return radv_lower_gather4_integer(ctx, tinfo, instr, intr_name,
- (int)has_offset + (int)is_shadow);
+ return radv_lower_gather4_integer(ctx, args, instr);
}
}
- return emit_llvm_intrinsic(ctx, intr_name, tinfo->dst_type, tinfo->args, tinfo->arg_count,
- LLVMReadNoneAttribute | LLVMNoUnwindAttribute);
-
+ return ac_build_image_opcode(&ctx->ac, args);
}
static LLVMValueRef visit_vulkan_resource_index(struct nir_to_llvm_context *ctx,
@@ -1803,9 +2227,8 @@ static LLVMValueRef visit_vulkan_resource_index(struct nir_to_llvm_context *ctx,
offset = LLVMConstInt(ctx->i32, base_offset, false);
index = LLVMBuildMul(ctx->builder, index, stride, "");
offset = LLVMBuildAdd(ctx->builder, offset, index, "");
-
- LLVMValueRef indices[] = {ctx->i32zero, offset};
- desc_ptr = LLVMBuildGEP(ctx->builder, desc_ptr, indices, 2, "");
+
+ desc_ptr = ac_build_gep0(&ctx->ac, desc_ptr, offset);
desc_ptr = cast_ptr(ctx, desc_ptr, ctx->v4i32);
LLVMSetMetadata(desc_ptr, ctx->uniform_md_kind, ctx->empty_md);
@@ -1815,17 +2238,19 @@ static LLVMValueRef visit_vulkan_resource_index(struct nir_to_llvm_context *ctx,
static LLVMValueRef visit_load_push_constant(struct nir_to_llvm_context *ctx,
nir_intrinsic_instr *instr)
{
- LLVMValueRef ptr;
+ LLVMValueRef ptr, addr;
- LLVMValueRef indices[] = {ctx->i32zero, get_src(ctx, instr->src[0])};
- ptr = LLVMBuildGEP(ctx->builder, ctx->push_constants, indices, 2, "");
+ addr = LLVMConstInt(ctx->i32, nir_intrinsic_base(instr), 0);
+ addr = LLVMBuildAdd(ctx->builder, addr, get_src(ctx, instr->src[0]), "");
+
+ ptr = ac_build_gep0(&ctx->ac, ctx->push_constants, addr);
ptr = cast_ptr(ctx, ptr, get_def_type(ctx, &instr->dest.ssa));
return LLVMBuildLoad(ctx->builder, ptr, "");
}
static LLVMValueRef visit_get_buffer_size(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef desc = get_src(ctx, instr->src[0]);
@@ -1835,7 +2260,10 @@ static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
nir_intrinsic_instr *instr)
{
const char *store_name;
+ LLVMValueRef src_data = get_src(ctx, instr->src[0]);
LLVMTypeRef data_type = ctx->f32;
+ int elem_size_mult = get_elem_bits(&ctx->ac, LLVMTypeOf(src_data)) / 32;
+ int components_32bit = elem_size_mult * instr->num_components;
unsigned writemask = nir_intrinsic_write_mask(instr);
LLVMValueRef base_data, base_offset;
LLVMValueRef params[6];
@@ -1845,13 +2273,13 @@ static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
params[1] = get_src(ctx, instr->src[1]);
params[2] = LLVMConstInt(ctx->i32, 0, false); /* vindex */
- params[4] = LLVMConstInt(ctx->i1, 0, false); /* glc */
- params[5] = LLVMConstInt(ctx->i1, 0, false); /* slc */
+ params[4] = ctx->i1false; /* glc */
+ params[5] = ctx->i1false; /* slc */
- if (instr->num_components > 1)
- data_type = LLVMVectorType(ctx->f32, instr->num_components);
+ if (components_32bit > 1)
+ data_type = LLVMVectorType(ctx->f32, components_32bit);
- base_data = to_float(ctx, get_src(ctx, instr->src[0]));
+ base_data = to_float(&ctx->ac, src_data);
base_data = trim_vector(ctx, base_data, instr->num_components);
base_data = LLVMBuildBitCast(ctx->builder, base_data,
data_type, "");
@@ -1870,6 +2298,14 @@ static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
count = 2;
}
+ start *= elem_size_mult;
+ count *= elem_size_mult;
+
+ if (count > 4) {
+ writemask |= ((1u << (count - 4)) - 1u) << (start + 4);
+ count = 4;
+ }
+
if (count == 4) {
store_name = "llvm.amdgcn.buffer.store.v4f32";
data = base_data;
@@ -1901,28 +2337,28 @@ static void visit_store_ssbo(struct nir_to_llvm_context *ctx,
}
params[0] = data;
params[3] = offset;
- emit_llvm_intrinsic(ctx, store_name,
- LLVMVoidTypeInContext(ctx->context), params, 6, 0);
+ ac_build_intrinsic(&ctx->ac, store_name,
+ ctx->voidt, params, 6, 0);
}
}
static LLVMValueRef visit_atomic_ssbo(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
const char *name;
- LLVMValueRef params[5];
+ LLVMValueRef params[6];
int arg_count = 0;
if (ctx->stage == MESA_SHADER_FRAGMENT)
ctx->shader_info->fs.writes_memory = true;
if (instr->intrinsic == nir_intrinsic_ssbo_atomic_comp_swap) {
- params[arg_count++] = get_src(ctx, instr->src[3]);
+ params[arg_count++] = llvm_extract_elem(ctx, get_src(ctx, instr->src[3]), 0);
}
- params[arg_count++] = get_src(ctx, instr->src[2]);
+ params[arg_count++] = llvm_extract_elem(ctx, get_src(ctx, instr->src[2]), 0);
params[arg_count++] = get_src(ctx, instr->src[0]);
params[arg_count++] = LLVMConstInt(ctx->i32, 0, false); /* vindex */
params[arg_count++] = get_src(ctx, instr->src[1]); /* voffset */
- params[arg_count++] = LLVMConstInt(ctx->i1, 0, false); /* slc */
+ params[arg_count++] = ctx->i1false; /* slc */
switch (instr->intrinsic) {
case nir_intrinsic_ssbo_atomic_add:
@@ -1959,53 +2395,133 @@ static LLVMValueRef visit_atomic_ssbo(struct nir_to_llvm_context *ctx,
abort();
}
- return emit_llvm_intrinsic(ctx, name, ctx->i32, params, arg_count, 0);
+ return ac_build_intrinsic(&ctx->ac, name, ctx->i32, params, arg_count, 0);
}
static LLVMValueRef visit_load_buffer(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
- const char *load_name;
- LLVMTypeRef data_type = ctx->f32;
- if (instr->num_components == 3)
- data_type = LLVMVectorType(ctx->f32, 4);
- else if (instr->num_components > 1)
- data_type = LLVMVectorType(ctx->f32, instr->num_components);
-
- if (instr->num_components == 4 || instr->num_components == 3)
- load_name = "llvm.amdgcn.buffer.load.v4f32";
- else if (instr->num_components == 2)
- load_name = "llvm.amdgcn.buffer.load.v2f32";
- else if (instr->num_components == 1)
- load_name = "llvm.amdgcn.buffer.load.f32";
- else
- abort();
+ LLVMValueRef results[2];
+ int load_components;
+ int num_components = instr->num_components;
+ if (instr->dest.ssa.bit_size == 64)
+ num_components *= 2;
+
+ for (int i = 0; i < num_components; i += load_components) {
+ load_components = MIN2(num_components - i, 4);
+ const char *load_name;
+ LLVMTypeRef data_type = ctx->f32;
+ LLVMValueRef offset = LLVMConstInt(ctx->i32, i * 4, false);
+ offset = LLVMBuildAdd(ctx->builder, get_src(ctx, instr->src[1]), offset, "");
+
+ if (load_components == 3)
+ data_type = LLVMVectorType(ctx->f32, 4);
+ else if (load_components > 1)
+ data_type = LLVMVectorType(ctx->f32, load_components);
+
+ if (load_components >= 3)
+ load_name = "llvm.amdgcn.buffer.load.v4f32";
+ else if (load_components == 2)
+ load_name = "llvm.amdgcn.buffer.load.v2f32";
+ else if (load_components == 1)
+ load_name = "llvm.amdgcn.buffer.load.f32";
+ else
+ unreachable("unhandled number of components");
- LLVMValueRef params[] = {
- get_src(ctx, instr->src[0]),
- LLVMConstInt(ctx->i32, 0, false),
- get_src(ctx, instr->src[1]),
- LLVMConstInt(ctx->i1, 0, false),
- LLVMConstInt(ctx->i1, 0, false),
- };
+ LLVMValueRef params[] = {
+ get_src(ctx, instr->src[0]),
+ LLVMConstInt(ctx->i32, 0, false),
+ offset,
+ ctx->i1false,
+ ctx->i1false,
+ };
+
+ results[i] = ac_build_intrinsic(&ctx->ac, load_name, data_type, params, 5, 0);
+
+ }
+
+ LLVMValueRef ret = results[0];
+ if (num_components > 4 || num_components == 3) {
+ LLVMValueRef masks[] = {
+ LLVMConstInt(ctx->i32, 0, false), LLVMConstInt(ctx->i32, 1, false),
+ LLVMConstInt(ctx->i32, 2, false), LLVMConstInt(ctx->i32, 3, false),
+ LLVMConstInt(ctx->i32, 4, false), LLVMConstInt(ctx->i32, 5, false),
+ LLVMConstInt(ctx->i32, 6, false), LLVMConstInt(ctx->i32, 7, false)
+ };
+
+ LLVMValueRef swizzle = LLVMConstVector(masks, num_components);
+ ret = LLVMBuildShuffleVector(ctx->builder, results[0],
+ results[num_components > 4 ? 1 : 0], swizzle, "");
+ }
+
+ return LLVMBuildBitCast(ctx->builder, ret,
+ get_def_type(ctx, &instr->dest.ssa), "");
+}
- LLVMValueRef ret =
- emit_llvm_intrinsic(ctx, load_name, data_type, params, 5, 0);
+static LLVMValueRef visit_load_ubo_buffer(struct nir_to_llvm_context *ctx,
+ const nir_intrinsic_instr *instr)
+{
+ LLVMValueRef results[8], ret;
+ LLVMValueRef rsrc = get_src(ctx, instr->src[0]);
+ LLVMValueRef offset = get_src(ctx, instr->src[1]);
+ int num_components = instr->num_components;
+
+ if (instr->dest.ssa.bit_size == 64)
+ num_components *= 2;
+
+ for (unsigned i = 0; i < num_components; ++i) {
+ LLVMValueRef params[] = {
+ rsrc,
+ LLVMBuildAdd(ctx->builder, LLVMConstInt(ctx->i32, 4 * i, 0),
+ offset, "")
+ };
+ results[i] = ac_build_intrinsic(&ctx->ac, "llvm.SI.load.const.v4i32", ctx->f32,
+ params, 2,
+ AC_FUNC_ATTR_READNONE |
+ AC_FUNC_ATTR_LEGACY);
+ }
- if (instr->num_components == 3)
- ret = trim_vector(ctx, ret, 3);
+ ret = ac_build_gather_values(&ctx->ac, results, instr->num_components);
return LLVMBuildBitCast(ctx->builder, ret,
get_def_type(ctx, &instr->dest.ssa), "");
}
static void
-radv_get_deref_offset(struct nir_to_llvm_context *ctx, nir_deref *tail,
- bool vs_in, unsigned *const_out, LLVMValueRef *indir_out)
+radv_get_deref_offset(struct nir_to_llvm_context *ctx, nir_deref_var *deref,
+ bool vs_in, unsigned *vertex_index_out,
+ LLVMValueRef *vertex_index_ref,
+ unsigned *const_out, LLVMValueRef *indir_out)
{
unsigned const_offset = 0;
+ nir_deref *tail = &deref->deref;
LLVMValueRef offset = NULL;
+ if (vertex_index_out != NULL || vertex_index_ref != NULL) {
+ tail = tail->child;
+ nir_deref_array *deref_array = nir_deref_as_array(tail);
+ if (vertex_index_out)
+ *vertex_index_out = deref_array->base_offset;
+
+ if (vertex_index_ref) {
+ LLVMValueRef vtx = LLVMConstInt(ctx->i32, deref_array->base_offset, false);
+ if (deref_array->deref_array_type == nir_deref_array_type_indirect) {
+ vtx = LLVMBuildAdd(ctx->builder, vtx, get_src(ctx, deref_array->indirect), "");
+ }
+ *vertex_index_ref = vtx;
+ }
+ }
+
+ if (deref->var->data.compact) {
+ assert(tail->child->deref_type == nir_deref_type_array);
+ assert(glsl_type_is_scalar(glsl_without_array(deref->var->type)));
+ nir_deref_array *deref_array = nir_deref_as_array(tail->child);
+ /* We always lower indirect dereferences for "compact" array vars. */
+ assert(deref_array->deref_array_type == nir_deref_array_type_direct);
+
+ const_offset = deref_array->base_offset;
+ goto out;
+ }
while (tail->child != NULL) {
const struct glsl_type *parent_type = tail->type;
@@ -2040,7 +2556,7 @@ radv_get_deref_offset(struct nir_to_llvm_context *ctx, nir_deref *tail,
unreachable("unsupported deref type");
}
-
+out:
if (const_offset && offset)
offset = LLVMBuildAdd(ctx->builder, offset,
LLVMConstInt(ctx->i32, const_offset, 0),
@@ -2050,26 +2566,436 @@ radv_get_deref_offset(struct nir_to_llvm_context *ctx, nir_deref *tail,
*indir_out = offset;
}
+static LLVMValueRef
+lds_load(struct nir_to_llvm_context *ctx,
+ LLVMValueRef dw_addr)
+{
+ LLVMValueRef value;
+ value = ac_build_indexed_load(&ctx->ac, ctx->lds, dw_addr, false);
+ return value;
+}
+
+static void
+lds_store(struct nir_to_llvm_context *ctx,
+ LLVMValueRef dw_addr, LLVMValueRef value)
+{
+ value = LLVMBuildBitCast(ctx->builder, value, ctx->i32, "");
+ ac_build_indexed_store(&ctx->ac, ctx->lds,
+ dw_addr, value);
+}
+
+/* The offchip buffer layout for TCS->TES is
+ *
+ * - attribute 0 of patch 0 vertex 0
+ * - attribute 0 of patch 0 vertex 1
+ * - attribute 0 of patch 0 vertex 2
+ * ...
+ * - attribute 0 of patch 1 vertex 0
+ * - attribute 0 of patch 1 vertex 1
+ * ...
+ * - attribute 1 of patch 0 vertex 0
+ * - attribute 1 of patch 0 vertex 1
+ * ...
+ * - per patch attribute 0 of patch 0
+ * - per patch attribute 0 of patch 1
+ * ...
+ *
+ * Note that every attribute has 4 components.
+ */
+static LLVMValueRef get_tcs_tes_buffer_address(struct nir_to_llvm_context *ctx,
+ LLVMValueRef vertex_index,
+ LLVMValueRef param_index)
+{
+ LLVMValueRef base_addr, vertices_per_patch, num_patches, total_vertices;
+ LLVMValueRef param_stride, constant16;
+ LLVMValueRef rel_patch_id = get_rel_patch_id(ctx);
+
+ vertices_per_patch = unpack_param(ctx, ctx->tcs_offchip_layout, 9, 6);
+ num_patches = unpack_param(ctx, ctx->tcs_offchip_layout, 0, 9);
+ total_vertices = LLVMBuildMul(ctx->builder, vertices_per_patch,
+ num_patches, "");
+
+ constant16 = LLVMConstInt(ctx->i32, 16, false);
+ if (vertex_index) {
+ base_addr = LLVMBuildMul(ctx->builder, rel_patch_id,
+ vertices_per_patch, "");
+
+ base_addr = LLVMBuildAdd(ctx->builder, base_addr,
+ vertex_index, "");
+
+ param_stride = total_vertices;
+ } else {
+ base_addr = rel_patch_id;
+ param_stride = num_patches;
+ }
+
+ base_addr = LLVMBuildAdd(ctx->builder, base_addr,
+ LLVMBuildMul(ctx->builder, param_index,
+ param_stride, ""), "");
+
+ base_addr = LLVMBuildMul(ctx->builder, base_addr, constant16, "");
+
+ if (!vertex_index) {
+ LLVMValueRef patch_data_offset =
+ unpack_param(ctx, ctx->tcs_offchip_layout, 16, 16);
+
+ base_addr = LLVMBuildAdd(ctx->builder, base_addr,
+ patch_data_offset, "");
+ }
+ return base_addr;
+}
+
+static LLVMValueRef get_tcs_tes_buffer_address_params(struct nir_to_llvm_context *ctx,
+ unsigned param,
+ unsigned const_index,
+ bool is_compact,
+ LLVMValueRef vertex_index,
+ LLVMValueRef indir_index)
+{
+ LLVMValueRef param_index;
+
+ if (indir_index)
+ param_index = LLVMBuildAdd(ctx->builder, LLVMConstInt(ctx->i32, param, false),
+ indir_index, "");
+ else {
+ if (const_index && !is_compact)
+ param += const_index;
+ param_index = LLVMConstInt(ctx->i32, param, false);
+ }
+ return get_tcs_tes_buffer_address(ctx, vertex_index, param_index);
+}
+
+static void
+mark_tess_output(struct nir_to_llvm_context *ctx,
+ bool is_patch, uint32_t param)
+
+{
+ if (is_patch) {
+ ctx->tess_patch_outputs_written |= (1ull << param);
+ } else
+ ctx->tess_outputs_written |= (1ull << param);
+}
+
+static LLVMValueRef
+get_dw_address(struct nir_to_llvm_context *ctx,
+ LLVMValueRef dw_addr,
+ unsigned param,
+ unsigned const_index,
+ bool compact_const_index,
+ LLVMValueRef vertex_index,
+ LLVMValueRef stride,
+ LLVMValueRef indir_index)
+
+{
+
+ if (vertex_index) {
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMBuildMul(ctx->builder,
+ vertex_index,
+ stride, ""), "");
+ }
+
+ if (indir_index)
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMBuildMul(ctx->builder, indir_index,
+ LLVMConstInt(ctx->i32, 4, false), ""), "");
+ else if (const_index && !compact_const_index)
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMConstInt(ctx->i32, const_index, false), "");
+
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMConstInt(ctx->i32, param * 4, false), "");
+
+ if (const_index && compact_const_index)
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ LLVMConstInt(ctx->i32, const_index, false), "");
+ return dw_addr;
+}
+
+static LLVMValueRef
+load_tcs_input(struct nir_to_llvm_context *ctx,
+ nir_intrinsic_instr *instr)
+{
+ LLVMValueRef dw_addr, stride;
+ unsigned const_index;
+ LLVMValueRef vertex_index;
+ LLVMValueRef indir_index;
+ unsigned param;
+ LLVMValueRef value[4], result;
+ const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage);
+ const bool is_compact = instr->variables[0]->var->data.compact;
+ param = shader_io_get_unique_index(instr->variables[0]->var->data.location);
+ radv_get_deref_offset(ctx, instr->variables[0],
+ false, NULL, per_vertex ? &vertex_index : NULL,
+ &const_index, &indir_index);
+
+ stride = unpack_param(ctx, ctx->tcs_in_layout, 13, 8);
+ dw_addr = get_tcs_in_current_patch_offset(ctx);
+ dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride,
+ indir_index);
+
+ for (unsigned i = 0; i < instr->num_components; i++) {
+ value[i] = lds_load(ctx, dw_addr);
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ ctx->i32one, "");
+ }
+ result = ac_build_gather_values(&ctx->ac, value, instr->num_components);
+ result = LLVMBuildBitCast(ctx->builder, result, get_def_type(ctx, &instr->dest.ssa), "");
+ return result;
+}
+
+static LLVMValueRef
+load_tcs_output(struct nir_to_llvm_context *ctx,
+ nir_intrinsic_instr *instr)
+{
+ LLVMValueRef dw_addr, stride;
+ LLVMValueRef value[4], result;
+ LLVMValueRef vertex_index = NULL;
+ LLVMValueRef indir_index = NULL;
+ unsigned const_index = 0;
+ unsigned param;
+ const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage);
+ const bool is_compact = instr->variables[0]->var->data.compact;
+ param = shader_io_get_unique_index(instr->variables[0]->var->data.location);
+ radv_get_deref_offset(ctx, instr->variables[0],
+ false, NULL, per_vertex ? &vertex_index : NULL,
+ &const_index, &indir_index);
+
+ if (!instr->variables[0]->var->data.patch) {
+ stride = unpack_param(ctx, ctx->tcs_out_layout, 13, 8);
+ dw_addr = get_tcs_out_current_patch_offset(ctx);
+ } else {
+ dw_addr = get_tcs_out_current_patch_data_offset(ctx);
+ }
+
+ dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride,
+ indir_index);
+
+ for (unsigned i = 0; i < instr->num_components; i++) {
+ value[i] = lds_load(ctx, dw_addr);
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ ctx->i32one, "");
+ }
+ result = ac_build_gather_values(&ctx->ac, value, instr->num_components);
+ result = LLVMBuildBitCast(ctx->builder, result, get_def_type(ctx, &instr->dest.ssa), "");
+ return result;
+}
+
+static void
+store_tcs_output(struct nir_to_llvm_context *ctx,
+ nir_intrinsic_instr *instr,
+ LLVMValueRef src,
+ unsigned writemask)
+{
+ LLVMValueRef stride, dw_addr;
+ LLVMValueRef buf_addr = NULL;
+ LLVMValueRef vertex_index = NULL;
+ LLVMValueRef indir_index = NULL;
+ unsigned const_index = 0;
+ unsigned param;
+ const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage);
+ const bool is_compact = instr->variables[0]->var->data.compact;
+
+ radv_get_deref_offset(ctx, instr->variables[0],
+ false, NULL, per_vertex ? &vertex_index : NULL,
+ &const_index, &indir_index);
+
+ param = shader_io_get_unique_index(instr->variables[0]->var->data.location);
+ if (instr->variables[0]->var->data.location == VARYING_SLOT_CLIP_DIST0 &&
+ is_compact && const_index > 3) {
+ const_index -= 3;
+ param++;
+ }
+
+ if (!instr->variables[0]->var->data.patch) {
+ stride = unpack_param(ctx, ctx->tcs_out_layout, 13, 8);
+ dw_addr = get_tcs_out_current_patch_offset(ctx);
+ } else {
+ dw_addr = get_tcs_out_current_patch_data_offset(ctx);
+ }
+
+ mark_tess_output(ctx, instr->variables[0]->var->data.patch, param);
+
+ dw_addr = get_dw_address(ctx, dw_addr, param, const_index, is_compact, vertex_index, stride,
+ indir_index);
+ buf_addr = get_tcs_tes_buffer_address_params(ctx, param, const_index, is_compact,
+ vertex_index, indir_index);
+
+ unsigned base = is_compact ? const_index : 0;
+ for (unsigned chan = 0; chan < 8; chan++) {
+ bool is_tess_factor = false;
+ if (!(writemask & (1 << chan)))
+ continue;
+ LLVMValueRef value = llvm_extract_elem(ctx, src, chan);
+
+ lds_store(ctx, dw_addr, value);
+
+ if (instr->variables[0]->var->data.location == VARYING_SLOT_TESS_LEVEL_INNER ||
+ instr->variables[0]->var->data.location == VARYING_SLOT_TESS_LEVEL_OUTER)
+ is_tess_factor = true;
+
+ if (!is_tess_factor && writemask != 0xF)
+ ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, value, 1,
+ buf_addr, ctx->oc_lds,
+ 4 * (base + chan), 1, 0, true, false);
+
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr,
+ ctx->i32one, "");
+ }
+
+ if (writemask == 0xF) {
+ ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, src, 4,
+ buf_addr, ctx->oc_lds,
+ (base * 4), 1, 0, true, false);
+ }
+}
+
+static LLVMValueRef
+load_tes_input(struct nir_to_llvm_context *ctx,
+ const nir_intrinsic_instr *instr)
+{
+ LLVMValueRef buf_addr;
+ LLVMValueRef result;
+ LLVMValueRef vertex_index = NULL;
+ LLVMValueRef indir_index = NULL;
+ unsigned const_index = 0;
+ unsigned param;
+ const bool per_vertex = nir_is_per_vertex_io(instr->variables[0]->var, ctx->stage);
+ const bool is_compact = instr->variables[0]->var->data.compact;
+
+ radv_get_deref_offset(ctx, instr->variables[0],
+ false, NULL, per_vertex ? &vertex_index : NULL,
+ &const_index, &indir_index);
+ param = shader_io_get_unique_index(instr->variables[0]->var->data.location);
+ if (instr->variables[0]->var->data.location == VARYING_SLOT_CLIP_DIST0 &&
+ is_compact && const_index > 3) {
+ const_index -= 3;
+ param++;
+ }
+ buf_addr = get_tcs_tes_buffer_address_params(ctx, param, const_index,
+ is_compact, vertex_index, indir_index);
+
+ result = ac_build_buffer_load(&ctx->ac, ctx->hs_ring_tess_offchip, instr->num_components, NULL,
+ buf_addr, ctx->oc_lds, is_compact ? (4 * const_index) : 0, 1, 0, true, false);
+ result = trim_vector(ctx, result, instr->num_components);
+ result = LLVMBuildBitCast(ctx->builder, result, get_def_type(ctx, &instr->dest.ssa), "");
+ return result;
+}
+
+static LLVMValueRef
+load_gs_input(struct nir_to_llvm_context *ctx,
+ nir_intrinsic_instr *instr)
+{
+ LLVMValueRef indir_index, vtx_offset;
+ unsigned const_index;
+ LLVMValueRef args[9];
+ unsigned param, vtx_offset_param;
+ LLVMValueRef value[4], result;
+ unsigned vertex_index;
+ radv_get_deref_offset(ctx, instr->variables[0],
+ false, &vertex_index, NULL,
+ &const_index, &indir_index);
+ vtx_offset_param = vertex_index;
+ assert(vtx_offset_param < 6);
+ vtx_offset = LLVMBuildMul(ctx->builder, ctx->gs_vtx_offset[vtx_offset_param],
+ LLVMConstInt(ctx->i32, 4, false), "");
+
+ param = shader_io_get_unique_index(instr->variables[0]->var->data.location);
+ for (unsigned i = 0; i < instr->num_components; i++) {
+
+ args[0] = ctx->esgs_ring;
+ args[1] = vtx_offset;
+ args[2] = LLVMConstInt(ctx->i32, (param * 4 + i + const_index) * 256, false);
+ args[3] = ctx->i32zero;
+ args[4] = ctx->i32one; /* OFFEN */
+ args[5] = ctx->i32zero; /* IDXEN */
+ args[6] = ctx->i32one; /* GLC */
+ args[7] = ctx->i32zero; /* SLC */
+ args[8] = ctx->i32zero; /* TFE */
+
+ value[i] = ac_build_intrinsic(&ctx->ac, "llvm.SI.buffer.load.dword.i32.i32",
+ ctx->i32, args, 9,
+ AC_FUNC_ATTR_READONLY |
+ AC_FUNC_ATTR_LEGACY);
+ }
+ result = ac_build_gather_values(&ctx->ac, value, instr->num_components);
+
+ return result;
+}
+
+static LLVMValueRef
+build_gep_for_deref(struct nir_to_llvm_context *ctx,
+ nir_deref_var *deref)
+{
+ struct hash_entry *entry = _mesa_hash_table_search(ctx->vars, deref->var);
+ assert(entry->data);
+ LLVMValueRef val = entry->data;
+ nir_deref *tail = deref->deref.child;
+ while (tail != NULL) {
+ LLVMValueRef offset;
+ switch (tail->deref_type) {
+ case nir_deref_type_array: {
+ nir_deref_array *array = nir_deref_as_array(tail);
+ offset = LLVMConstInt(ctx->i32, array->base_offset, 0);
+ if (array->deref_array_type ==
+ nir_deref_array_type_indirect) {
+ offset = LLVMBuildAdd(ctx->builder, offset,
+ get_src(ctx,
+ array->indirect),
+ "");
+ }
+ break;
+ }
+ case nir_deref_type_struct: {
+ nir_deref_struct *deref_struct =
+ nir_deref_as_struct(tail);
+ offset = LLVMConstInt(ctx->i32,
+ deref_struct->index, 0);
+ break;
+ }
+ default:
+ unreachable("bad deref type");
+ }
+ val = ac_build_gep0(&ctx->ac, val, offset);
+ tail = tail->child;
+ }
+ return val;
+}
+
static LLVMValueRef visit_load_var(struct nir_to_llvm_context *ctx,
nir_intrinsic_instr *instr)
{
- LLVMValueRef values[4];
+ LLVMValueRef values[8];
int idx = instr->variables[0]->var->data.driver_location;
int ve = instr->dest.ssa.num_components;
LLVMValueRef indir_index;
+ LLVMValueRef ret;
unsigned const_index;
+ bool vs_in = ctx->stage == MESA_SHADER_VERTEX &&
+ instr->variables[0]->var->data.mode == nir_var_shader_in;
+ radv_get_deref_offset(ctx, instr->variables[0], vs_in, NULL, NULL,
+ &const_index, &indir_index);
+
+ if (instr->dest.ssa.bit_size == 64)
+ ve *= 2;
+
switch (instr->variables[0]->var->data.mode) {
case nir_var_shader_in:
- radv_get_deref_offset(ctx, &instr->variables[0]->deref,
- ctx->stage == MESA_SHADER_VERTEX,
- &const_index, &indir_index);
+ if (ctx->stage == MESA_SHADER_TESS_CTRL)
+ return load_tcs_input(ctx, instr);
+ if (ctx->stage == MESA_SHADER_TESS_EVAL)
+ return load_tes_input(ctx, instr);
+ if (ctx->stage == MESA_SHADER_GEOMETRY) {
+ return load_gs_input(ctx, instr);
+ }
for (unsigned chan = 0; chan < ve; chan++) {
if (indir_index) {
unsigned count = glsl_count_attribute_slots(
instr->variables[0]->var->type,
ctx->stage == MESA_SHADER_VERTEX);
- LLVMValueRef tmp_vec = build_gather_values_extended(
- ctx, ctx->inputs + idx + chan, count,
+ count -= chan / 4;
+ LLVMValueRef tmp_vec = ac_build_gather_values_extended(
+ &ctx->ac, ctx->inputs + idx + chan, count,
4, false);
values[chan] = LLVMBuildExtractElement(ctx->builder,
@@ -2078,17 +3004,15 @@ static LLVMValueRef visit_load_var(struct nir_to_llvm_context *ctx,
} else
values[chan] = ctx->inputs[idx + chan + const_index * 4];
}
- return to_integer(ctx, build_gather_values(ctx, values, ve));
break;
case nir_var_local:
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
for (unsigned chan = 0; chan < ve; chan++) {
if (indir_index) {
unsigned count = glsl_count_attribute_slots(
instr->variables[0]->var->type, false);
- LLVMValueRef tmp_vec = build_gather_values_extended(
- ctx, ctx->locals + idx + chan, count,
+ count -= chan / 4;
+ LLVMValueRef tmp_vec = ac_build_gather_values_extended(
+ &ctx->ac, ctx->locals + idx + chan, count,
4, true);
values[chan] = LLVMBuildExtractElement(ctx->builder,
@@ -2098,16 +3022,25 @@ static LLVMValueRef visit_load_var(struct nir_to_llvm_context *ctx,
values[chan] = LLVMBuildLoad(ctx->builder, ctx->locals[idx + chan + const_index * 4], "");
}
}
- return to_integer(ctx, build_gather_values(ctx, values, ve));
+ break;
+ case nir_var_shared: {
+ LLVMValueRef address = build_gep_for_deref(ctx,
+ instr->variables[0]);
+ LLVMValueRef val = LLVMBuildLoad(ctx->builder, address, "");
+ return LLVMBuildBitCast(ctx->builder, val,
+ get_def_type(ctx, &instr->dest.ssa),
+ "");
+ }
case nir_var_shader_out:
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
+ if (ctx->stage == MESA_SHADER_TESS_CTRL)
+ return load_tcs_output(ctx, instr);
for (unsigned chan = 0; chan < ve; chan++) {
if (indir_index) {
unsigned count = glsl_count_attribute_slots(
instr->variables[0]->var->type, false);
- LLVMValueRef tmp_vec = build_gather_values_extended(
- ctx, ctx->outputs + idx + chan, count,
+ count -= chan / 4;
+ LLVMValueRef tmp_vec = ac_build_gather_values_extended(
+ &ctx->ac, ctx->outputs + idx + chan, count,
4, true);
values[chan] = LLVMBuildExtractElement(ctx->builder,
@@ -2119,24 +3052,12 @@ static LLVMValueRef visit_load_var(struct nir_to_llvm_context *ctx,
"");
}
}
- return to_integer(ctx, build_gather_values(ctx, values, ve));
- case nir_var_shared: {
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
- LLVMValueRef ptr = get_shared_memory_ptr(ctx, idx, ctx->i32);
- LLVMValueRef derived_ptr;
- LLVMValueRef index = ctx->i32zero;
- if (indir_index)
- index = LLVMBuildAdd(ctx->builder, index, indir_index, "");
- derived_ptr = LLVMBuildGEP(ctx->builder, ptr, &index, 1, "");
-
- return to_integer(ctx, LLVMBuildLoad(ctx->builder, derived_ptr, ""));
break;
- }
default:
- break;
+ unreachable("unhandle variable mode");
}
- return NULL;
+ ret = ac_build_gather_values(&ctx->ac, values, ve);
+ return LLVMBuildBitCast(ctx->builder, ret, get_def_type(ctx, &instr->dest.ssa), "");
}
static void
@@ -2145,34 +3066,50 @@ visit_store_var(struct nir_to_llvm_context *ctx,
{
LLVMValueRef temp_ptr, value;
int idx = instr->variables[0]->var->data.driver_location;
- LLVMValueRef src = to_float(ctx, get_src(ctx, instr->src[0]));
+ LLVMValueRef src = to_float(&ctx->ac, get_src(ctx, instr->src[0]));
int writemask = instr->const_index[0];
LLVMValueRef indir_index;
unsigned const_index;
+ radv_get_deref_offset(ctx, instr->variables[0], false,
+ NULL, NULL, &const_index, &indir_index);
+
+ if (get_elem_bits(&ctx->ac, LLVMTypeOf(src)) == 64) {
+ int old_writemask = writemask;
+
+ src = LLVMBuildBitCast(ctx->builder, src,
+ LLVMVectorType(ctx->f32, get_llvm_num_components(src) * 2),
+ "");
+
+ writemask = 0;
+ for (unsigned chan = 0; chan < 4; chan++) {
+ if (old_writemask & (1 << chan))
+ writemask |= 3u << (2 * chan);
+ }
+ }
+
switch (instr->variables[0]->var->data.mode) {
case nir_var_shader_out:
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
- for (unsigned chan = 0; chan < 4; chan++) {
+
+ if (ctx->stage == MESA_SHADER_TESS_CTRL) {
+ store_tcs_output(ctx, instr, src, writemask);
+ return;
+ }
+
+ for (unsigned chan = 0; chan < 8; chan++) {
int stride = 4;
if (!(writemask & (1 << chan)))
continue;
- if (get_llvm_num_components(src) == 1)
- value = src;
- else
- value = LLVMBuildExtractElement(ctx->builder, src,
- LLVMConstInt(ctx->i32,
- chan, false),
- "");
- if (instr->variables[0]->var->data.location == VARYING_SLOT_CLIP_DIST0 ||
- instr->variables[0]->var->data.location == VARYING_SLOT_CULL_DIST0)
+ value = llvm_extract_elem(ctx, src, chan);
+
+ if (instr->variables[0]->var->data.compact)
stride = 1;
if (indir_index) {
unsigned count = glsl_count_attribute_slots(
instr->variables[0]->var->type, false);
- LLVMValueRef tmp_vec = build_gather_values_extended(
- ctx, ctx->outputs + idx + chan, count,
+ count -= chan / 4;
+ LLVMValueRef tmp_vec = ac_build_gather_values_extended(
+ &ctx->ac, ctx->outputs + idx + chan, count,
stride, true);
if (get_llvm_num_components(tmp_vec) > 1) {
@@ -2191,22 +3128,17 @@ visit_store_var(struct nir_to_llvm_context *ctx,
}
break;
case nir_var_local:
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
- for (unsigned chan = 0; chan < 4; chan++) {
+ for (unsigned chan = 0; chan < 8; chan++) {
if (!(writemask & (1 << chan)))
continue;
- if (get_llvm_num_components(src) == 1)
- value = src;
- else
- value = LLVMBuildExtractElement(ctx->builder, src,
- LLVMConstInt(ctx->i32, chan, false), "");
+ value = llvm_extract_elem(ctx, src, chan);
if (indir_index) {
unsigned count = glsl_count_attribute_slots(
instr->variables[0]->var->type, false);
- LLVMValueRef tmp_vec = build_gather_values_extended(
- ctx, ctx->locals + idx + chan, count,
+ count -= chan / 4;
+ LLVMValueRef tmp_vec = ac_build_gather_values_extended(
+ &ctx->ac, ctx->locals + idx + chan, count,
4, true);
tmp_vec = LLVMBuildInsertElement(ctx->builder, tmp_vec,
@@ -2221,19 +3153,33 @@ visit_store_var(struct nir_to_llvm_context *ctx,
}
break;
case nir_var_shared: {
- LLVMValueRef ptr;
- radv_get_deref_offset(ctx, &instr->variables[0]->deref, false,
- &const_index, &indir_index);
-
- ptr = get_shared_memory_ptr(ctx, idx, ctx->i32);
- LLVMValueRef index = ctx->i32zero;
- LLVMValueRef derived_ptr;
-
- if (indir_index)
- index = LLVMBuildAdd(ctx->builder, index, indir_index, "");
- derived_ptr = LLVMBuildGEP(ctx->builder, ptr, &index, 1, "");
- LLVMBuildStore(ctx->builder,
- to_integer(ctx, src), derived_ptr);
+ int writemask = instr->const_index[0];
+ LLVMValueRef address = build_gep_for_deref(ctx,
+ instr->variables[0]);
+ LLVMValueRef val = get_src(ctx, instr->src[0]);
+ unsigned components =
+ glsl_get_vector_elements(
+ nir_deref_tail(&instr->variables[0]->deref)->type);
+ if (writemask == (1 << components) - 1) {
+ val = LLVMBuildBitCast(
+ ctx->builder, val,
+ LLVMGetElementType(LLVMTypeOf(address)), "");
+ LLVMBuildStore(ctx->builder, val, address);
+ } else {
+ for (unsigned chan = 0; chan < 4; chan++) {
+ if (!(writemask & (1 << chan)))
+ continue;
+ LLVMValueRef ptr =
+ LLVMBuildStructGEP(ctx->builder,
+ address, chan, "");
+ LLVMValueRef src = llvm_extract_elem(ctx, val,
+ chan);
+ src = LLVMBuildBitCast(
+ ctx->builder, src,
+ LLVMGetElementType(LLVMTypeOf(ptr)), "");
+ LLVMBuildStore(ctx->builder, src, ptr);
+ }
+ }
break;
}
default:
@@ -2250,20 +3196,103 @@ static int image_type_to_components_count(enum glsl_sampler_dim dim, bool array)
return array ? 2 : 1;
case GLSL_SAMPLER_DIM_2D:
return array ? 3 : 2;
+ case GLSL_SAMPLER_DIM_MS:
+ return array ? 4 : 3;
case GLSL_SAMPLER_DIM_3D:
case GLSL_SAMPLER_DIM_CUBE:
return 3;
case GLSL_SAMPLER_DIM_RECT:
case GLSL_SAMPLER_DIM_SUBPASS:
return 2;
+ case GLSL_SAMPLER_DIM_SUBPASS_MS:
+ return 3;
default:
break;
}
return 0;
}
+
+
+/* Adjust the sample index according to FMASK.
+ *
+ * For uncompressed MSAA surfaces, FMASK should return 0x76543210,
+ * which is the identity mapping. Each nibble says which physical sample
+ * should be fetched to get that sample.
+ *
+ * For example, 0x11111100 means there are only 2 samples stored and
+ * the second sample covers 3/4 of the pixel. When reading samples 0
+ * and 1, return physical sample 0 (determined by the first two 0s
+ * in FMASK), otherwise return physical sample 1.
+ *
+ * The sample index should be adjusted as follows:
+ * sample_index = (fmask >> (sample_index * 4)) & 0xF;
+ */
+static LLVMValueRef adjust_sample_index_using_fmask(struct nir_to_llvm_context *ctx,
+ LLVMValueRef coord_x, LLVMValueRef coord_y,
+ LLVMValueRef coord_z,
+ LLVMValueRef sample_index,
+ LLVMValueRef fmask_desc_ptr)
+{
+ LLVMValueRef fmask_load_address[4];
+ LLVMValueRef res;
+
+ fmask_load_address[0] = coord_x;
+ fmask_load_address[1] = coord_y;
+ if (coord_z) {
+ fmask_load_address[2] = coord_z;
+ fmask_load_address[3] = LLVMGetUndef(ctx->i32);
+ }
+
+ struct ac_image_args args = {0};
+
+ args.opcode = ac_image_load;
+ args.da = coord_z ? true : false;
+ args.resource = fmask_desc_ptr;
+ args.dmask = 0xf;
+ args.addr = ac_build_gather_values(&ctx->ac, fmask_load_address, coord_z ? 4 : 2);
+
+ res = ac_build_image_opcode(&ctx->ac, &args);
+
+ res = to_integer(&ctx->ac, res);
+ LLVMValueRef four = LLVMConstInt(ctx->i32, 4, false);
+ LLVMValueRef F = LLVMConstInt(ctx->i32, 0xf, false);
+
+ LLVMValueRef fmask = LLVMBuildExtractElement(ctx->builder,
+ res,
+ ctx->i32zero, "");
+
+ LLVMValueRef sample_index4 =
+ LLVMBuildMul(ctx->builder, sample_index, four, "");
+ LLVMValueRef shifted_fmask =
+ LLVMBuildLShr(ctx->builder, fmask, sample_index4, "");
+ LLVMValueRef final_sample =
+ LLVMBuildAnd(ctx->builder, shifted_fmask, F, "");
+
+ /* Don't rewrite the sample index if WORD1.DATA_FORMAT of the FMASK
+ * resource descriptor is 0 (invalid),
+ */
+ LLVMValueRef fmask_desc =
+ LLVMBuildBitCast(ctx->builder, fmask_desc_ptr,
+ ctx->v8i32, "");
+
+ LLVMValueRef fmask_word1 =
+ LLVMBuildExtractElement(ctx->builder, fmask_desc,
+ ctx->i32one, "");
+
+ LLVMValueRef word1_is_nonzero =
+ LLVMBuildICmp(ctx->builder, LLVMIntNE,
+ fmask_word1, ctx->i32zero, "");
+
+ /* Replace the MSAA sample index. */
+ sample_index =
+ LLVMBuildSelect(ctx->builder, word1_is_nonzero,
+ final_sample, sample_index, "");
+ return sample_index;
+}
+
static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr, bool add_frag_pos)
+ const nir_intrinsic_instr *instr)
{
const struct glsl_type *type = instr->variables[0]->var->type;
if(instr->variables[0]->deref.child)
@@ -2276,97 +3305,81 @@ static LLVMValueRef get_image_coords(struct nir_to_llvm_context *ctx,
LLVMConstInt(ctx->i32, 2, false), LLVMConstInt(ctx->i32, 3, false),
};
LLVMValueRef res;
+ LLVMValueRef sample_index = llvm_extract_elem(ctx, get_src(ctx, instr->src[1]), 0);
+
int count;
- count = image_type_to_components_count(glsl_get_sampler_dim(type),
- glsl_sampler_type_is_array(type));
+ enum glsl_sampler_dim dim = glsl_get_sampler_dim(type);
+ bool is_array = glsl_sampler_type_is_array(type);
+ bool add_frag_pos = (dim == GLSL_SAMPLER_DIM_SUBPASS ||
+ dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
+ bool is_ms = (dim == GLSL_SAMPLER_DIM_MS ||
+ dim == GLSL_SAMPLER_DIM_SUBPASS_MS);
+ bool gfx9_1d = ctx->options->chip_class >= GFX9 && dim == GLSL_SAMPLER_DIM_1D;
+ count = image_type_to_components_count(dim, is_array);
+
+ if (is_ms) {
+ LLVMValueRef fmask_load_address[3];
+ int chan;
- if (count == 1) {
+ fmask_load_address[0] = LLVMBuildExtractElement(ctx->builder, src0, masks[0], "");
+ fmask_load_address[1] = LLVMBuildExtractElement(ctx->builder, src0, masks[1], "");
+ if (is_array)
+ fmask_load_address[2] = LLVMBuildExtractElement(ctx->builder, src0, masks[2], "");
+ else
+ fmask_load_address[2] = NULL;
+ if (add_frag_pos) {
+ for (chan = 0; chan < 2; ++chan)
+ fmask_load_address[chan] = LLVMBuildAdd(ctx->builder, fmask_load_address[chan], LLVMBuildFPToUI(ctx->builder, ctx->frag_pos[chan], ctx->i32, ""), "");
+ }
+ sample_index = adjust_sample_index_using_fmask(ctx,
+ fmask_load_address[0],
+ fmask_load_address[1],
+ fmask_load_address[2],
+ sample_index,
+ get_sampler_desc(ctx, instr->variables[0], DESC_FMASK));
+ }
+ if (count == 1 && !gfx9_1d) {
if (instr->src[0].ssa->num_components)
res = LLVMBuildExtractElement(ctx->builder, src0, masks[0], "");
else
res = src0;
} else {
int chan;
+ if (is_ms)
+ count--;
for (chan = 0; chan < count; ++chan) {
- coords[chan] = LLVMBuildExtractElement(ctx->builder, src0, masks[chan], "");
+ coords[chan] = llvm_extract_elem(ctx, src0, chan);
}
-
if (add_frag_pos) {
for (chan = 0; chan < count; ++chan)
coords[chan] = LLVMBuildAdd(ctx->builder, coords[chan], LLVMBuildFPToUI(ctx->builder, ctx->frag_pos[chan], ctx->i32, ""), "");
}
+
+ if (gfx9_1d) {
+ if (is_array) {
+ coords[2] = coords[1];
+ coords[1] = ctx->ac.i32_0;
+ } else
+ coords[1] = ctx->ac.i32_0;
+ count++;
+ }
+
+ if (is_ms) {
+ coords[count] = sample_index;
+ count++;
+ }
+
if (count == 3) {
coords[3] = LLVMGetUndef(ctx->i32);
count = 4;
}
- res = build_gather_values(ctx, coords, count);
+ res = ac_build_gather_values(&ctx->ac, coords, count);
}
return res;
}
-static void build_type_name_for_intr(
- LLVMTypeRef type,
- char *buf, unsigned bufsize)
-{
- LLVMTypeRef elem_type = type;
-
- assert(bufsize >= 8);
-
- if (LLVMGetTypeKind(type) == LLVMVectorTypeKind) {
- int ret = snprintf(buf, bufsize, "v%u",
- LLVMGetVectorSize(type));
- if (ret < 0) {
- char *type_name = LLVMPrintTypeToString(type);
- fprintf(stderr, "Error building type name for: %s\n",
- type_name);
- return;
- }
- elem_type = LLVMGetElementType(type);
- buf += ret;
- bufsize -= ret;
- }
- switch (LLVMGetTypeKind(elem_type)) {
- default: break;
- case LLVMIntegerTypeKind:
- snprintf(buf, bufsize, "i%d", LLVMGetIntTypeWidth(elem_type));
- break;
- case LLVMFloatTypeKind:
- snprintf(buf, bufsize, "f32");
- break;
- case LLVMDoubleTypeKind:
- snprintf(buf, bufsize, "f64");
- break;
- }
-}
-
-static void get_image_intr_name(const char *base_name,
- LLVMTypeRef data_type,
- LLVMTypeRef coords_type,
- LLVMTypeRef rsrc_type,
- char *out_name, unsigned out_len)
-{
- char coords_type_name[8];
-
- build_type_name_for_intr(coords_type, coords_type_name,
- sizeof(coords_type_name));
-
- if (HAVE_LLVM <= 0x0309) {
- snprintf(out_name, out_len, "%s.%s", base_name, coords_type_name);
- } else {
- char data_type_name[8];
- char rsrc_type_name[8];
-
- build_type_name_for_intr(data_type, data_type_name,
- sizeof(data_type_name));
- build_type_name_for_intr(rsrc_type, rsrc_type_name,
- sizeof(rsrc_type_name));
- snprintf(out_name, out_len, "%s.%s.%s.%s", base_name,
- data_type_name, coords_type_name, rsrc_type_name);
- }
-}
-
static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef params[7];
LLVMValueRef res;
@@ -2382,47 +3395,46 @@ static LLVMValueRef visit_image_load(struct nir_to_llvm_context *ctx,
params[1] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
params[2] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
- params[3] = LLVMConstInt(ctx->i1, 0, false); /* glc */
- params[4] = LLVMConstInt(ctx->i1, 0, false); /* slc */
- res = emit_llvm_intrinsic(ctx, "llvm.amdgcn.buffer.load.format.v4f32", ctx->v4f32,
- params, 5, 0);
+ params[3] = ctx->i1false; /* glc */
+ params[4] = ctx->i1false; /* slc */
+ res = ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.load.format.v4f32", ctx->v4f32,
+ params, 5, 0);
res = trim_vector(ctx, res, instr->dest.ssa.num_components);
- res = to_integer(ctx, res);
+ res = to_integer(&ctx->ac, res);
} else {
bool is_da = glsl_sampler_type_is_array(type) ||
glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
- bool add_frag_pos = glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_SUBPASS;
- LLVMValueRef da = is_da ? ctx->i32one : ctx->i32zero;
- LLVMValueRef glc = LLVMConstInt(ctx->i1, 0, false);
- LLVMValueRef slc = LLVMConstInt(ctx->i1, 0, false);
+ LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
+ LLVMValueRef glc = ctx->i1false;
+ LLVMValueRef slc = ctx->i1false;
- params[0] = get_image_coords(ctx, instr, add_frag_pos);
+ params[0] = get_image_coords(ctx, instr);
params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
params[2] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
if (HAVE_LLVM <= 0x0309) {
- params[3] = LLVMConstInt(ctx->i1, 0, false); /* r128 */
+ params[3] = ctx->i1false; /* r128 */
params[4] = da;
params[5] = glc;
params[6] = slc;
} else {
- LLVMValueRef lwe = LLVMConstInt(ctx->i1, 0, false);
+ LLVMValueRef lwe = ctx->i1false;
params[3] = glc;
params[4] = slc;
params[5] = lwe;
params[6] = da;
}
- get_image_intr_name("llvm.amdgcn.image.load",
- ctx->v4f32, /* vdata */
- LLVMTypeOf(params[0]), /* coords */
- LLVMTypeOf(params[1]), /* rsrc */
- intrinsic_name, sizeof(intrinsic_name));
+ ac_get_image_intr_name("llvm.amdgcn.image.load",
+ ctx->v4f32, /* vdata */
+ LLVMTypeOf(params[0]), /* coords */
+ LLVMTypeOf(params[1]), /* rsrc */
+ intrinsic_name, sizeof(intrinsic_name));
- res = emit_llvm_intrinsic(ctx, intrinsic_name, ctx->v4f32,
- params, 7, LLVMReadOnlyAttribute);
+ res = ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->v4f32,
+ params, 7, AC_FUNC_ATTR_READONLY);
}
- return to_integer(ctx, res);
+ return to_integer(&ctx->ac, res);
}
static void visit_image_store(struct nir_to_llvm_context *ctx,
@@ -2431,107 +3443,85 @@ static void visit_image_store(struct nir_to_llvm_context *ctx,
LLVMValueRef params[8];
char intrinsic_name[64];
const nir_variable *var = instr->variables[0]->var;
- LLVMValueRef i1false = LLVMConstInt(ctx->i1, 0, 0);
- LLVMValueRef i1true = LLVMConstInt(ctx->i1, 1, 0);
const struct glsl_type *type = glsl_without_array(var->type);
-
+ LLVMValueRef glc = ctx->i1false;
+ bool force_glc = ctx->options->chip_class == SI;
+ if (force_glc)
+ glc = ctx->i1true;
if (ctx->stage == MESA_SHADER_FRAGMENT)
ctx->shader_info->fs.writes_memory = true;
if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) {
- params[0] = to_float(ctx, get_src(ctx, instr->src[2])); /* data */
+ params[0] = to_float(&ctx->ac, get_src(ctx, instr->src[2])); /* data */
params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER);
params[2] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
params[3] = LLVMConstInt(ctx->i32, 0, false); /* voffset */
- params[4] = i1false; /* glc */
- params[5] = i1false; /* slc */
- emit_llvm_intrinsic(ctx, "llvm.amdgcn.buffer.store.format.v4f32", ctx->voidt,
- params, 6, 0);
+ params[4] = glc; /* glc */
+ params[5] = ctx->i1false; /* slc */
+ ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.buffer.store.format.v4f32", ctx->voidt,
+ params, 6, 0);
} else {
bool is_da = glsl_sampler_type_is_array(type) ||
glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
- LLVMValueRef da = is_da ? i1true : i1false;
- LLVMValueRef glc = i1false;
- LLVMValueRef slc = i1false;
+ LLVMValueRef da = is_da ? ctx->i1true : ctx->i1false;
+ LLVMValueRef slc = ctx->i1false;
- params[0] = to_float(ctx, get_src(ctx, instr->src[2]));
- params[1] = get_image_coords(ctx, instr, false); /* coords */
+ params[0] = to_float(&ctx->ac, get_src(ctx, instr->src[2]));
+ params[1] = get_image_coords(ctx, instr); /* coords */
params[2] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
params[3] = LLVMConstInt(ctx->i32, 15, false); /* dmask */
if (HAVE_LLVM <= 0x0309) {
- params[4] = i1false; /* r128 */
+ params[4] = ctx->i1false; /* r128 */
params[5] = da;
params[6] = glc;
params[7] = slc;
} else {
- LLVMValueRef lwe = i1false;
+ LLVMValueRef lwe = ctx->i1false;
params[4] = glc;
params[5] = slc;
params[6] = lwe;
params[7] = da;
}
- get_image_intr_name("llvm.amdgcn.image.store",
- LLVMTypeOf(params[0]), /* vdata */
- LLVMTypeOf(params[1]), /* coords */
- LLVMTypeOf(params[2]), /* rsrc */
- intrinsic_name, sizeof(intrinsic_name));
+ ac_get_image_intr_name("llvm.amdgcn.image.store",
+ LLVMTypeOf(params[0]), /* vdata */
+ LLVMTypeOf(params[1]), /* coords */
+ LLVMTypeOf(params[2]), /* rsrc */
+ intrinsic_name, sizeof(intrinsic_name));
- emit_llvm_intrinsic(ctx, intrinsic_name, ctx->voidt,
- params, 8, 0);
+ ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->voidt,
+ params, 8, 0);
}
}
static LLVMValueRef visit_image_atomic(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
- LLVMValueRef params[6];
+ LLVMValueRef params[7];
int param_count = 0;
const nir_variable *var = instr->variables[0]->var;
- LLVMValueRef i1false = LLVMConstInt(ctx->i1, 0, 0);
- LLVMValueRef i1true = LLVMConstInt(ctx->i1, 1, 0);
- const char *base_name = "llvm.amdgcn.image.atomic";
+
const char *atomic_name;
- LLVMValueRef coords;
- char intrinsic_name[32], coords_type[8];
+ char intrinsic_name[41];
const struct glsl_type *type = glsl_without_array(var->type);
+ MAYBE_UNUSED int length;
if (ctx->stage == MESA_SHADER_FRAGMENT)
ctx->shader_info->fs.writes_memory = true;
- params[param_count++] = get_src(ctx, instr->src[2]);
- if (instr->intrinsic == nir_intrinsic_image_atomic_comp_swap)
- params[param_count++] = get_src(ctx, instr->src[3]);
-
- if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) {
- params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER);
- coords = params[param_count++] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
- LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
- params[param_count++] = ctx->i32zero; /* voffset */
- params[param_count++] = i1false; /* glc */
- params[param_count++] = i1false; /* slc */
- } else {
- bool da = glsl_sampler_type_is_array(type) ||
- glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
-
- coords = params[param_count++] = get_image_coords(ctx, instr, false);
- params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
- params[param_count++] = i1false; /* r128 */
- params[param_count++] = da ? i1true : i1false; /* da */
- params[param_count++] = i1false; /* slc */
- }
+ bool is_unsigned = glsl_get_sampler_result_type(type) == GLSL_TYPE_UINT;
switch (instr->intrinsic) {
case nir_intrinsic_image_atomic_add:
atomic_name = "add";
break;
case nir_intrinsic_image_atomic_min:
- atomic_name = "smin";
+ atomic_name = is_unsigned ? "umin" : "smin";
break;
case nir_intrinsic_image_atomic_max:
- atomic_name = "smax";
+ atomic_name = is_unsigned ? "umax" : "smax";
break;
case nir_intrinsic_image_atomic_and:
atomic_name = "and";
@@ -2551,19 +3541,47 @@ static LLVMValueRef visit_image_atomic(struct nir_to_llvm_context *ctx,
default:
abort();
}
- build_int_type_name(LLVMTypeOf(coords),
- coords_type, sizeof(coords_type));
- snprintf(intrinsic_name, sizeof(intrinsic_name),
- "%s.%s.%s", base_name, atomic_name, coords_type);
- return emit_llvm_intrinsic(ctx, intrinsic_name, ctx->i32, params, param_count, 0);
+ if (instr->intrinsic == nir_intrinsic_image_atomic_comp_swap)
+ params[param_count++] = get_src(ctx, instr->src[3]);
+ params[param_count++] = get_src(ctx, instr->src[2]);
+
+ if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF) {
+ params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER);
+ params[param_count++] = LLVMBuildExtractElement(ctx->builder, get_src(ctx, instr->src[0]),
+ LLVMConstInt(ctx->i32, 0, false), ""); /* vindex */
+ params[param_count++] = ctx->i32zero; /* voffset */
+ params[param_count++] = ctx->i1false; /* slc */
+
+ length = snprintf(intrinsic_name, sizeof(intrinsic_name),
+ "llvm.amdgcn.buffer.atomic.%s", atomic_name);
+ } else {
+ char coords_type[8];
+
+ bool da = glsl_sampler_type_is_array(type) ||
+ glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE;
+
+ LLVMValueRef coords = params[param_count++] = get_image_coords(ctx, instr);
+ params[param_count++] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
+ params[param_count++] = ctx->i1false; /* r128 */
+ params[param_count++] = da ? ctx->i1true : ctx->i1false; /* da */
+ params[param_count++] = ctx->i1false; /* slc */
+
+ build_int_type_name(LLVMTypeOf(coords),
+ coords_type, sizeof(coords_type));
+
+ length = snprintf(intrinsic_name, sizeof(intrinsic_name),
+ "llvm.amdgcn.image.atomic.%s.%s", atomic_name, coords_type);
+ }
+
+ assert(length < sizeof(intrinsic_name));
+ return ac_build_intrinsic(&ctx->ac, intrinsic_name, ctx->i32, params, param_count, 0);
}
static LLVMValueRef visit_image_size(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef res;
- LLVMValueRef params[10];
const nir_variable *var = instr->variables[0]->var;
const struct glsl_type *type = instr->variables[0]->var->type;
bool da = glsl_sampler_type_is_array(var->type) ||
@@ -2573,49 +3591,68 @@ static LLVMValueRef visit_image_size(struct nir_to_llvm_context *ctx,
if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_BUF)
return get_buffer_size(ctx, get_sampler_desc(ctx, instr->variables[0], DESC_BUFFER), true);
- params[0] = ctx->i32zero;
- params[1] = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
- params[2] = LLVMConstInt(ctx->i32, 15, false);
- params[3] = ctx->i32zero;
- params[4] = ctx->i32zero;
- params[5] = da ? ctx->i32one : ctx->i32zero;
- params[6] = ctx->i32zero;
- params[7] = ctx->i32zero;
- params[8] = ctx->i32zero;
- params[9] = ctx->i32zero;
-
- res = emit_llvm_intrinsic(ctx, "llvm.SI.getresinfo.i32", ctx->v4i32,
- params, 10, LLVMReadNoneAttribute);
+
+ struct ac_image_args args = { 0 };
+
+ args.da = da;
+ args.dmask = 0xf;
+ args.resource = get_sampler_desc(ctx, instr->variables[0], DESC_IMAGE);
+ args.opcode = ac_image_get_resinfo;
+ args.addr = ctx->i32zero;
+
+ res = ac_build_image_opcode(&ctx->ac, &args);
+
+ LLVMValueRef two = LLVMConstInt(ctx->i32, 2, false);
if (glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_CUBE &&
glsl_sampler_type_is_array(type)) {
- LLVMValueRef two = LLVMConstInt(ctx->i32, 2, false);
LLVMValueRef six = LLVMConstInt(ctx->i32, 6, false);
LLVMValueRef z = LLVMBuildExtractElement(ctx->builder, res, two, "");
z = LLVMBuildSDiv(ctx->builder, z, six, "");
res = LLVMBuildInsertElement(ctx->builder, res, z, two, "");
}
+ if (ctx->options->chip_class >= GFX9 &&
+ glsl_get_sampler_dim(type) == GLSL_SAMPLER_DIM_1D &&
+ glsl_sampler_type_is_array(type)) {
+ LLVMValueRef layers = LLVMBuildExtractElement(ctx->builder, res, two, "");
+ res = LLVMBuildInsertElement(ctx->builder, res, layers,
+ ctx->ac.i32_1, "");
+
+ }
return res;
}
-static void emit_waitcnt(struct nir_to_llvm_context *ctx)
+#define NOOP_WAITCNT 0xf7f
+#define LGKM_CNT 0x07f
+#define VM_CNT 0xf70
+
+static void emit_waitcnt(struct nir_to_llvm_context *ctx,
+ unsigned simm16)
{
LLVMValueRef args[1] = {
- LLVMConstInt(ctx->i32, 0xf70, false),
+ LLVMConstInt(ctx->i32, simm16, false),
};
- emit_llvm_intrinsic(ctx, "llvm.amdgcn.s.waitcnt",
- ctx->voidt, args, 1, 0);
+ ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.s.waitcnt",
+ ctx->voidt, args, 1, 0);
}
static void emit_barrier(struct nir_to_llvm_context *ctx)
{
- // TODO tess
- emit_llvm_intrinsic(ctx, "llvm.amdgcn.s.barrier",
- ctx->voidt, NULL, 0, 0);
+ /* SI only (thanks to a hw bug workaround):
+ * The real barrier instruction isn’t needed, because an entire patch
+ * always fits into a single wave.
+ */
+ if (ctx->options->chip_class == SI &&
+ ctx->stage == MESA_SHADER_TESS_CTRL) {
+ emit_waitcnt(ctx, LGKM_CNT & VM_CNT);
+ return;
+ }
+ ac_build_intrinsic(&ctx->ac, "llvm.amdgcn.s.barrier",
+ ctx->voidt, NULL, 0, AC_FUNC_ATTR_CONVERGENT);
}
static void emit_discard_if(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef cond;
ctx->shader_info->fs.can_discard = true;
@@ -2627,16 +3664,14 @@ static void emit_discard_if(struct nir_to_llvm_context *ctx,
cond = LLVMBuildSelect(ctx->builder, cond,
LLVMConstReal(ctx->f32, -1.0f),
ctx->f32zero, "");
- emit_llvm_intrinsic(ctx, "llvm.AMDGPU.kill",
- LLVMVoidTypeInContext(ctx->context),
- &cond, 1, 0);
+ ac_build_kill(&ctx->ac, cond);
}
static LLVMValueRef
visit_load_local_invocation_index(struct nir_to_llvm_context *ctx)
{
LLVMValueRef result;
- LLVMValueRef thread_id = get_thread_id(ctx);
+ LLVMValueRef thread_id = ac_get_thread_id(&ctx->ac);
result = LLVMBuildAnd(ctx->builder, ctx->tg_size,
LLVMConstInt(ctx->i32, 0xfc0, false), "");
@@ -2644,12 +3679,11 @@ visit_load_local_invocation_index(struct nir_to_llvm_context *ctx)
}
static LLVMValueRef visit_var_atomic(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef ptr, result;
- int idx = instr->variables[0]->var->data.driver_location;
LLVMValueRef src = get_src(ctx, instr->src[0]);
- ptr = get_shared_memory_ptr(ctx, idx, ctx->i32);
+ ptr = build_gep_for_deref(ctx, instr->variables[0]);
if (instr->intrinsic == nir_intrinsic_var_atomic_comp_swap) {
LLVMValueRef src1 = get_src(ctx, instr->src[1]);
@@ -2692,7 +3726,7 @@ static LLVMValueRef visit_var_atomic(struct nir_to_llvm_context *ctx,
return NULL;
}
- result = LLVMBuildAtomicRMW(ctx->builder, op, ptr, to_integer(ctx, src),
+ result = LLVMBuildAtomicRMW(ctx->builder, op, ptr, to_integer(&ctx->ac, src),
LLVMAtomicOrderingSequentiallyConsistent,
false);
}
@@ -2734,26 +3768,35 @@ static LLVMValueRef lookup_interp_param(struct nir_to_llvm_context *ctx,
static LLVMValueRef load_sample_position(struct nir_to_llvm_context *ctx,
LLVMValueRef sample_id)
{
- /* offset = sample_id * 8 (8 = 2 floats containing samplepos.xy) */
- LLVMValueRef offset0 = LLVMBuildMul(ctx->builder, sample_id, LLVMConstInt(ctx->i32, 8, false), "");
- LLVMValueRef offset1 = LLVMBuildAdd(ctx->builder, offset0, LLVMConstInt(ctx->i32, 4, false), "");
- LLVMValueRef result[2];
+ LLVMValueRef result;
+ LLVMValueRef ptr = ac_build_gep0(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_PS_SAMPLE_POSITIONS, false));
+
+ ptr = LLVMBuildBitCast(ctx->builder, ptr,
+ const_array(ctx->v2f32, 64), "");
+
+ sample_id = LLVMBuildAdd(ctx->builder, sample_id, ctx->sample_pos_offset, "");
+ result = ac_build_indexed_load(&ctx->ac, ptr, sample_id, false);
- result[0] = build_indexed_load_const(ctx, ctx->sample_positions, offset0);
- result[1] = build_indexed_load_const(ctx, ctx->sample_positions, offset1);
+ return result;
+}
+
+static LLVMValueRef load_sample_pos(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef values[2];
- return build_gather_values(ctx, result, 2);
+ values[0] = emit_ffract(&ctx->ac, ctx->frag_pos[0]);
+ values[1] = emit_ffract(&ctx->ac, ctx->frag_pos[1]);
+ return ac_build_gather_values(&ctx->ac, values, 2);
}
static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
- nir_intrinsic_instr *instr)
+ const nir_intrinsic_instr *instr)
{
LLVMValueRef result[2];
LLVMValueRef interp_param, attr_number;
unsigned location;
unsigned chan;
LLVMValueRef src_c0, src_c1;
- const char *intr_name;
LLVMValueRef src0;
int input_index = instr->variables[0]->var->data.location - VARYING_SLOT_VAR0;
switch (instr->intrinsic) {
@@ -2762,7 +3805,7 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
break;
case nir_intrinsic_interp_var_at_sample:
case nir_intrinsic_interp_var_at_offset:
- location = INTERP_SAMPLE;
+ location = INTERP_CENTER;
src0 = get_src(ctx, instr->src[0]);
break;
default:
@@ -2770,8 +3813,8 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
}
if (instr->intrinsic == nir_intrinsic_interp_var_at_offset) {
- src_c0 = to_float(ctx, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, ""));
- src_c1 = to_float(ctx, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, ""));
+ src_c0 = to_float(&ctx->ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32zero, ""));
+ src_c1 = to_float(&ctx->ac, LLVMBuildExtractElement(ctx->builder, src0, ctx->i32one, ""));
} else if (instr->intrinsic == nir_intrinsic_interp_var_at_sample) {
LLVMValueRef sample_position;
LLVMValueRef halfval = LLVMConstReal(ctx->f32, 0.5f);
@@ -2787,7 +3830,7 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
interp_param = lookup_interp_param(ctx, instr->variables[0]->var->data.interpolation, location);
attr_number = LLVMConstInt(ctx->i32, input_index, false);
- if (location == INTERP_SAMPLE) {
+ if (location == INTERP_SAMPLE || location == INTERP_CENTER) {
LLVMValueRef ij_out[2];
LLVMValueRef ddxy_out = emit_ddxy_interp(ctx, interp_param);
@@ -2822,23 +3865,127 @@ static LLVMValueRef visit_interp(struct nir_to_llvm_context *ctx,
ij_out[i] = LLVMBuildBitCast(ctx->builder,
temp2, ctx->i32, "");
}
- interp_param = build_gather_values(ctx, ij_out, 2);
+ interp_param = ac_build_gather_values(&ctx->ac, ij_out, 2);
}
- intr_name = interp_param ? "llvm.SI.fs.interp" : "llvm.SI.fs.constant";
+
for (chan = 0; chan < 2; chan++) {
- LLVMValueRef args[4];
LLVMValueRef llvm_chan = LLVMConstInt(ctx->i32, chan, false);
- args[0] = llvm_chan;
- args[1] = attr_number;
- args[2] = ctx->prim_mask;
- args[3] = interp_param;
- result[chan] = emit_llvm_intrinsic(ctx, intr_name,
- ctx->f32, args, args[3] ? 4 : 3,
- LLVMReadNoneAttribute);
+ if (interp_param) {
+ interp_param = LLVMBuildBitCast(ctx->builder,
+ interp_param, LLVMVectorType(ctx->f32, 2), "");
+ LLVMValueRef i = LLVMBuildExtractElement(
+ ctx->builder, interp_param, ctx->i32zero, "");
+ LLVMValueRef j = LLVMBuildExtractElement(
+ ctx->builder, interp_param, ctx->i32one, "");
+
+ result[chan] = ac_build_fs_interp(&ctx->ac,
+ llvm_chan, attr_number,
+ ctx->prim_mask, i, j);
+ } else {
+ result[chan] = ac_build_fs_interp_mov(&ctx->ac,
+ LLVMConstInt(ctx->i32, 2, false),
+ llvm_chan, attr_number,
+ ctx->prim_mask);
+ }
+ }
+ return ac_build_gather_values(&ctx->ac, result, 2);
+}
+
+static void
+visit_emit_vertex(struct nir_to_llvm_context *ctx,
+ const nir_intrinsic_instr *instr)
+{
+ LLVMValueRef gs_next_vertex;
+ LLVMValueRef can_emit, kill;
+ int idx;
+
+ assert(instr->const_index[0] == 0);
+ /* Write vertex attribute values to GSVS ring */
+ gs_next_vertex = LLVMBuildLoad(ctx->builder,
+ ctx->gs_next_vertex,
+ "");
+
+ /* If this thread has already emitted the declared maximum number of
+ * vertices, kill it: excessive vertex emissions are not supposed to
+ * have any effect, and GS threads have no externally observable
+ * effects other than emitting vertices.
+ */
+ can_emit = LLVMBuildICmp(ctx->builder, LLVMIntULT, gs_next_vertex,
+ LLVMConstInt(ctx->i32, ctx->gs_max_out_vertices, false), "");
+
+ kill = LLVMBuildSelect(ctx->builder, can_emit,
+ LLVMConstReal(ctx->f32, 1.0f),
+ LLVMConstReal(ctx->f32, -1.0f), "");
+ ac_build_kill(&ctx->ac, kill);
+
+ /* loop num outputs */
+ idx = 0;
+ for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
+ LLVMValueRef *out_ptr = &ctx->outputs[i * 4];
+ int length = 4;
+ int slot = idx;
+ int slot_inc = 1;
+
+ if (!(ctx->output_mask & (1ull << i)))
+ continue;
+
+ if (i == VARYING_SLOT_CLIP_DIST0) {
+ /* pack clip and cull into a single set of slots */
+ length = ctx->num_output_clips + ctx->num_output_culls;
+ if (length > 4)
+ slot_inc = 2;
+ }
+ for (unsigned j = 0; j < length; j++) {
+ LLVMValueRef out_val = LLVMBuildLoad(ctx->builder,
+ out_ptr[j], "");
+ LLVMValueRef voffset = LLVMConstInt(ctx->i32, (slot * 4 + j) * ctx->gs_max_out_vertices, false);
+ voffset = LLVMBuildAdd(ctx->builder, voffset, gs_next_vertex, "");
+ voffset = LLVMBuildMul(ctx->builder, voffset, LLVMConstInt(ctx->i32, 4, false), "");
+
+ out_val = LLVMBuildBitCast(ctx->builder, out_val, ctx->i32, "");
+
+ ac_build_buffer_store_dword(&ctx->ac, ctx->gsvs_ring,
+ out_val, 1,
+ voffset, ctx->gs2vs_offset, 0,
+ 1, 1, true, true);
+ }
+ idx += slot_inc;
}
- return build_gather_values(ctx, result, 2);
+
+ gs_next_vertex = LLVMBuildAdd(ctx->builder, gs_next_vertex,
+ ctx->i32one, "");
+ LLVMBuildStore(ctx->builder, gs_next_vertex, ctx->gs_next_vertex);
+
+ ac_build_sendmsg(&ctx->ac, AC_SENDMSG_GS_OP_EMIT | AC_SENDMSG_GS | (0 << 8), ctx->gs_wave_id);
+}
+
+static void
+visit_end_primitive(struct nir_to_llvm_context *ctx,
+ const nir_intrinsic_instr *instr)
+{
+ ac_build_sendmsg(&ctx->ac, AC_SENDMSG_GS_OP_CUT | AC_SENDMSG_GS | (0 << 8), ctx->gs_wave_id);
+}
+
+static LLVMValueRef
+visit_load_tess_coord(struct nir_to_llvm_context *ctx,
+ const nir_intrinsic_instr *instr)
+{
+ LLVMValueRef coord[4] = {
+ ctx->tes_u,
+ ctx->tes_v,
+ ctx->f32zero,
+ ctx->f32zero,
+ };
+
+ if (ctx->tes_primitive_mode == GL_TRIANGLES)
+ coord[2] = LLVMBuildFSub(ctx->builder, ctx->f32one,
+ LLVMBuildFAdd(ctx->builder, coord[0], coord[1], ""), "");
+
+ LLVMValueRef result = ac_build_gather_values(&ctx->ac, coord, instr->num_components);
+ return LLVMBuildBitCast(ctx->builder, result,
+ get_def_type(ctx, &instr->dest.ssa), "");
}
static void visit_intrinsic(struct nir_to_llvm_context *ctx,
@@ -2866,8 +4013,38 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
case nir_intrinsic_load_base_instance:
result = ctx->start_instance;
break;
+ case nir_intrinsic_load_draw_id:
+ result = ctx->draw_index;
+ break;
+ case nir_intrinsic_load_invocation_id:
+ if (ctx->stage == MESA_SHADER_TESS_CTRL)
+ result = unpack_param(ctx, ctx->tcs_rel_ids, 8, 5);
+ else
+ result = ctx->gs_invocation_id;
+ break;
+ case nir_intrinsic_load_primitive_id:
+ if (ctx->stage == MESA_SHADER_GEOMETRY) {
+ ctx->shader_info->gs.uses_prim_id = true;
+ result = ctx->gs_prim_id;
+ } else if (ctx->stage == MESA_SHADER_TESS_CTRL) {
+ ctx->shader_info->tcs.uses_prim_id = true;
+ result = ctx->tcs_patch_id;
+ } else if (ctx->stage == MESA_SHADER_TESS_EVAL) {
+ ctx->shader_info->tcs.uses_prim_id = true;
+ result = ctx->tes_patch_id;
+ } else
+ fprintf(stderr, "Unknown primitive id intrinsic: %d", ctx->stage);
+ break;
case nir_intrinsic_load_sample_id:
- result = ctx->ancillary;
+ ctx->shader_info->fs.force_persample = true;
+ result = unpack_param(ctx, ctx->ancillary, 8, 4);
+ break;
+ case nir_intrinsic_load_sample_pos:
+ ctx->shader_info->fs.force_persample = true;
+ result = load_sample_pos(ctx);
+ break;
+ case nir_intrinsic_load_sample_mask_in:
+ result = ctx->sample_coverage;
break;
case nir_intrinsic_load_front_face:
result = ctx->front_face;
@@ -2908,7 +4085,7 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
result = visit_atomic_ssbo(ctx, instr);
break;
case nir_intrinsic_load_ubo:
- result = visit_load_buffer(ctx, instr);
+ result = visit_load_ubo_buffer(ctx, instr);
break;
case nir_intrinsic_get_buffer_size:
result = visit_get_buffer_size(ctx, instr);
@@ -2940,15 +4117,15 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
break;
case nir_intrinsic_discard:
ctx->shader_info->fs.can_discard = true;
- emit_llvm_intrinsic(ctx, "llvm.AMDGPU.kilp",
- LLVMVoidTypeInContext(ctx->context),
- NULL, 0, 0);
+ ac_build_intrinsic(&ctx->ac, "llvm.AMDGPU.kilp",
+ ctx->voidt,
+ NULL, 0, AC_FUNC_ATTR_LEGACY);
break;
case nir_intrinsic_discard_if:
emit_discard_if(ctx, instr);
break;
case nir_intrinsic_memory_barrier:
- emit_waitcnt(ctx);
+ emit_waitcnt(ctx, VM_CNT);
break;
case nir_intrinsic_barrier:
emit_barrier(ctx);
@@ -2970,6 +4147,18 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
case nir_intrinsic_interp_var_at_offset:
result = visit_interp(ctx, instr);
break;
+ case nir_intrinsic_emit_vertex:
+ visit_emit_vertex(ctx, instr);
+ break;
+ case nir_intrinsic_end_primitive:
+ visit_end_primitive(ctx, instr);
+ break;
+ case nir_intrinsic_load_tess_coord:
+ result = visit_load_tess_coord(ctx, instr);
+ break;
+ case nir_intrinsic_load_patch_vertices_in:
+ result = LLVMConstInt(ctx->i32, ctx->options->key.tcs.input_vertices, false);
+ break;
default:
fprintf(stderr, "Unknown intrinsic: ");
nir_print_instr(&instr->instr, stderr);
@@ -2982,8 +4171,8 @@ static void visit_intrinsic(struct nir_to_llvm_context *ctx,
}
static LLVMValueRef get_sampler_desc(struct nir_to_llvm_context *ctx,
- nir_deref_var *deref,
- enum desc_type desc_type)
+ const nir_deref_var *deref,
+ enum desc_type desc_type)
{
unsigned desc_set = deref->var->data.descriptor_set;
LLVMValueRef list = ctx->descriptor_sets[desc_set];
@@ -2994,8 +4183,8 @@ static LLVMValueRef get_sampler_desc(struct nir_to_llvm_context *ctx,
unsigned type_size;
LLVMBuilderRef builder = ctx->builder;
LLVMTypeRef type;
- LLVMValueRef indices[2];
LLVMValueRef index = NULL;
+ unsigned constant_index = 0;
assert(deref->var->data.binding < layout->binding_count);
@@ -3020,16 +4209,36 @@ static LLVMValueRef get_sampler_desc(struct nir_to_llvm_context *ctx,
type = ctx->v4i32;
type_size = 16;
break;
+ default:
+ unreachable("invalid desc_type\n");
}
if (deref->deref.child) {
- nir_deref_array *child = (nir_deref_array*)deref->deref.child;
+ const nir_deref_array *child =
+ (const nir_deref_array *)deref->deref.child;
assert(child->deref_array_type != nir_deref_array_type_wildcard);
offset += child->base_offset * stride;
if (child->deref_array_type == nir_deref_array_type_indirect) {
index = get_src(ctx, child->indirect);
}
+
+ constant_index = child->base_offset;
+ }
+ if (desc_type == DESC_SAMPLER && binding->immutable_samplers_offset &&
+ (!index || binding->immutable_samplers_equal)) {
+ if (binding->immutable_samplers_equal)
+ constant_index = 0;
+
+ const uint32_t *samplers = radv_immutable_samplers(layout, binding);
+
+ LLVMValueRef constants[] = {
+ LLVMConstInt(ctx->i32, samplers[constant_index * 4 + 0], 0),
+ LLVMConstInt(ctx->i32, samplers[constant_index * 4 + 1], 0),
+ LLVMConstInt(ctx->i32, samplers[constant_index * 4 + 2], 0),
+ LLVMConstInt(ctx->i32, samplers[constant_index * 4 + 3], 0),
+ };
+ return ac_build_gather_values(&ctx->ac, constants, 4);
}
assert(stride % type_size == 0);
@@ -3038,23 +4247,21 @@ static LLVMValueRef get_sampler_desc(struct nir_to_llvm_context *ctx,
index = ctx->i32zero;
index = LLVMBuildMul(builder, index, LLVMConstInt(ctx->i32, stride / type_size, 0), "");
- indices[0] = ctx->i32zero;
- indices[1] = LLVMConstInt(ctx->i32, offset, 0);
- list = LLVMBuildGEP(builder, list, indices, 2, "");
+
+ list = ac_build_gep0(&ctx->ac, list, LLVMConstInt(ctx->i32, offset, 0));
list = LLVMBuildPointerCast(builder, list, const_array(type, 0), "");
- return build_indexed_load_const(ctx, list, index);
+ return ac_build_indexed_load_const(&ctx->ac, list, index);
}
static void set_tex_fetch_args(struct nir_to_llvm_context *ctx,
- struct ac_tex_info *tinfo,
- nir_tex_instr *instr,
+ struct ac_image_args *args,
+ const nir_tex_instr *instr,
nir_texop op,
LLVMValueRef res_ptr, LLVMValueRef samp_ptr,
LLVMValueRef *param, unsigned count,
unsigned dmask)
{
- int num_args;
unsigned is_rect = 0;
bool da = instr->is_array || instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE;
@@ -3065,42 +4272,50 @@ static void set_tex_fetch_args(struct nir_to_llvm_context *ctx,
param[count++] = LLVMGetUndef(ctx->i32);
if (count > 1)
- tinfo->args[0] = build_gather_values(ctx, param, count);
+ args->addr = ac_build_gather_values(&ctx->ac, param, count);
else
- tinfo->args[0] = param[0];
+ args->addr = param[0];
- tinfo->args[1] = res_ptr;
- num_args = 2;
-
- if (op == nir_texop_txf ||
- op == nir_texop_txf_ms ||
- op == nir_texop_query_levels ||
- op == nir_texop_texture_samples ||
- op == nir_texop_txs)
- tinfo->dst_type = ctx->v4i32;
- else {
- tinfo->dst_type = ctx->v4f32;
- tinfo->args[num_args++] = samp_ptr;
- }
+ args->resource = res_ptr;
+ args->sampler = samp_ptr;
if (instr->sampler_dim == GLSL_SAMPLER_DIM_BUF && op == nir_texop_txf) {
- tinfo->args[0] = res_ptr;
- tinfo->args[1] = LLVMConstInt(ctx->i32, 0, false);
- tinfo->args[2] = param[0];
- tinfo->arg_count = 3;
+ args->addr = param[0];
return;
}
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, dmask, 0);
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, is_rect, 0); /* unorm */
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* r128 */
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, da ? 1 : 0, 0);
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* glc */
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* slc */
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* tfe */
- tinfo->args[num_args++] = LLVMConstInt(ctx->i32, 0, 0); /* lwe */
+ args->dmask = dmask;
+ args->unorm = is_rect;
+ args->da = da;
+}
- tinfo->arg_count = num_args;
+/* Disable anisotropic filtering if BASE_LEVEL == LAST_LEVEL.
+ *
+ * SI-CI:
+ * If BASE_LEVEL == LAST_LEVEL, the shader must disable anisotropic
+ * filtering manually. The driver sets img7 to a mask clearing
+ * MAX_ANISO_RATIO if BASE_LEVEL == LAST_LEVEL. The shader must do:
+ * s_and_b32 samp0, samp0, img7
+ *
+ * VI:
+ * The ANISO_OVERRIDE sampler field enables this fix in TA.
+ */
+static LLVMValueRef sici_fix_sampler_aniso(struct nir_to_llvm_context *ctx,
+ LLVMValueRef res, LLVMValueRef samp)
+{
+ LLVMBuilderRef builder = ctx->builder;
+ LLVMValueRef img7, samp0;
+
+ if (ctx->options->chip_class >= VI)
+ return samp;
+
+ img7 = LLVMBuildExtractElement(builder, res,
+ LLVMConstInt(ctx->i32, 7, 0), "");
+ samp0 = LLVMBuildExtractElement(builder, samp,
+ LLVMConstInt(ctx->i32, 0, 0), "");
+ samp0 = LLVMBuildAnd(builder, samp0, img7, "");
+ return LLVMBuildInsertElement(builder, samp, samp0,
+ LLVMConstInt(ctx->i32, 0, 0), "");
}
static void tex_fetch_ptrs(struct nir_to_llvm_context *ctx,
@@ -3117,150 +4332,38 @@ static void tex_fetch_ptrs(struct nir_to_llvm_context *ctx,
*samp_ptr = get_sampler_desc(ctx, instr->sampler, DESC_SAMPLER);
else
*samp_ptr = get_sampler_desc(ctx, instr->texture, DESC_SAMPLER);
+ if (instr->sampler_dim < GLSL_SAMPLER_DIM_RECT)
+ *samp_ptr = sici_fix_sampler_aniso(ctx, *res_ptr, *samp_ptr);
}
if (fmask_ptr && !instr->sampler && (instr->op == nir_texop_txf_ms ||
instr->op == nir_texop_samples_identical))
*fmask_ptr = get_sampler_desc(ctx, instr->texture, DESC_FMASK);
}
-static LLVMValueRef build_cube_intrinsic(struct nir_to_llvm_context *ctx,
- LLVMValueRef *in)
-{
-
- LLVMValueRef v, cube_vec;
-
- if (1) {
- LLVMTypeRef f32 = LLVMTypeOf(in[0]);
- LLVMValueRef out[4];
-
- out[0] = emit_llvm_intrinsic(ctx, "llvm.amdgcn.cubetc",
- f32, in, 3, LLVMReadNoneAttribute);
- out[1] = emit_llvm_intrinsic(ctx, "llvm.amdgcn.cubesc",
- f32, in, 3, LLVMReadNoneAttribute);
- out[2] = emit_llvm_intrinsic(ctx, "llvm.amdgcn.cubema",
- f32, in, 3, LLVMReadNoneAttribute);
- out[3] = emit_llvm_intrinsic(ctx, "llvm.amdgcn.cubeid",
- f32, in, 3, LLVMReadNoneAttribute);
-
- return build_gather_values(ctx, out, 4);
- } else {
- LLVMValueRef c[4];
- c[0] = in[0];
- c[1] = in[1];
- c[2] = in[2];
- c[3] = LLVMGetUndef(LLVMTypeOf(in[0]));
- cube_vec = build_gather_values(ctx, c, 4);
- v = emit_llvm_intrinsic(ctx, "llvm.AMDGPU.cube", LLVMTypeOf(cube_vec),
- &cube_vec, 1, LLVMReadNoneAttribute);
- }
- return v;
-}
-
-static void cube_to_2d_coords(struct nir_to_llvm_context *ctx,
- LLVMValueRef *in, LLVMValueRef *out)
-{
- LLVMValueRef coords[4];
- LLVMValueRef mad_args[3];
- LLVMValueRef v;
- LLVMValueRef tmp;
- int i;
-
- v = build_cube_intrinsic(ctx, in);
- for (i = 0; i < 4; i++)
- coords[i] = LLVMBuildExtractElement(ctx->builder, v,
- LLVMConstInt(ctx->i32, i, false), "");
-
- coords[2] = emit_llvm_intrinsic(ctx, "llvm.fabs.f32", ctx->f32,
- &coords[2], 1, LLVMReadNoneAttribute);
- coords[2] = emit_fdiv(ctx, ctx->f32one, coords[2]);
-
- mad_args[1] = coords[2];
- mad_args[2] = LLVMConstReal(ctx->f32, 1.5);
- mad_args[0] = coords[0];
-
- /* emit MAD */
- tmp = LLVMBuildFMul(ctx->builder, mad_args[0], mad_args[1], "");
- coords[0] = LLVMBuildFAdd(ctx->builder, tmp, mad_args[2], "");
-
- mad_args[0] = coords[1];
-
- /* emit MAD */
- tmp = LLVMBuildFMul(ctx->builder, mad_args[0], mad_args[1], "");
- coords[1] = LLVMBuildFAdd(ctx->builder, tmp, mad_args[2], "");
-
- /* apply xyz = yxw swizzle to cooords */
- out[0] = coords[1];
- out[1] = coords[0];
- out[2] = coords[3];
-}
-
-static void emit_prepare_cube_coords(struct nir_to_llvm_context *ctx,
- LLVMValueRef *coords_arg, int num_coords,
- bool is_deriv,
- bool is_array, LLVMValueRef *derivs_arg)
+static LLVMValueRef apply_round_slice(struct nir_to_llvm_context *ctx,
+ LLVMValueRef coord)
{
- LLVMValueRef coords[4];
- int i;
- cube_to_2d_coords(ctx, coords_arg, coords);
-
- if (is_deriv && derivs_arg) {
- LLVMValueRef derivs[4];
- int axis;
-
- /* Convert cube derivatives to 2D derivatives. */
- for (axis = 0; axis < 2; axis++) {
- LLVMValueRef shifted_cube_coords[4], shifted_coords[4];
-
- /* Shift the cube coordinates by the derivatives to get
- * the cube coordinates of the "neighboring pixel".
- */
- for (i = 0; i < 3; i++)
- shifted_cube_coords[i] =
- LLVMBuildFAdd(ctx->builder, coords_arg[i],
- derivs_arg[axis*3+i], "");
- shifted_cube_coords[3] = LLVMGetUndef(ctx->f32);
-
- /* Project the shifted cube coordinates onto the face. */
- cube_to_2d_coords(ctx, shifted_cube_coords,
- shifted_coords);
-
- /* Subtract both sets of 2D coordinates to get 2D derivatives.
- * This won't work if the shifted coordinates ended up
- * in a different face.
- */
- for (i = 0; i < 2; i++)
- derivs[axis * 2 + i] =
- LLVMBuildFSub(ctx->builder, shifted_coords[i],
- coords[i], "");
- }
-
- memcpy(derivs_arg, derivs, sizeof(derivs));
- }
-
- if (is_array) {
- /* for cube arrays coord.z = coord.w(array_index) * 8 + face */
- /* coords_arg.w component - array_index for cube arrays */
- LLVMValueRef tmp = LLVMBuildFMul(ctx->builder, coords_arg[3], LLVMConstReal(ctx->f32, 8.0), "");
- coords[2] = LLVMBuildFAdd(ctx->builder, tmp, coords[2], "");
- }
-
- memcpy(coords_arg, coords, sizeof(coords));
+ coord = to_float(&ctx->ac, coord);
+ coord = ac_build_intrinsic(&ctx->ac, "llvm.rint.f32", ctx->f32, &coord, 1, 0);
+ coord = to_integer(&ctx->ac, coord);
+ return coord;
}
static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
{
LLVMValueRef result = NULL;
- struct ac_tex_info tinfo = { 0 };
+ struct ac_image_args args = { 0 };
unsigned dmask = 0xf;
LLVMValueRef address[16];
LLVMValueRef coords[5];
- LLVMValueRef coord = NULL, lod = NULL, comparitor = NULL, bias, offsets = NULL;
+ LLVMValueRef coord = NULL, lod = NULL, comparator = NULL;
+ LLVMValueRef bias = NULL, offsets = NULL;
LLVMValueRef res_ptr, samp_ptr, fmask_ptr = NULL, sample_index = NULL;
LLVMValueRef ddx = NULL, ddy = NULL;
LLVMValueRef derivs[6];
unsigned chan, count = 0;
unsigned const_src = 0, num_deriv_comp = 0;
-
+ bool lod_is_zero = false;
tex_fetch_ptrs(ctx, instr, &res_ptr, &samp_ptr, &fmask_ptr);
for (unsigned i = 0; i < instr->num_srcs; i++) {
@@ -3270,8 +4373,8 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
break;
case nir_tex_src_projector:
break;
- case nir_tex_src_comparitor:
- comparitor = get_src(ctx, instr->src[i].src);
+ case nir_tex_src_comparator:
+ comparator = get_src(ctx, instr->src[i].src);
break;
case nir_tex_src_offset:
offsets = get_src(ctx, instr->src[i].src);
@@ -3280,9 +4383,14 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
case nir_tex_src_bias:
bias = get_src(ctx, instr->src[i].src);
break;
- case nir_tex_src_lod:
+ case nir_tex_src_lod: {
+ nir_const_value *val = nir_src_as_const_value(instr->src[i].src);
+
+ if (val && val->i32[0] == 0)
+ lod_is_zero = true;
lod = get_src(ctx, instr->src[i].src);
break;
+ }
case nir_tex_src_ms_index:
sample_index = get_src(ctx, instr->src[i].src);
break;
@@ -3341,7 +4449,7 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
for (chan = 0; chan < 3; ++chan)
offset[chan] = ctx->i32zero;
- tinfo.has_offset = true;
+ args.offset = true;
for (chan = 0; chan < get_llvm_num_components(offsets); chan++) {
offset[chan] = llvm_extract_elem(ctx, offsets, chan);
offset[chan] = LLVMBuildAnd(ctx->builder, offset[chan],
@@ -3361,38 +4469,56 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
}
/* Pack depth comparison value */
- if (instr->is_shadow && comparitor) {
- address[count++] = llvm_extract_elem(ctx, comparitor, 0);
+ if (instr->is_shadow && comparator) {
+ address[count++] = llvm_extract_elem(ctx, comparator, 0);
}
/* pack derivatives */
if (ddx || ddy) {
+ int num_src_deriv_channels, num_dest_deriv_channels;
switch (instr->sampler_dim) {
case GLSL_SAMPLER_DIM_3D:
case GLSL_SAMPLER_DIM_CUBE:
num_deriv_comp = 3;
+ num_src_deriv_channels = 3;
+ num_dest_deriv_channels = 3;
break;
case GLSL_SAMPLER_DIM_2D:
default:
+ num_src_deriv_channels = 2;
+ num_dest_deriv_channels = 2;
num_deriv_comp = 2;
break;
case GLSL_SAMPLER_DIM_1D:
- num_deriv_comp = 1;
+ num_src_deriv_channels = 1;
+ if (ctx->options->chip_class >= GFX9) {
+ num_dest_deriv_channels = 2;
+ num_deriv_comp = 2;
+ } else {
+ num_dest_deriv_channels = 1;
+ num_deriv_comp = 1;
+ }
break;
}
- for (unsigned i = 0; i < num_deriv_comp; i++) {
- derivs[i * 2] = to_float(ctx, llvm_extract_elem(ctx, ddx, i));
- derivs[i * 2 + 1] = to_float(ctx, llvm_extract_elem(ctx, ddy, i));
+ for (unsigned i = 0; i < num_src_deriv_channels; i++) {
+ derivs[i] = to_float(&ctx->ac, llvm_extract_elem(ctx, ddx, i));
+ derivs[num_dest_deriv_channels + i] = to_float(&ctx->ac, llvm_extract_elem(ctx, ddy, i));
+ }
+ for (unsigned i = num_src_deriv_channels; i < num_dest_deriv_channels; i++) {
+ derivs[i] = ctx->ac.f32_0;
+ derivs[num_dest_deriv_channels + i] = ctx->ac.f32_0;
}
}
if (instr->sampler_dim == GLSL_SAMPLER_DIM_CUBE && coord) {
for (chan = 0; chan < instr->coord_components; chan++)
- coords[chan] = to_float(ctx, coords[chan]);
+ coords[chan] = to_float(&ctx->ac, coords[chan]);
if (instr->coord_components == 3)
coords[3] = LLVMGetUndef(ctx->f32);
- emit_prepare_cube_coords(ctx, coords, instr->coord_components, instr->op == nir_texop_txd, instr->is_array, derivs);
+ ac_prepare_cube_coords(&ctx->ac,
+ instr->op == nir_texop_txd, instr->is_array,
+ instr->op == nir_texop_lod, coords, derivs);
if (num_deriv_comp)
num_deriv_comp--;
}
@@ -3405,22 +4531,45 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
/* Pack texture coordinates */
if (coord) {
address[count++] = coords[0];
- if (instr->coord_components > 1)
+ if (instr->coord_components > 1) {
+ if (instr->sampler_dim == GLSL_SAMPLER_DIM_1D && instr->is_array && instr->op != nir_texop_txf) {
+ coords[1] = apply_round_slice(ctx, coords[1]);
+ }
address[count++] = coords[1];
+ }
if (instr->coord_components > 2) {
/* This seems like a bit of a hack - but it passes Vulkan CTS with it */
- if (instr->sampler_dim != GLSL_SAMPLER_DIM_3D && instr->op != nir_texop_txf) {
- coords[2] = to_float(ctx, coords[2]);
- coords[2] = emit_llvm_intrinsic(ctx, "llvm.rint.f32", ctx->f32, &coords[2],
- 1, 0);
- coords[2] = to_integer(ctx, coords[2]);
+ if (instr->sampler_dim != GLSL_SAMPLER_DIM_3D &&
+ instr->sampler_dim != GLSL_SAMPLER_DIM_CUBE &&
+ instr->op != nir_texop_txf) {
+ coords[2] = apply_round_slice(ctx, coords[2]);
}
address[count++] = coords[2];
}
+
+ if (ctx->options->chip_class >= GFX9) {
+ LLVMValueRef filler;
+ if (instr->op == nir_texop_txf)
+ filler = ctx->ac.i32_0;
+ else
+ filler = LLVMConstReal(ctx->f32, 0.5);
+
+ if (instr->sampler_dim == GLSL_SAMPLER_DIM_1D) {
+ /* No nir_texop_lod, because it does not take a slice
+ * even with array textures. */
+ if (instr->is_array && instr->op != nir_texop_lod ) {
+ address[count] = address[count - 1];
+ address[count - 1] = filler;
+ count++;
+ } else
+ address[count++] = filler;
+ }
+ }
}
/* Pack LOD */
- if ((instr->op == nir_texop_txl || instr->op == nir_texop_txf) && lod) {
+ if (lod && ((instr->op == nir_texop_txl && !lod_is_zero) ||
+ instr->op == nir_texop_txf)) {
address[count++] = lod;
} else if (instr->op == nir_texop_txf_ms && sample_index) {
address[count++] = sample_index;
@@ -3439,7 +4588,7 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
if (instr->op == nir_texop_samples_identical) {
LLVMValueRef txf_address[4];
- struct ac_tex_info txf_info = { 0 };
+ struct ac_image_args txf_args = { 0 };
unsigned txf_count = count;
memcpy(txf_address, address, sizeof(txf_address));
@@ -3447,82 +4596,26 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
txf_address[2] = ctx->i32zero;
txf_address[3] = ctx->i32zero;
- set_tex_fetch_args(ctx, &txf_info, instr, nir_texop_txf,
+ set_tex_fetch_args(ctx, &txf_args, instr, nir_texop_txf,
fmask_ptr, NULL,
txf_address, txf_count, 0xf);
- result = build_tex_intrinsic(ctx, instr, &txf_info);
+ result = build_tex_intrinsic(ctx, instr, false, &txf_args);
result = LLVMBuildExtractElement(ctx->builder, result, ctx->i32zero, "");
- result = emit_int_cmp(ctx, LLVMIntEQ, result, ctx->i32zero);
+ result = emit_int_cmp(&ctx->ac, LLVMIntEQ, result, ctx->i32zero);
goto write_result;
}
- /* Adjust the sample index according to FMASK.
- *
- * For uncompressed MSAA surfaces, FMASK should return 0x76543210,
- * which is the identity mapping. Each nibble says which physical sample
- * should be fetched to get that sample.
- *
- * For example, 0x11111100 means there are only 2 samples stored and
- * the second sample covers 3/4 of the pixel. When reading samples 0
- * and 1, return physical sample 0 (determined by the first two 0s
- * in FMASK), otherwise return physical sample 1.
- *
- * The sample index should be adjusted as follows:
- * sample_index = (fmask >> (sample_index * 4)) & 0xF;
- */
if (instr->sampler_dim == GLSL_SAMPLER_DIM_MS &&
instr->op != nir_texop_txs) {
- LLVMValueRef txf_address[4];
- struct ac_tex_info txf_info = { 0 };
- unsigned txf_count = count;
- memcpy(txf_address, address, sizeof(txf_address));
-
- if (!instr->is_array)
- txf_address[2] = ctx->i32zero;
- txf_address[3] = ctx->i32zero;
-
- set_tex_fetch_args(ctx, &txf_info, instr, nir_texop_txf,
- fmask_ptr, NULL,
- txf_address, txf_count, 0xf);
-
- result = build_tex_intrinsic(ctx, instr, &txf_info);
- LLVMValueRef four = LLVMConstInt(ctx->i32, 4, false);
- LLVMValueRef F = LLVMConstInt(ctx->i32, 0xf, false);
-
- LLVMValueRef fmask = LLVMBuildExtractElement(ctx->builder,
- result,
- ctx->i32zero, "");
-
unsigned sample_chan = instr->is_array ? 3 : 2;
-
- LLVMValueRef sample_index4 =
- LLVMBuildMul(ctx->builder, address[sample_chan], four, "");
- LLVMValueRef shifted_fmask =
- LLVMBuildLShr(ctx->builder, fmask, sample_index4, "");
- LLVMValueRef final_sample =
- LLVMBuildAnd(ctx->builder, shifted_fmask, F, "");
-
- /* Don't rewrite the sample index if WORD1.DATA_FORMAT of the FMASK
- * resource descriptor is 0 (invalid),
- */
- LLVMValueRef fmask_desc =
- LLVMBuildBitCast(ctx->builder, fmask_ptr,
- ctx->v8i32, "");
-
- LLVMValueRef fmask_word1 =
- LLVMBuildExtractElement(ctx->builder, fmask_desc,
- ctx->i32one, "");
-
- LLVMValueRef word1_is_nonzero =
- LLVMBuildICmp(ctx->builder, LLVMIntNE,
- fmask_word1, ctx->i32zero, "");
-
- /* Replace the MSAA sample index. */
- address[sample_chan] =
- LLVMBuildSelect(ctx->builder, word1_is_nonzero,
- final_sample, address[sample_chan], "");
+ address[sample_chan] = adjust_sample_index_using_fmask(ctx,
+ address[0],
+ address[1],
+ instr->is_array ? address[2] : NULL,
+ address[sample_chan],
+ fmask_ptr);
}
if (offsets && instr->op == nir_texop_txf) {
@@ -3549,10 +4642,10 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
else
dmask = 1 << instr->component;
}
- set_tex_fetch_args(ctx, &tinfo, instr, instr->op,
+ set_tex_fetch_args(ctx, &args, instr, instr->op,
res_ptr, samp_ptr, address, count, dmask);
- result = build_tex_intrinsic(ctx, instr, &tinfo);
+ result = build_tex_intrinsic(ctx, instr, lod_is_zero, &args);
if (instr->op == nir_texop_query_levels)
result = LLVMBuildExtractElement(ctx->builder, result, LLVMConstInt(ctx->i32, 3, false), "");
@@ -3566,13 +4659,21 @@ static void visit_tex(struct nir_to_llvm_context *ctx, nir_tex_instr *instr)
LLVMValueRef z = LLVMBuildExtractElement(ctx->builder, result, two, "");
z = LLVMBuildSDiv(ctx->builder, z, six, "");
result = LLVMBuildInsertElement(ctx->builder, result, z, two, "");
+ } else if (ctx->options->chip_class >= GFX9 &&
+ instr->op == nir_texop_txs &&
+ instr->sampler_dim == GLSL_SAMPLER_DIM_1D &&
+ instr->is_array) {
+ LLVMValueRef two = LLVMConstInt(ctx->i32, 2, false);
+ LLVMValueRef layers = LLVMBuildExtractElement(ctx->builder, result, two, "");
+ result = LLVMBuildInsertElement(ctx->builder, result, layers,
+ ctx->ac.i32_1, "");
} else if (instr->dest.ssa.num_components != 4)
result = trim_vector(ctx, result, instr->dest.ssa.num_components);
write_result:
if (result) {
assert(instr->dest.is_ssa);
- result = to_integer(ctx, result);
+ result = to_integer(&ctx->ac, result);
_mesa_hash_table_insert(ctx->defs, &instr->dest.ssa, result);
}
}
@@ -3610,7 +4711,7 @@ static void phi_post_pass(struct nir_to_llvm_context *ctx)
static void visit_ssa_undef(struct nir_to_llvm_context *ctx,
- nir_ssa_undef_instr *instr)
+ const nir_ssa_undef_instr *instr)
{
unsigned num_components = instr->def.num_components;
LLVMValueRef undef;
@@ -3624,7 +4725,7 @@ static void visit_ssa_undef(struct nir_to_llvm_context *ctx,
}
static void visit_jump(struct nir_to_llvm_context *ctx,
- nir_jump_instr *instr)
+ const nir_jump_instr *instr)
{
switch (instr->type) {
case nir_jump_break:
@@ -3769,7 +4870,6 @@ handle_vs_input_decl(struct nir_to_llvm_context *ctx,
LLVMValueRef t_list_ptr = ctx->vertex_buffers;
LLVMValueRef t_offset;
LLVMValueRef t_list;
- LLVMValueRef args[3];
LLVMValueRef input;
LLVMValueRef buffer_index;
int index = variable->data.location - VERT_ATTRIB_GENERIC0;
@@ -3790,33 +4890,32 @@ handle_vs_input_decl(struct nir_to_llvm_context *ctx,
for (unsigned i = 0; i < attrib_count; ++i, ++idx) {
t_offset = LLVMConstInt(ctx->i32, index + i, false);
- t_list = build_indexed_load_const(ctx, t_list_ptr, t_offset);
- args[0] = t_list;
- args[1] = LLVMConstInt(ctx->i32, 0, false);
- args[2] = buffer_index;
- input = emit_llvm_intrinsic(ctx,
- "llvm.SI.vs.load.input", ctx->v4f32, args, 3,
- LLVMReadNoneAttribute | LLVMNoUnwindAttribute);
+ t_list = ac_build_indexed_load_const(&ctx->ac, t_list_ptr, t_offset);
+
+ input = ac_build_buffer_load_format(&ctx->ac, t_list,
+ buffer_index,
+ LLVMConstInt(ctx->i32, 0, false),
+ true);
for (unsigned chan = 0; chan < 4; chan++) {
LLVMValueRef llvm_chan = LLVMConstInt(ctx->i32, chan, false);
ctx->inputs[radeon_llvm_reg_index_soa(idx, chan)] =
- to_integer(ctx, LLVMBuildExtractElement(ctx->builder,
+ to_integer(&ctx->ac, LLVMBuildExtractElement(ctx->builder,
input, llvm_chan, ""));
}
}
}
-
static void interp_fs_input(struct nir_to_llvm_context *ctx,
unsigned attr,
LLVMValueRef interp_param,
LLVMValueRef prim_mask,
LLVMValueRef result[4])
{
- const char *intr_name;
LLVMValueRef attr_number;
unsigned chan;
+ LLVMValueRef i, j;
+ bool interp = interp_param != NULL;
attr_number = LLVMConstInt(ctx->i32, attr, false);
@@ -3830,19 +4929,31 @@ static void interp_fs_input(struct nir_to_llvm_context *ctx,
* fs.interp cannot be used on integers, because they can be equal
* to NaN.
*/
- intr_name = interp_param ? "llvm.SI.fs.interp" : "llvm.SI.fs.constant";
+ if (interp) {
+ interp_param = LLVMBuildBitCast(ctx->builder, interp_param,
+ LLVMVectorType(ctx->f32, 2), "");
+
+ i = LLVMBuildExtractElement(ctx->builder, interp_param,
+ ctx->i32zero, "");
+ j = LLVMBuildExtractElement(ctx->builder, interp_param,
+ ctx->i32one, "");
+ }
for (chan = 0; chan < 4; chan++) {
- LLVMValueRef args[4];
LLVMValueRef llvm_chan = LLVMConstInt(ctx->i32, chan, false);
- args[0] = llvm_chan;
- args[1] = attr_number;
- args[2] = prim_mask;
- args[3] = interp_param;
- result[chan] = emit_llvm_intrinsic(ctx, intr_name,
- ctx->f32, args, args[3] ? 4 : 3,
- LLVMReadNoneAttribute | LLVMNoUnwindAttribute);
+ if (interp) {
+ result[chan] = ac_build_fs_interp(&ctx->ac,
+ llvm_chan,
+ attr_number,
+ prim_mask, i, j);
+ } else {
+ result[chan] = ac_build_fs_interp_mov(&ctx->ac,
+ LLVMConstInt(ctx->i32, 2, false),
+ llvm_chan,
+ attr_number,
+ prim_mask);
+ }
}
}
@@ -3857,9 +4968,18 @@ handle_fs_input_decl(struct nir_to_llvm_context *ctx,
variable->data.driver_location = idx * 4;
ctx->input_mask |= ((1ull << attrib_count) - 1) << variable->data.location;
- if (glsl_get_base_type(glsl_without_array(variable->type)) == GLSL_TYPE_FLOAT)
- interp = lookup_interp_param(ctx, variable->data.interpolation, INTERP_CENTER);
- else
+ if (glsl_get_base_type(glsl_without_array(variable->type)) == GLSL_TYPE_FLOAT) {
+ unsigned interp_type;
+ if (variable->data.sample) {
+ interp_type = INTERP_SAMPLE;
+ ctx->shader_info->fs.force_persample = true;
+ } else if (variable->data.centroid)
+ interp_type = INTERP_CENTROID;
+ else
+ interp_type = INTERP_CENTER;
+
+ interp = lookup_interp_param(ctx, variable->data.interpolation, interp_type);
+ } else
interp = NULL;
for (unsigned i = 0; i < attrib_count; ++i)
@@ -3896,7 +5016,8 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
if (!(ctx->input_mask & (1ull << i)))
continue;
- if (i >= VARYING_SLOT_VAR0 || i == VARYING_SLOT_PNTC) {
+ if (i >= VARYING_SLOT_VAR0 || i == VARYING_SLOT_PNTC ||
+ i == VARYING_SLOT_PRIMITIVE_ID || i == VARYING_SLOT_LAYER) {
interp_param = *inputs;
interp_fs_input(ctx, index, interp_param, ctx->prim_mask,
inputs);
@@ -3908,12 +5029,16 @@ handle_fs_inputs_pre(struct nir_to_llvm_context *ctx,
for(int i = 0; i < 3; ++i)
inputs[i] = ctx->frag_pos[i];
- inputs[3] = emit_fdiv(ctx, ctx->f32one, ctx->frag_pos[3]);
+ inputs[3] = ac_build_fdiv(&ctx->ac, ctx->f32one, ctx->frag_pos[3]);
}
}
ctx->shader_info->fs.num_interp = index;
if (ctx->input_mask & (1 << VARYING_SLOT_PNTC))
ctx->shader_info->fs.has_pcoord = true;
+ if (ctx->input_mask & (1 << VARYING_SLOT_PRIMITIVE_ID))
+ ctx->shader_info->fs.prim_id_input = true;
+ if (ctx->input_mask & (1 << VARYING_SLOT_LAYER))
+ ctx->shader_info->fs.layer_input = true;
ctx->shader_info->fs.input_mask = ctx->input_mask >> VARYING_SLOT_VAR0;
}
@@ -3959,25 +5084,33 @@ handle_shader_output_decl(struct nir_to_llvm_context *ctx,
{
int idx = variable->data.location + variable->data.index;
unsigned attrib_count = glsl_count_attribute_slots(variable->type, false);
-
+ uint64_t mask_attribs;
variable->data.driver_location = idx * 4;
- if (ctx->stage == MESA_SHADER_VERTEX) {
-
- if (idx == VARYING_SLOT_CLIP_DIST0 ||
- idx == VARYING_SLOT_CULL_DIST0) {
- int length = glsl_get_length(variable->type);
- if (idx == VARYING_SLOT_CLIP_DIST0) {
- ctx->shader_info->vs.clip_dist_mask = (1 << length) - 1;
- ctx->num_clips = length;
- } else if (idx == VARYING_SLOT_CULL_DIST0) {
- ctx->shader_info->vs.cull_dist_mask = (1 << length) - 1;
- ctx->num_culls = length;
+ /* tess ctrl has it's own load/store paths for outputs */
+ if (ctx->stage == MESA_SHADER_TESS_CTRL)
+ return;
+
+ mask_attribs = ((1ull << attrib_count) - 1) << idx;
+ if (ctx->stage == MESA_SHADER_VERTEX ||
+ ctx->stage == MESA_SHADER_TESS_EVAL ||
+ ctx->stage == MESA_SHADER_GEOMETRY) {
+ if (idx == VARYING_SLOT_CLIP_DIST0) {
+ int length = ctx->num_output_clips + ctx->num_output_culls;
+ if (ctx->stage == MESA_SHADER_VERTEX) {
+ ctx->shader_info->vs.outinfo.clip_dist_mask = (1 << ctx->num_output_clips) - 1;
+ ctx->shader_info->vs.outinfo.cull_dist_mask = (1 << ctx->num_output_culls) - 1;
+ }
+ if (ctx->stage == MESA_SHADER_TESS_EVAL) {
+ ctx->shader_info->tes.outinfo.clip_dist_mask = (1 << ctx->num_output_clips) - 1;
+ ctx->shader_info->tes.outinfo.cull_dist_mask = (1 << ctx->num_output_culls) - 1;
}
+
if (length > 4)
attrib_count = 2;
else
attrib_count = 1;
+ mask_attribs = 1ull << idx;
}
}
@@ -3987,7 +5120,69 @@ handle_shader_output_decl(struct nir_to_llvm_context *ctx,
si_build_alloca_undef(ctx, ctx->f32, "");
}
}
- ctx->output_mask |= ((1ull << attrib_count) - 1) << idx;
+ ctx->output_mask |= mask_attribs;
+}
+
+static LLVMTypeRef
+glsl_base_to_llvm_type(struct nir_to_llvm_context *ctx,
+ enum glsl_base_type type)
+{
+ switch (type) {
+ case GLSL_TYPE_INT:
+ case GLSL_TYPE_UINT:
+ case GLSL_TYPE_BOOL:
+ case GLSL_TYPE_SUBROUTINE:
+ return ctx->i32;
+ case GLSL_TYPE_FLOAT: /* TODO handle mediump */
+ return ctx->f32;
+ case GLSL_TYPE_INT64:
+ case GLSL_TYPE_UINT64:
+ return ctx->i64;
+ case GLSL_TYPE_DOUBLE:
+ return ctx->f64;
+ default:
+ unreachable("unknown GLSL type");
+ }
+}
+
+static LLVMTypeRef
+glsl_to_llvm_type(struct nir_to_llvm_context *ctx,
+ const struct glsl_type *type)
+{
+ if (glsl_type_is_scalar(type)) {
+ return glsl_base_to_llvm_type(ctx, glsl_get_base_type(type));
+ }
+
+ if (glsl_type_is_vector(type)) {
+ return LLVMVectorType(
+ glsl_base_to_llvm_type(ctx, glsl_get_base_type(type)),
+ glsl_get_vector_elements(type));
+ }
+
+ if (glsl_type_is_matrix(type)) {
+ return LLVMArrayType(
+ glsl_to_llvm_type(ctx, glsl_get_column_type(type)),
+ glsl_get_matrix_columns(type));
+ }
+
+ if (glsl_type_is_array(type)) {
+ return LLVMArrayType(
+ glsl_to_llvm_type(ctx, glsl_get_array_element(type)),
+ glsl_get_length(type));
+ }
+
+ assert(glsl_type_is_struct(type));
+
+ LLVMTypeRef member_types[glsl_get_length(type)];
+
+ for (unsigned i = 0; i < glsl_get_length(type); i++) {
+ member_types[i] =
+ glsl_to_llvm_type(ctx,
+ glsl_get_struct_field(type, i));
+ }
+
+ return LLVMStructTypeInContext(ctx->context, member_types,
+ glsl_get_length(type), false);
}
static void
@@ -4013,12 +5208,26 @@ setup_locals(struct nir_to_llvm_context *ctx,
}
}
+static void
+setup_shared(struct nir_to_llvm_context *ctx,
+ struct nir_shader *nir)
+{
+ nir_foreach_variable(variable, &nir->shared) {
+ LLVMValueRef shared =
+ LLVMAddGlobalInAddressSpace(
+ ctx->module, glsl_to_llvm_type(ctx, variable->type),
+ variable->name ? variable->name : "",
+ LOCAL_ADDR_SPACE);
+ _mesa_hash_table_insert(ctx->vars, variable, shared);
+ }
+}
+
static LLVMValueRef
-emit_float_saturate(struct nir_to_llvm_context *ctx, LLVMValueRef v, float lo, float hi)
+emit_float_saturate(struct ac_llvm_context *ctx, LLVMValueRef v, float lo, float hi)
{
v = to_float(ctx, v);
- v = emit_intrin_2f_param(ctx, "llvm.maxnum.f32", v, LLVMConstReal(ctx->f32, lo));
- return emit_intrin_2f_param(ctx, "llvm.minnum.f32", v, LLVMConstReal(ctx->f32, hi));
+ v = emit_intrin_2f_param(ctx, "llvm.maxnum.f32", ctx->f32, v, LLVMConstReal(ctx->f32, lo));
+ return emit_intrin_2f_param(ctx, "llvm.minnum.f32", ctx->f32, v, LLVMConstReal(ctx->f32, hi));
}
@@ -4039,23 +5248,25 @@ static void
si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
LLVMValueRef *values,
unsigned target,
- LLVMValueRef *args)
+ struct ac_export_args *args)
{
/* Default is 0xf. Adjusted below depending on the format. */
- args[0] = LLVMConstInt(ctx->i32, target != V_008DFC_SQ_EXP_NULL ? 0xf : 0, false);
+ args->enabled_channels = 0xf;
+
/* Specify whether the EXEC mask represents the valid mask */
- args[1] = LLVMConstInt(ctx->i32, 0, false);
+ args->valid_mask = 0;
/* Specify whether this is the last export */
- args[2] = LLVMConstInt(ctx->i32, 0, false);
+ args->done = 0;
+
/* Specify the target we are exporting */
- args[3] = LLVMConstInt(ctx->i32, target, false);
+ args->target = target;
- args[4] = LLVMConstInt(ctx->i32, 0, false); /* COMPR flag */
- args[5] = LLVMGetUndef(ctx->f32);
- args[6] = LLVMGetUndef(ctx->f32);
- args[7] = LLVMGetUndef(ctx->f32);
- args[8] = LLVMGetUndef(ctx->f32);
+ args->compr = false;
+ args->out[0] = LLVMGetUndef(ctx->f32);
+ args->out[1] = LLVMGetUndef(ctx->f32);
+ args->out[2] = LLVMGetUndef(ctx->f32);
+ args->out[3] = LLVMGetUndef(ctx->f32);
if (!values)
return;
@@ -4065,32 +5276,33 @@ si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
unsigned index = target - V_008DFC_SQ_EXP_MRT;
unsigned col_format = (ctx->options->key.fs.col_format >> (4 * index)) & 0xf;
bool is_int8 = (ctx->options->key.fs.is_int8 >> index) & 1;
+ bool is_int10 = (ctx->options->key.fs.is_int10 >> index) & 1;
switch(col_format) {
case V_028714_SPI_SHADER_ZERO:
- args[0] = LLVMConstInt(ctx->i32, 0x0, 0);
- args[3] = LLVMConstInt(ctx->i32, V_008DFC_SQ_EXP_NULL, 0);
+ args->enabled_channels = 0; /* writemask */
+ args->target = V_008DFC_SQ_EXP_NULL;
break;
case V_028714_SPI_SHADER_32_R:
- args[0] = LLVMConstInt(ctx->i32, 0x1, 0);
- args[5] = values[0];
+ args->enabled_channels = 1;
+ args->out[0] = values[0];
break;
case V_028714_SPI_SHADER_32_GR:
- args[0] = LLVMConstInt(ctx->i32, 0x3, 0);
- args[5] = values[0];
- args[6] = values[1];
+ args->enabled_channels = 0x3;
+ args->out[0] = values[0];
+ args->out[1] = values[1];
break;
case V_028714_SPI_SHADER_32_AR:
- args[0] = LLVMConstInt(ctx->i32, 0x9, 0);
- args[5] = values[0];
- args[8] = values[3];
+ args->enabled_channels = 0x9;
+ args->out[0] = values[0];
+ args->out[3] = values[3];
break;
case V_028714_SPI_SHADER_FP16_ABGR:
- args[4] = ctx->i32one;
+ args->compr = 1;
for (unsigned chan = 0; chan < 2; chan++) {
LLVMValueRef pack_args[2] = {
@@ -4099,16 +5311,14 @@ si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
};
LLVMValueRef packed;
- packed = emit_llvm_intrinsic(ctx, "llvm.SI.packf16",
- ctx->i32, pack_args, 2,
- LLVMReadNoneAttribute);
- args[chan + 5] = packed;
+ packed = ac_build_cvt_pkrtz_f16(&ctx->ac, pack_args);
+ args->out[chan] = packed;
}
break;
case V_028714_SPI_SHADER_UNORM16_ABGR:
for (unsigned chan = 0; chan < 4; chan++) {
- val[chan] = emit_float_saturate(ctx, values[chan], 0, 1);
+ val[chan] = ac_build_clamp(&ctx->ac, values[chan]);
val[chan] = LLVMBuildFMul(ctx->builder, val[chan],
LLVMConstReal(ctx->f32, 65535), "");
val[chan] = LLVMBuildFAdd(ctx->builder, val[chan],
@@ -4117,14 +5327,14 @@ si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
ctx->i32, "");
}
- args[4] = ctx->i32one;
- args[5] = emit_pack_int16(ctx, val[0], val[1]);
- args[6] = emit_pack_int16(ctx, val[2], val[3]);
+ args->compr = 1;
+ args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
+ args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
break;
case V_028714_SPI_SHADER_SNORM16_ABGR:
for (unsigned chan = 0; chan < 4; chan++) {
- val[chan] = emit_float_saturate(ctx, values[chan], -1, 1);
+ val[chan] = emit_float_saturate(&ctx->ac, values[chan], -1, 1);
val[chan] = LLVMBuildFMul(ctx->builder, val[chan],
LLVMConstReal(ctx->f32, 32767), "");
@@ -4138,101 +5348,184 @@ si_llvm_init_export_args(struct nir_to_llvm_context *ctx,
val[chan] = LLVMBuildFPToSI(ctx->builder, val[chan], ctx->i32, "");
}
- args[4] = ctx->i32one;
- args[5] = emit_pack_int16(ctx, val[0], val[1]);
- args[6] = emit_pack_int16(ctx, val[2], val[3]);
+ args->compr = 1;
+ args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
+ args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
break;
case V_028714_SPI_SHADER_UINT16_ABGR: {
- LLVMValueRef max = LLVMConstInt(ctx->i32, is_int8 ? 255 : 65535, 0);
+ LLVMValueRef max_rgb = LLVMConstInt(ctx->i32,
+ is_int8 ? 255 : is_int10 ? 1023 : 65535, 0);
+ LLVMValueRef max_alpha = !is_int10 ? max_rgb : LLVMConstInt(ctx->i32, 3, 0);
for (unsigned chan = 0; chan < 4; chan++) {
- val[chan] = to_integer(ctx, values[chan]);
- val[chan] = emit_minmax_int(ctx, LLVMIntULT, val[chan], max);
+ val[chan] = to_integer(&ctx->ac, values[chan]);
+ val[chan] = emit_minmax_int(&ctx->ac, LLVMIntULT, val[chan], chan == 3 ? max_alpha : max_rgb);
}
- args[4] = ctx->i32one;
- args[5] = emit_pack_int16(ctx, val[0], val[1]);
- args[6] = emit_pack_int16(ctx, val[2], val[3]);
+ args->compr = 1;
+ args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
+ args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
break;
}
case V_028714_SPI_SHADER_SINT16_ABGR: {
- LLVMValueRef max = LLVMConstInt(ctx->i32, is_int8 ? 127 : 32767, 0);
- LLVMValueRef min = LLVMConstInt(ctx->i32, is_int8 ? -128 : -32768, 0);
+ LLVMValueRef max_rgb = LLVMConstInt(ctx->i32,
+ is_int8 ? 127 : is_int10 ? 511 : 32767, 0);
+ LLVMValueRef min_rgb = LLVMConstInt(ctx->i32,
+ is_int8 ? -128 : is_int10 ? -512 : -32768, 0);
+ LLVMValueRef max_alpha = !is_int10 ? max_rgb : ctx->i32one;
+ LLVMValueRef min_alpha = !is_int10 ? min_rgb : LLVMConstInt(ctx->i32, -2, 0);
/* Clamp. */
for (unsigned chan = 0; chan < 4; chan++) {
- val[chan] = to_integer(ctx, values[chan]);
- val[chan] = emit_minmax_int(ctx, LLVMIntSLT, val[chan], max);
- val[chan] = emit_minmax_int(ctx, LLVMIntSGT, val[chan], min);
+ val[chan] = to_integer(&ctx->ac, values[chan]);
+ val[chan] = emit_minmax_int(&ctx->ac, LLVMIntSLT, val[chan], chan == 3 ? max_alpha : max_rgb);
+ val[chan] = emit_minmax_int(&ctx->ac, LLVMIntSGT, val[chan], chan == 3 ? min_alpha : min_rgb);
}
- args[4] = ctx->i32one;
- args[5] = emit_pack_int16(ctx, val[0], val[1]);
- args[6] = emit_pack_int16(ctx, val[2], val[3]);
+ args->compr = 1;
+ args->out[0] = emit_pack_int16(ctx, val[0], val[1]);
+ args->out[1] = emit_pack_int16(ctx, val[2], val[3]);
break;
}
default:
case V_028714_SPI_SHADER_32_ABGR:
- memcpy(&args[5], values, sizeof(values[0]) * 4);
+ memcpy(&args->out[0], values, sizeof(values[0]) * 4);
break;
}
} else
- memcpy(&args[5], values, sizeof(values[0]) * 4);
+ memcpy(&args->out[0], values, sizeof(values[0]) * 4);
- for (unsigned i = 5; i < 9; ++i)
- args[i] = to_float(ctx, args[i]);
+ for (unsigned i = 0; i < 4; ++i)
+ args->out[i] = to_float(&ctx->ac, args->out[i]);
}
static void
handle_vs_outputs_post(struct nir_to_llvm_context *ctx,
- struct nir_shader *nir)
+ bool export_prim_id,
+ struct ac_vs_output_info *outinfo)
{
uint32_t param_count = 0;
unsigned target;
unsigned pos_idx, num_pos_exports = 0;
- LLVMValueRef args[9];
- LLVMValueRef pos_args[4][9] = { { 0 } };
- LLVMValueRef psize_value = 0;
+ struct ac_export_args args, pos_args[4] = {};
+ LLVMValueRef psize_value = NULL, layer_value = NULL, viewport_index_value = NULL;
int i;
- const uint64_t clip_mask = ctx->output_mask & ((1ull << VARYING_SLOT_CLIP_DIST0) |
- (1ull << VARYING_SLOT_CLIP_DIST1) |
- (1ull << VARYING_SLOT_CULL_DIST0) |
- (1ull << VARYING_SLOT_CULL_DIST1));
- if (clip_mask) {
+ memset(outinfo->vs_output_param_offset, AC_EXP_PARAM_UNDEFINED,
+ sizeof(outinfo->vs_output_param_offset));
+
+ if (ctx->output_mask & (1ull << VARYING_SLOT_CLIP_DIST0)) {
LLVMValueRef slots[8];
unsigned j;
- if (ctx->shader_info->vs.cull_dist_mask)
- ctx->shader_info->vs.cull_dist_mask <<= ctx->num_clips;
+ if (outinfo->cull_dist_mask)
+ outinfo->cull_dist_mask <<= ctx->num_output_clips;
i = VARYING_SLOT_CLIP_DIST0;
- for (j = 0; j < ctx->num_clips; j++)
- slots[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+ for (j = 0; j < ctx->num_output_clips + ctx->num_output_culls; j++)
+ slots[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
- i = VARYING_SLOT_CULL_DIST0;
- for (j = 0; j < ctx->num_culls; j++)
- slots[ctx->num_clips + j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
- ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
- for (i = ctx->num_clips + ctx->num_culls; i < 8; i++)
+ for (i = ctx->num_output_clips + ctx->num_output_culls; i < 8; i++)
slots[i] = LLVMGetUndef(ctx->f32);
- if (ctx->num_clips + ctx->num_culls > 4) {
+ if (ctx->num_output_clips + ctx->num_output_culls > 4) {
target = V_008DFC_SQ_EXP_POS + 3;
- si_llvm_init_export_args(ctx, &slots[4], target, args);
- memcpy(pos_args[target - V_008DFC_SQ_EXP_POS],
- args, sizeof(args));
+ si_llvm_init_export_args(ctx, &slots[4], target, &args);
+ memcpy(&pos_args[target - V_008DFC_SQ_EXP_POS],
+ &args, sizeof(args));
}
target = V_008DFC_SQ_EXP_POS + 2;
- si_llvm_init_export_args(ctx, &slots[0], target, args);
- memcpy(pos_args[target - V_008DFC_SQ_EXP_POS],
- args, sizeof(args));
+ si_llvm_init_export_args(ctx, &slots[0], target, &args);
+ memcpy(&pos_args[target - V_008DFC_SQ_EXP_POS],
+ &args, sizeof(args));
+
+ }
+
+ LLVMValueRef pos_values[4] = {ctx->f32zero, ctx->f32zero, ctx->f32zero, ctx->f32one};
+ if (ctx->output_mask & (1ull << VARYING_SLOT_POS)) {
+ for (unsigned j = 0; j < 4; j++)
+ pos_values[j] = LLVMBuildLoad(ctx->builder,
+ ctx->outputs[radeon_llvm_reg_index_soa(VARYING_SLOT_POS, j)], "");
+ }
+ si_llvm_init_export_args(ctx, pos_values, V_008DFC_SQ_EXP_POS, &pos_args[0]);
+
+ if (ctx->output_mask & (1ull << VARYING_SLOT_PSIZ)) {
+ outinfo->writes_pointsize = true;
+ psize_value = LLVMBuildLoad(ctx->builder,
+ ctx->outputs[radeon_llvm_reg_index_soa(VARYING_SLOT_PSIZ, 0)], "");
+ }
+
+ if (ctx->output_mask & (1ull << VARYING_SLOT_LAYER)) {
+ outinfo->writes_layer = true;
+ layer_value = LLVMBuildLoad(ctx->builder,
+ ctx->outputs[radeon_llvm_reg_index_soa(VARYING_SLOT_LAYER, 0)], "");
+ }
+
+ if (ctx->output_mask & (1ull << VARYING_SLOT_VIEWPORT)) {
+ outinfo->writes_viewport_index = true;
+ viewport_index_value = LLVMBuildLoad(ctx->builder,
+ ctx->outputs[radeon_llvm_reg_index_soa(VARYING_SLOT_VIEWPORT, 0)], "");
+ }
+
+ if (outinfo->writes_pointsize ||
+ outinfo->writes_layer ||
+ outinfo->writes_viewport_index) {
+ pos_args[1].enabled_channels = ((outinfo->writes_pointsize == true ? 1 : 0) |
+ (outinfo->writes_layer == true ? 4 : 0));
+ pos_args[1].valid_mask = 0;
+ pos_args[1].done = 0;
+ pos_args[1].target = V_008DFC_SQ_EXP_POS + 1;
+ pos_args[1].compr = 0;
+ pos_args[1].out[0] = ctx->f32zero; /* X */
+ pos_args[1].out[1] = ctx->f32zero; /* Y */
+ pos_args[1].out[2] = ctx->f32zero; /* Z */
+ pos_args[1].out[3] = ctx->f32zero; /* W */
+
+ if (outinfo->writes_pointsize == true)
+ pos_args[1].out[0] = psize_value;
+ if (outinfo->writes_layer == true)
+ pos_args[1].out[2] = layer_value;
+ if (outinfo->writes_viewport_index == true) {
+ if (ctx->options->chip_class >= GFX9) {
+ /* GFX9 has the layer in out.z[10:0] and the viewport
+ * index in out.z[19:16].
+ */
+ LLVMValueRef v = viewport_index_value;
+ v = to_integer(&ctx->ac, v);
+ v = LLVMBuildShl(ctx->builder, v,
+ LLVMConstInt(ctx->i32, 16, false),
+ "");
+ v = LLVMBuildOr(ctx->builder, v,
+ to_integer(&ctx->ac, pos_args[1].out[2]), "");
+
+ pos_args[1].out[2] = to_float(&ctx->ac, v);
+ pos_args[1].enabled_channels |= 1 << 2;
+ } else {
+ pos_args[1].out[3] = viewport_index_value;
+ pos_args[1].enabled_channels |= 1 << 3;
+ }
+ }
+ }
+ for (i = 0; i < 4; i++) {
+ if (pos_args[i].out[0])
+ num_pos_exports++;
+ }
+
+ pos_idx = 0;
+ for (i = 0; i < 4; i++) {
+ if (!pos_args[i].out[0])
+ continue;
+ /* Specify the target we are exporting */
+ pos_args[i].target = V_008DFC_SQ_EXP_POS + pos_idx++;
+ if (pos_idx == num_pos_exports)
+ pos_args[i].done = 1;
+ ac_build_export(&ctx->ac, &pos_args[i]);
}
for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
@@ -4241,108 +5534,375 @@ handle_vs_outputs_post(struct nir_to_llvm_context *ctx,
continue;
for (unsigned j = 0; j < 4; j++)
- values[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+ values[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
- if (i == VARYING_SLOT_POS) {
- target = V_008DFC_SQ_EXP_POS;
- } else if (i == VARYING_SLOT_CLIP_DIST0 ||
- i == VARYING_SLOT_CLIP_DIST1 ||
- i == VARYING_SLOT_CULL_DIST0 ||
- i == VARYING_SLOT_CULL_DIST1) {
- continue;
- } else if (i == VARYING_SLOT_PSIZ) {
- ctx->shader_info->vs.writes_pointsize = true;
- psize_value = values[0];
- continue;
+ if (i == VARYING_SLOT_LAYER) {
+ target = V_008DFC_SQ_EXP_PARAM + param_count;
+ outinfo->vs_output_param_offset[VARYING_SLOT_LAYER] = param_count;
+ param_count++;
+ } else if (i == VARYING_SLOT_PRIMITIVE_ID) {
+ target = V_008DFC_SQ_EXP_PARAM + param_count;
+ outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID] = param_count;
+ param_count++;
} else if (i >= VARYING_SLOT_VAR0) {
- ctx->shader_info->vs.export_mask |= 1u << (i - VARYING_SLOT_VAR0);
+ outinfo->export_mask |= 1u << (i - VARYING_SLOT_VAR0);
target = V_008DFC_SQ_EXP_PARAM + param_count;
+ outinfo->vs_output_param_offset[i] = param_count;
param_count++;
- }
+ } else
+ continue;
- si_llvm_init_export_args(ctx, values, target, args);
+ si_llvm_init_export_args(ctx, values, target, &args);
if (target >= V_008DFC_SQ_EXP_POS &&
target <= (V_008DFC_SQ_EXP_POS + 3)) {
- memcpy(pos_args[target - V_008DFC_SQ_EXP_POS],
- args, sizeof(args));
+ memcpy(&pos_args[target - V_008DFC_SQ_EXP_POS],
+ &args, sizeof(args));
} else {
- emit_llvm_intrinsic(ctx,
- "llvm.SI.export",
- LLVMVoidTypeInContext(ctx->context),
- args, 9, 0);
+ ac_build_export(&ctx->ac, &args);
}
}
- /* We need to add the position output manually if it's missing. */
- if (!pos_args[0][0]) {
- pos_args[0][0] = LLVMConstInt(ctx->i32, 0xf, false);
- pos_args[0][1] = ctx->i32zero; /* EXEC mask */
- pos_args[0][2] = ctx->i32zero; /* last export? */
- pos_args[0][3] = LLVMConstInt(ctx->i32, V_008DFC_SQ_EXP_POS, false);
- pos_args[0][4] = ctx->i32zero; /* COMPR flag */
- pos_args[0][5] = ctx->f32zero; /* X */
- pos_args[0][6] = ctx->f32zero; /* Y */
- pos_args[0][7] = ctx->f32zero; /* Z */
- pos_args[0][8] = ctx->f32one; /* W */
- }
-
- if (ctx->shader_info->vs.writes_pointsize == true) {
- pos_args[1][0] = LLVMConstInt(ctx->i32, (ctx->shader_info->vs.writes_pointsize == true), false); /* writemask */
- pos_args[1][1] = ctx->i32zero; /* EXEC mask */
- pos_args[1][2] = ctx->i32zero; /* last export? */
- pos_args[1][3] = LLVMConstInt(ctx->i32, V_008DFC_SQ_EXP_POS + 1, false);
- pos_args[1][4] = ctx->i32zero; /* COMPR flag */
- pos_args[1][5] = ctx->f32zero; /* X */
- pos_args[1][6] = ctx->f32zero; /* Y */
- pos_args[1][7] = ctx->f32zero; /* Z */
- pos_args[1][8] = ctx->f32zero; /* W */
-
- if (ctx->shader_info->vs.writes_pointsize == true)
- pos_args[1][5] = psize_value;
+ if (export_prim_id) {
+ LLVMValueRef values[4];
+ target = V_008DFC_SQ_EXP_PARAM + param_count;
+ outinfo->vs_output_param_offset[VARYING_SLOT_PRIMITIVE_ID] = param_count;
+ param_count++;
+
+ values[0] = ctx->vs_prim_id;
+ ctx->shader_info->vs.vgpr_comp_cnt = MAX2(2,
+ ctx->shader_info->vs.vgpr_comp_cnt);
+ for (unsigned j = 1; j < 4; j++)
+ values[j] = ctx->f32zero;
+ si_llvm_init_export_args(ctx, values, target, &args);
+ ac_build_export(&ctx->ac, &args);
+ outinfo->export_prim_id = true;
}
- for (i = 0; i < 4; i++) {
- if (pos_args[i][0])
- num_pos_exports++;
+
+ outinfo->pos_exports = num_pos_exports;
+ outinfo->param_exports = param_count;
+}
+
+static void
+handle_es_outputs_post(struct nir_to_llvm_context *ctx,
+ struct ac_es_output_info *outinfo)
+{
+ int j;
+ uint64_t max_output_written = 0;
+ for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
+ LLVMValueRef *out_ptr = &ctx->outputs[i * 4];
+ int param_index;
+ int length = 4;
+
+ if (!(ctx->output_mask & (1ull << i)))
+ continue;
+
+ if (i == VARYING_SLOT_CLIP_DIST0)
+ length = ctx->num_output_clips + ctx->num_output_culls;
+
+ param_index = shader_io_get_unique_index(i);
+
+ max_output_written = MAX2(param_index + (length > 4), max_output_written);
+
+ for (j = 0; j < length; j++) {
+ LLVMValueRef out_val = LLVMBuildLoad(ctx->builder, out_ptr[j], "");
+ out_val = LLVMBuildBitCast(ctx->builder, out_val, ctx->i32, "");
+
+ ac_build_buffer_store_dword(&ctx->ac,
+ ctx->esgs_ring,
+ out_val, 1,
+ NULL, ctx->es2gs_offset,
+ (4 * param_index + j) * 4,
+ 1, 1, true, true);
+ }
}
+ outinfo->esgs_itemsize = (max_output_written + 1) * 16;
+}
- pos_idx = 0;
- for (i = 0; i < 4; i++) {
- if (!pos_args[i][0])
+static void
+handle_ls_outputs_post(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef vertex_id = ctx->rel_auto_id;
+ LLVMValueRef vertex_dw_stride = unpack_param(ctx, ctx->ls_out_layout, 13, 8);
+ LLVMValueRef base_dw_addr = LLVMBuildMul(ctx->builder, vertex_id,
+ vertex_dw_stride, "");
+
+ for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
+ LLVMValueRef *out_ptr = &ctx->outputs[i * 4];
+ int length = 4;
+
+ if (!(ctx->output_mask & (1ull << i)))
continue;
- /* Specify the target we are exporting */
- pos_args[i][3] = LLVMConstInt(ctx->i32, V_008DFC_SQ_EXP_POS + pos_idx++, false);
- if (pos_idx == num_pos_exports)
- pos_args[i][2] = ctx->i32one;
- emit_llvm_intrinsic(ctx,
- "llvm.SI.export",
- LLVMVoidTypeInContext(ctx->context),
- pos_args[i], 9, 0);
+ if (i == VARYING_SLOT_CLIP_DIST0)
+ length = ctx->num_output_clips + ctx->num_output_culls;
+ int param = shader_io_get_unique_index(i);
+ mark_tess_output(ctx, false, param);
+ if (length > 4)
+ mark_tess_output(ctx, false, param + 1);
+ LLVMValueRef dw_addr = LLVMBuildAdd(ctx->builder, base_dw_addr,
+ LLVMConstInt(ctx->i32, param * 4, false),
+ "");
+ for (unsigned j = 0; j < length; j++) {
+ lds_store(ctx, dw_addr,
+ LLVMBuildLoad(ctx->builder, out_ptr[j], ""));
+ dw_addr = LLVMBuildAdd(ctx->builder, dw_addr, ctx->i32one, "");
+ }
+ }
+}
+
+struct ac_build_if_state
+{
+ struct nir_to_llvm_context *ctx;
+ LLVMValueRef condition;
+ LLVMBasicBlockRef entry_block;
+ LLVMBasicBlockRef true_block;
+ LLVMBasicBlockRef false_block;
+ LLVMBasicBlockRef merge_block;
+};
+
+static LLVMBasicBlockRef
+ac_build_insert_new_block(struct nir_to_llvm_context *ctx, const char *name)
+{
+ LLVMBasicBlockRef current_block;
+ LLVMBasicBlockRef next_block;
+ LLVMBasicBlockRef new_block;
+
+ /* get current basic block */
+ current_block = LLVMGetInsertBlock(ctx->builder);
+
+ /* chqeck if there's another block after this one */
+ next_block = LLVMGetNextBasicBlock(current_block);
+ if (next_block) {
+ /* insert the new block before the next block */
+ new_block = LLVMInsertBasicBlockInContext(ctx->context, next_block, name);
+ }
+ else {
+ /* append new block after current block */
+ LLVMValueRef function = LLVMGetBasicBlockParent(current_block);
+ new_block = LLVMAppendBasicBlockInContext(ctx->context, function, name);
+ }
+ return new_block;
+}
+
+static void
+ac_nir_build_if(struct ac_build_if_state *ifthen,
+ struct nir_to_llvm_context *ctx,
+ LLVMValueRef condition)
+{
+ LLVMBasicBlockRef block = LLVMGetInsertBlock(ctx->builder);
+
+ memset(ifthen, 0, sizeof *ifthen);
+ ifthen->ctx = ctx;
+ ifthen->condition = condition;
+ ifthen->entry_block = block;
+
+ /* create endif/merge basic block for the phi functions */
+ ifthen->merge_block = ac_build_insert_new_block(ctx, "endif-block");
+
+ /* create/insert true_block before merge_block */
+ ifthen->true_block =
+ LLVMInsertBasicBlockInContext(ctx->context,
+ ifthen->merge_block,
+ "if-true-block");
+
+ /* successive code goes into the true block */
+ LLVMPositionBuilderAtEnd(ctx->builder, ifthen->true_block);
+}
+
+/**
+ * End a conditional.
+ */
+static void
+ac_nir_build_endif(struct ac_build_if_state *ifthen)
+{
+ LLVMBuilderRef builder = ifthen->ctx->builder;
+
+ /* Insert branch to the merge block from current block */
+ LLVMBuildBr(builder, ifthen->merge_block);
+
+ /*
+ * Now patch in the various branch instructions.
+ */
+
+ /* Insert the conditional branch instruction at the end of entry_block */
+ LLVMPositionBuilderAtEnd(builder, ifthen->entry_block);
+ if (ifthen->false_block) {
+ /* we have an else clause */
+ LLVMBuildCondBr(builder, ifthen->condition,
+ ifthen->true_block, ifthen->false_block);
+ }
+ else {
+ /* no else clause */
+ LLVMBuildCondBr(builder, ifthen->condition,
+ ifthen->true_block, ifthen->merge_block);
+ }
+
+ /* Resume building code at end of the ifthen->merge_block */
+ LLVMPositionBuilderAtEnd(builder, ifthen->merge_block);
+}
+
+static void
+write_tess_factors(struct nir_to_llvm_context *ctx)
+{
+ unsigned stride, outer_comps, inner_comps;
+ struct ac_build_if_state if_ctx, inner_if_ctx;
+ LLVMValueRef invocation_id = unpack_param(ctx, ctx->tcs_rel_ids, 8, 5);
+ LLVMValueRef rel_patch_id = unpack_param(ctx, ctx->tcs_rel_ids, 0, 8);
+ unsigned tess_inner_index, tess_outer_index;
+ LLVMValueRef lds_base, lds_inner, lds_outer, byteoffset, buffer;
+ LLVMValueRef out[6], vec0, vec1, tf_base, inner[4], outer[4];
+ int i;
+ emit_barrier(ctx);
+
+ switch (ctx->options->key.tcs.primitive_mode) {
+ case GL_ISOLINES:
+ stride = 2;
+ outer_comps = 2;
+ inner_comps = 0;
+ break;
+ case GL_TRIANGLES:
+ stride = 4;
+ outer_comps = 3;
+ inner_comps = 1;
+ break;
+ case GL_QUADS:
+ stride = 6;
+ outer_comps = 4;
+ inner_comps = 2;
+ break;
+ default:
+ return;
+ }
+
+ ac_nir_build_if(&if_ctx, ctx,
+ LLVMBuildICmp(ctx->builder, LLVMIntEQ,
+ invocation_id, ctx->i32zero, ""));
+
+ tess_inner_index = shader_io_get_unique_index(VARYING_SLOT_TESS_LEVEL_INNER);
+ tess_outer_index = shader_io_get_unique_index(VARYING_SLOT_TESS_LEVEL_OUTER);
+
+ mark_tess_output(ctx, true, tess_inner_index);
+ mark_tess_output(ctx, true, tess_outer_index);
+ lds_base = get_tcs_out_current_patch_data_offset(ctx);
+ lds_inner = LLVMBuildAdd(ctx->builder, lds_base,
+ LLVMConstInt(ctx->i32, tess_inner_index * 4, false), "");
+ lds_outer = LLVMBuildAdd(ctx->builder, lds_base,
+ LLVMConstInt(ctx->i32, tess_outer_index * 4, false), "");
+
+ for (i = 0; i < 4; i++) {
+ inner[i] = LLVMGetUndef(ctx->i32);
+ outer[i] = LLVMGetUndef(ctx->i32);
+ }
+
+ // LINES reverseal
+ if (ctx->options->key.tcs.primitive_mode == GL_ISOLINES) {
+ outer[0] = out[1] = lds_load(ctx, lds_outer);
+ lds_outer = LLVMBuildAdd(ctx->builder, lds_outer,
+ LLVMConstInt(ctx->i32, 1, false), "");
+ outer[1] = out[0] = lds_load(ctx, lds_outer);
+ } else {
+ for (i = 0; i < outer_comps; i++) {
+ outer[i] = out[i] =
+ lds_load(ctx, lds_outer);
+ lds_outer = LLVMBuildAdd(ctx->builder, lds_outer,
+ LLVMConstInt(ctx->i32, 1, false), "");
+ }
+ for (i = 0; i < inner_comps; i++) {
+ inner[i] = out[outer_comps+i] =
+ lds_load(ctx, lds_inner);
+ lds_inner = LLVMBuildAdd(ctx->builder, lds_inner,
+ LLVMConstInt(ctx->i32, 1, false), "");
+ }
}
- ctx->shader_info->vs.pos_exports = num_pos_exports;
- ctx->shader_info->vs.param_exports = param_count;
+ /* Convert the outputs to vectors for stores. */
+ vec0 = ac_build_gather_values(&ctx->ac, out, MIN2(stride, 4));
+ vec1 = NULL;
+
+ if (stride > 4)
+ vec1 = ac_build_gather_values(&ctx->ac, out + 4, stride - 4);
+
+
+ buffer = ctx->hs_ring_tess_factor;
+ tf_base = ctx->tess_factor_offset;
+ byteoffset = LLVMBuildMul(ctx->builder, rel_patch_id,
+ LLVMConstInt(ctx->i32, 4 * stride, false), "");
+
+ ac_nir_build_if(&inner_if_ctx, ctx,
+ LLVMBuildICmp(ctx->builder, LLVMIntEQ,
+ rel_patch_id, ctx->i32zero, ""));
+
+ /* Store the dynamic HS control word. */
+ ac_build_buffer_store_dword(&ctx->ac, buffer,
+ LLVMConstInt(ctx->i32, 0x80000000, false),
+ 1, ctx->i32zero, tf_base,
+ 0, 1, 0, true, false);
+ ac_nir_build_endif(&inner_if_ctx);
+
+ /* Store the tessellation factors. */
+ ac_build_buffer_store_dword(&ctx->ac, buffer, vec0,
+ MIN2(stride, 4), byteoffset, tf_base,
+ 4, 1, 0, true, false);
+ if (vec1)
+ ac_build_buffer_store_dword(&ctx->ac, buffer, vec1,
+ stride - 4, byteoffset, tf_base,
+ 20, 1, 0, true, false);
+
+ //TODO store to offchip for TES to read - only if TES reads them
+ if (1) {
+ LLVMValueRef inner_vec, outer_vec, tf_outer_offset;
+ LLVMValueRef tf_inner_offset;
+ unsigned param_outer, param_inner;
+
+ param_outer = shader_io_get_unique_index(VARYING_SLOT_TESS_LEVEL_OUTER);
+ tf_outer_offset = get_tcs_tes_buffer_address(ctx, NULL,
+ LLVMConstInt(ctx->i32, param_outer, 0));
+
+ outer_vec = ac_build_gather_values(&ctx->ac, outer,
+ util_next_power_of_two(outer_comps));
+
+ ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, outer_vec,
+ outer_comps, tf_outer_offset,
+ ctx->oc_lds, 0, 1, 0, true, false);
+ if (inner_comps) {
+ param_inner = shader_io_get_unique_index(VARYING_SLOT_TESS_LEVEL_INNER);
+ tf_inner_offset = get_tcs_tes_buffer_address(ctx, NULL,
+ LLVMConstInt(ctx->i32, param_inner, 0));
+
+ inner_vec = inner_comps == 1 ? inner[0] :
+ ac_build_gather_values(&ctx->ac, inner, inner_comps);
+ ac_build_buffer_store_dword(&ctx->ac, ctx->hs_ring_tess_offchip, inner_vec,
+ inner_comps, tf_inner_offset,
+ ctx->oc_lds, 0, 1, 0, true, false);
+ }
+ }
+ ac_nir_build_endif(&if_ctx);
}
static void
+handle_tcs_outputs_post(struct nir_to_llvm_context *ctx)
+{
+ write_tess_factors(ctx);
+}
+
+static bool
si_export_mrt_color(struct nir_to_llvm_context *ctx,
- LLVMValueRef *color, unsigned param, bool is_last)
+ LLVMValueRef *color, unsigned param, bool is_last,
+ struct ac_export_args *args)
{
- LLVMValueRef args[9];
/* Export */
si_llvm_init_export_args(ctx, color, param,
args);
if (is_last) {
- args[1] = ctx->i32one; /* whether the EXEC mask is valid */
- args[2] = ctx->i32one; /* DONE bit */
- } else if (args[0] == ctx->i32zero)
- return; /* unnecessary NULL export */
+ args->valid_mask = 1; /* whether the EXEC mask is valid */
+ args->done = 1; /* DONE bit */
+ } else if (!args->enabled_channels)
+ return false; /* unnecessary NULL export */
- emit_llvm_intrinsic(ctx, "llvm.SI.export",
- ctx->voidt, args, 9, 0);
+ return true;
}
static void
@@ -4350,51 +5910,50 @@ si_export_mrt_z(struct nir_to_llvm_context *ctx,
LLVMValueRef depth, LLVMValueRef stencil,
LLVMValueRef samplemask)
{
- LLVMValueRef args[9];
- unsigned mask = 0;
- args[1] = ctx->i32one; /* whether the EXEC mask is valid */
- args[2] = ctx->i32one; /* DONE bit */
- /* Specify the target we are exporting */
- args[3] = LLVMConstInt(ctx->i32, V_008DFC_SQ_EXP_MRTZ, false);
+ struct ac_export_args args;
+
+ args.enabled_channels = 0;
+ args.valid_mask = 1;
+ args.done = 1;
+ args.target = V_008DFC_SQ_EXP_MRTZ;
+ args.compr = false;
- args[4] = ctx->i32zero; /* COMP flag */
- args[5] = LLVMGetUndef(ctx->f32); /* R, depth */
- args[6] = LLVMGetUndef(ctx->f32); /* G, stencil test val[0:7], stencil op val[8:15] */
- args[7] = LLVMGetUndef(ctx->f32); /* B, sample mask */
- args[8] = LLVMGetUndef(ctx->f32); /* A, alpha to mask */
+ args.out[0] = LLVMGetUndef(ctx->f32); /* R, depth */
+ args.out[1] = LLVMGetUndef(ctx->f32); /* G, stencil test val[0:7], stencil op val[8:15] */
+ args.out[2] = LLVMGetUndef(ctx->f32); /* B, sample mask */
+ args.out[3] = LLVMGetUndef(ctx->f32); /* A, alpha to mask */
if (depth) {
- args[5] = depth;
- mask |= 0x1;
+ args.out[0] = depth;
+ args.enabled_channels |= 0x1;
}
if (stencil) {
- args[6] = stencil;
- mask |= 0x2;
+ args.out[1] = stencil;
+ args.enabled_channels |= 0x2;
}
if (samplemask) {
- args[7] = samplemask;
- mask |= 0x04;
+ args.out[2] = samplemask;
+ args.enabled_channels |= 0x4;
}
- /* SI (except OLAND) has a bug that it only looks
+ /* SI (except OLAND and HAINAN) has a bug that it only looks
* at the X writemask component. */
if (ctx->options->chip_class == SI &&
- ctx->options->family != CHIP_OLAND)
- mask |= 0x01;
+ ctx->options->family != CHIP_OLAND &&
+ ctx->options->family != CHIP_HAINAN)
+ args.enabled_channels |= 0x1;
- args[0] = LLVMConstInt(ctx->i32, mask, false);
- emit_llvm_intrinsic(ctx, "llvm.SI.export",
- ctx->voidt, args, 9, 0);
+ ac_build_export(&ctx->ac, &args);
}
static void
-handle_fs_outputs_post(struct nir_to_llvm_context *ctx,
- struct nir_shader *nir)
+handle_fs_outputs_post(struct nir_to_llvm_context *ctx)
{
unsigned index = 0;
LLVMValueRef depth = NULL, stencil = NULL, samplemask = NULL;
+ struct ac_export_args color_args[8];
for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
LLVMValueRef values[4];
@@ -4404,59 +5963,83 @@ handle_fs_outputs_post(struct nir_to_llvm_context *ctx,
if (i == FRAG_RESULT_DEPTH) {
ctx->shader_info->fs.writes_z = true;
- depth = to_float(ctx, LLVMBuildLoad(ctx->builder,
+ depth = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
} else if (i == FRAG_RESULT_STENCIL) {
ctx->shader_info->fs.writes_stencil = true;
- stencil = to_float(ctx, LLVMBuildLoad(ctx->builder,
+ stencil = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
+ } else if (i == FRAG_RESULT_SAMPLE_MASK) {
+ ctx->shader_info->fs.writes_sample_mask = true;
+ samplemask = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
+ ctx->outputs[radeon_llvm_reg_index_soa(i, 0)], ""));
} else {
bool last = false;
for (unsigned j = 0; j < 4; j++)
- values[j] = to_float(ctx, LLVMBuildLoad(ctx->builder,
+ values[j] = to_float(&ctx->ac, LLVMBuildLoad(ctx->builder,
ctx->outputs[radeon_llvm_reg_index_soa(i, j)], ""));
- if (!ctx->shader_info->fs.writes_z && !ctx->shader_info->fs.writes_stencil)
+ if (!ctx->shader_info->fs.writes_z && !ctx->shader_info->fs.writes_stencil && !ctx->shader_info->fs.writes_sample_mask)
last = ctx->output_mask <= ((1ull << (i + 1)) - 1);
- si_export_mrt_color(ctx, values, V_008DFC_SQ_EXP_MRT + index, last);
- index++;
+ bool ret = si_export_mrt_color(ctx, values, V_008DFC_SQ_EXP_MRT + (i - FRAG_RESULT_DATA0), last, &color_args[index]);
+ if (ret)
+ index++;
}
}
- if (depth || stencil)
+ for (unsigned i = 0; i < index; i++)
+ ac_build_export(&ctx->ac, &color_args[i]);
+ if (depth || stencil || samplemask)
si_export_mrt_z(ctx, depth, stencil, samplemask);
- else if (!index)
- si_export_mrt_color(ctx, NULL, V_008DFC_SQ_EXP_NULL, true);
+ else if (!index) {
+ si_export_mrt_color(ctx, NULL, V_008DFC_SQ_EXP_NULL, true, &color_args[0]);
+ ac_build_export(&ctx->ac, &color_args[0]);
+ }
ctx->shader_info->fs.output_mask = index ? ((1ull << index) - 1) : 0;
}
static void
-handle_shader_outputs_post(struct nir_to_llvm_context *ctx,
- struct nir_shader *nir)
+emit_gs_epilogue(struct nir_to_llvm_context *ctx)
+{
+ ac_build_sendmsg(&ctx->ac, AC_SENDMSG_GS_OP_NOP | AC_SENDMSG_GS_DONE, ctx->gs_wave_id);
+}
+
+static void
+handle_shader_outputs_post(struct nir_to_llvm_context *ctx)
{
switch (ctx->stage) {
case MESA_SHADER_VERTEX:
- handle_vs_outputs_post(ctx, nir);
+ if (ctx->options->key.vs.as_ls)
+ handle_ls_outputs_post(ctx);
+ else if (ctx->options->key.vs.as_es)
+ handle_es_outputs_post(ctx, &ctx->shader_info->vs.es_info);
+ else
+ handle_vs_outputs_post(ctx, ctx->options->key.vs.export_prim_id,
+ &ctx->shader_info->vs.outinfo);
break;
case MESA_SHADER_FRAGMENT:
- handle_fs_outputs_post(ctx, nir);
+ handle_fs_outputs_post(ctx);
+ break;
+ case MESA_SHADER_GEOMETRY:
+ emit_gs_epilogue(ctx);
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ handle_tcs_outputs_post(ctx);
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ if (ctx->options->key.tes.as_es)
+ handle_es_outputs_post(ctx, &ctx->shader_info->tes.es_info);
+ else
+ handle_vs_outputs_post(ctx, ctx->options->key.tes.export_prim_id,
+ &ctx->shader_info->tes.outinfo);
break;
default:
break;
}
}
-static void
-handle_shared_compute_var(struct nir_to_llvm_context *ctx,
- struct nir_variable *variable, uint32_t *offset, int idx)
-{
- unsigned size = glsl_count_attribute_slots(variable->type, false);
- variable->data.driver_location = *offset;
- *offset += size;
-}
-
static void ac_llvm_finalize_module(struct nir_to_llvm_context * ctx)
{
LLVMPassManagerRef passmgr;
@@ -4483,6 +6066,91 @@ static void ac_llvm_finalize_module(struct nir_to_llvm_context * ctx)
LLVMDisposePassManager(passmgr);
}
+static void
+ac_nir_eliminate_const_vs_outputs(struct nir_to_llvm_context *ctx)
+{
+ struct ac_vs_output_info *outinfo;
+
+ switch (ctx->stage) {
+ case MESA_SHADER_FRAGMENT:
+ case MESA_SHADER_COMPUTE:
+ case MESA_SHADER_TESS_CTRL:
+ case MESA_SHADER_GEOMETRY:
+ return;
+ case MESA_SHADER_VERTEX:
+ if (ctx->options->key.vs.as_ls ||
+ ctx->options->key.vs.as_es)
+ return;
+ outinfo = &ctx->shader_info->vs.outinfo;
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ if (ctx->options->key.vs.as_es)
+ return;
+ outinfo = &ctx->shader_info->tes.outinfo;
+ break;
+ default:
+ unreachable("Unhandled shader type");
+ }
+
+ ac_optimize_vs_outputs(&ctx->ac,
+ ctx->main_function,
+ outinfo->vs_output_param_offset,
+ VARYING_SLOT_MAX,
+ &outinfo->param_exports);
+}
+
+static void
+ac_setup_rings(struct nir_to_llvm_context *ctx)
+{
+ if ((ctx->stage == MESA_SHADER_VERTEX && ctx->options->key.vs.as_es) ||
+ (ctx->stage == MESA_SHADER_TESS_EVAL && ctx->options->key.tes.as_es)) {
+ ctx->esgs_ring = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_ESGS_VS, false));
+ }
+
+ if (ctx->is_gs_copy_shader) {
+ ctx->gsvs_ring = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_GSVS_VS, false));
+ }
+ if (ctx->stage == MESA_SHADER_GEOMETRY) {
+ LLVMValueRef tmp;
+ ctx->esgs_ring = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_ESGS_GS, false));
+ ctx->gsvs_ring = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_GSVS_GS, false));
+
+ ctx->gsvs_ring = LLVMBuildBitCast(ctx->builder, ctx->gsvs_ring, ctx->v4i32, "");
+
+ ctx->gsvs_ring = LLVMBuildInsertElement(ctx->builder, ctx->gsvs_ring, ctx->gsvs_num_entries, LLVMConstInt(ctx->i32, 2, false), "");
+ tmp = LLVMBuildExtractElement(ctx->builder, ctx->gsvs_ring, ctx->i32one, "");
+ tmp = LLVMBuildOr(ctx->builder, tmp, ctx->gsvs_ring_stride, "");
+ ctx->gsvs_ring = LLVMBuildInsertElement(ctx->builder, ctx->gsvs_ring, tmp, ctx->i32one, "");
+ }
+
+ if (ctx->stage == MESA_SHADER_TESS_CTRL ||
+ ctx->stage == MESA_SHADER_TESS_EVAL) {
+ ctx->hs_ring_tess_offchip = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_HS_TESS_OFFCHIP, false));
+ ctx->hs_ring_tess_factor = ac_build_indexed_load_const(&ctx->ac, ctx->ring_offsets, LLVMConstInt(ctx->i32, RING_HS_TESS_FACTOR, false));
+ }
+}
+
+static unsigned
+ac_nir_get_max_workgroup_size(enum chip_class chip_class,
+ const struct nir_shader *nir)
+{
+ switch (nir->stage) {
+ case MESA_SHADER_TESS_CTRL:
+ return chip_class >= CIK ? 128 : 64;
+ case MESA_SHADER_GEOMETRY:
+ return 64;
+ case MESA_SHADER_COMPUTE:
+ break;
+ default:
+ return 0;
+ }
+
+ unsigned max_workgroup_size = nir->info.cs.local_size[0] *
+ nir->info.cs.local_size[1] *
+ nir->info.cs.local_size[2];
+ return max_workgroup_size;
+}
+
static
LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
struct nir_shader *nir,
@@ -4491,14 +6159,22 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
{
struct nir_to_llvm_context ctx = {0};
struct nir_function *func;
+ unsigned i;
ctx.options = options;
ctx.shader_info = shader_info;
ctx.context = LLVMContextCreate();
ctx.module = LLVMModuleCreateWithNameInContext("shader", ctx.context);
+ ac_llvm_context_init(&ctx.ac, ctx.context, options->chip_class);
+ ctx.ac.module = ctx.module;
+
+ ctx.has_ds_bpermute = ctx.options->chip_class >= VI;
+
memset(shader_info, 0, sizeof(*shader_info));
- LLVMSetTarget(ctx.module, "amdgcn--");
+ ac_nir_shader_info_pass(nir, options, &shader_info->info);
+
+ LLVMSetTarget(ctx.module, options->supports_spill ? "amdgcn-mesa-mesa3d" : "amdgcn--");
LLVMTargetDataRef data_layout = LLVMCreateTargetDataLayout(tm);
char *data_layout_str = LLVMCopyStringRepOfTargetData(data_layout);
@@ -4509,40 +6185,36 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
setup_types(&ctx);
ctx.builder = LLVMCreateBuilderInContext(ctx.context);
+ ctx.ac.builder = ctx.builder;
ctx.stage = nir->stage;
+ ctx.max_workgroup_size = ac_nir_get_max_workgroup_size(ctx.options->chip_class, nir);
- create_function(&ctx, nir);
-
- if (nir->stage == MESA_SHADER_COMPUTE) {
- int num_shared = 0;
- nir_foreach_variable(variable, &nir->shared)
- num_shared++;
- if (num_shared) {
- int idx = 0;
- uint32_t shared_size = 0;
- LLVMValueRef var;
- LLVMTypeRef i8p = LLVMPointerType(ctx.i8, LOCAL_ADDR_SPACE);
- nir_foreach_variable(variable, &nir->shared) {
- handle_shared_compute_var(&ctx, variable, &shared_size, idx);
- idx++;
- }
+ for (i = 0; i < AC_UD_MAX_SETS; i++)
+ shader_info->user_sgprs_locs.descriptor_sets[i].sgpr_idx = -1;
+ for (i = 0; i < AC_UD_MAX_UD; i++)
+ shader_info->user_sgprs_locs.shader_data[i].sgpr_idx = -1;
- shared_size *= 16;
- var = LLVMAddGlobalInAddressSpace(ctx.module,
- LLVMArrayType(ctx.i8, shared_size),
- "compute_lds",
- LOCAL_ADDR_SPACE);
- LLVMSetAlignment(var, 4);
- ctx.shared_memory = LLVMBuildBitCast(ctx.builder, var, i8p, "");
- }
+ create_function(&ctx);
+
+ if (nir->stage == MESA_SHADER_GEOMETRY) {
+ ctx.gs_next_vertex = ac_build_alloca(&ctx, ctx.i32, "gs_next_vertex");
+
+ ctx.gs_max_out_vertices = nir->info.gs.vertices_out;
+ } else if (nir->stage == MESA_SHADER_TESS_EVAL) {
+ ctx.tes_primitive_mode = nir->info.tess.primitive_mode;
}
+ ac_setup_rings(&ctx);
+
nir_foreach_variable(variable, &nir->inputs)
handle_shader_input_decl(&ctx, variable);
if (nir->stage == MESA_SHADER_FRAGMENT)
handle_fs_inputs_pre(&ctx, nir);
+ ctx.num_output_clips = nir->info.clip_distance_array_size;
+ ctx.num_output_culls = nir->info.cull_distance_array_size;
+
nir_foreach_variable(variable, &nir->outputs)
handle_shader_output_decl(&ctx, variable);
@@ -4550,21 +6222,41 @@ LLVMModuleRef ac_translate_nir_to_llvm(LLVMTargetMachineRef tm,
_mesa_key_pointer_equal);
ctx.phis = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
_mesa_key_pointer_equal);
+ ctx.vars = _mesa_hash_table_create(NULL, _mesa_hash_pointer,
+ _mesa_key_pointer_equal);
func = (struct nir_function *)exec_list_get_head(&nir->functions);
setup_locals(&ctx, func);
+ if (nir->stage == MESA_SHADER_COMPUTE)
+ setup_shared(&ctx, nir);
+
visit_cf_list(&ctx, &func->impl->body);
phi_post_pass(&ctx);
- handle_shader_outputs_post(&ctx, nir);
+ handle_shader_outputs_post(&ctx);
LLVMBuildRetVoid(ctx.builder);
ac_llvm_finalize_module(&ctx);
+
+ ac_nir_eliminate_const_vs_outputs(&ctx);
free(ctx.locals);
ralloc_free(ctx.defs);
ralloc_free(ctx.phis);
+ ralloc_free(ctx.vars);
+
+ if (nir->stage == MESA_SHADER_GEOMETRY) {
+ unsigned addclip = ctx.num_output_clips + ctx.num_output_culls > 4;
+ shader_info->gs.gsvs_vertex_size = (util_bitcount64(ctx.output_mask) + addclip) * 16;
+ shader_info->gs.max_gsvs_emit_size = shader_info->gs.gsvs_vertex_size *
+ nir->info.gs.vertices_out;
+ } else if (nir->stage == MESA_SHADER_TESS_CTRL) {
+ shader_info->tcs.outputs_written = ctx.tess_outputs_written;
+ shader_info->tcs.patch_outputs_written = ctx.tess_patch_outputs_written;
+ } else if (nir->stage == MESA_SHADER_VERTEX && ctx.options->key.vs.as_ls) {
+ shader_info->vs.outputs_written = ctx.tess_outputs_written;
+ }
return ctx.module;
}
@@ -4627,19 +6319,16 @@ out:
return retval;
}
-void ac_compile_nir_shader(LLVMTargetMachineRef tm,
- struct ac_shader_binary *binary,
- struct ac_shader_config *config,
- struct ac_shader_variant_info *shader_info,
- struct nir_shader *nir,
- const struct ac_nir_compiler_options *options,
- bool dump_shader)
+static void ac_compile_llvm_module(LLVMTargetMachineRef tm,
+ LLVMModuleRef llvm_module,
+ struct ac_shader_binary *binary,
+ struct ac_shader_config *config,
+ struct ac_shader_variant_info *shader_info,
+ gl_shader_stage stage,
+ bool dump_shader, bool supports_spill)
{
-
- LLVMModuleRef llvm_module = ac_translate_nir_to_llvm(tm, nir, shader_info,
- options);
if (dump_shader)
- LLVMDumpModule(llvm_module);
+ ac_dump_module(llvm_module);
memset(binary, 0, sizeof(*binary));
int v = ac_llvm_compile(llvm_module, binary, tm);
@@ -4650,13 +6339,13 @@ void ac_compile_nir_shader(LLVMTargetMachineRef tm,
if (dump_shader)
fprintf(stderr, "disasm:\n%s\n", binary->disasm_string);
- ac_shader_binary_read_config(binary, config, 0);
+ ac_shader_binary_read_config(binary, config, 0, supports_spill);
LLVMContextRef ctx = LLVMGetModuleContext(llvm_module);
LLVMDisposeModule(llvm_module);
LLVMContextDispose(ctx);
- if (nir->stage == MESA_SHADER_FRAGMENT) {
+ if (stage == MESA_SHADER_FRAGMENT) {
shader_info->num_input_vgprs = 0;
if (G_0286CC_PERSP_SAMPLE_ENA(config->spi_ps_input_addr))
shader_info->num_input_vgprs += 2;
@@ -4696,11 +6385,149 @@ void ac_compile_nir_shader(LLVMTargetMachineRef tm,
/* +3 for scratch wave offset and VCC */
config->num_sgprs = MAX2(config->num_sgprs,
shader_info->num_input_sgprs + 3);
- if (nir->stage == MESA_SHADER_COMPUTE) {
+}
+
+void ac_compile_nir_shader(LLVMTargetMachineRef tm,
+ struct ac_shader_binary *binary,
+ struct ac_shader_config *config,
+ struct ac_shader_variant_info *shader_info,
+ struct nir_shader *nir,
+ const struct ac_nir_compiler_options *options,
+ bool dump_shader)
+{
+
+ LLVMModuleRef llvm_module = ac_translate_nir_to_llvm(tm, nir, shader_info,
+ options);
+
+ ac_compile_llvm_module(tm, llvm_module, binary, config, shader_info, nir->stage, dump_shader, options->supports_spill);
+ switch (nir->stage) {
+ case MESA_SHADER_COMPUTE:
for (int i = 0; i < 3; ++i)
shader_info->cs.block_size[i] = nir->info.cs.local_size[i];
+ break;
+ case MESA_SHADER_FRAGMENT:
+ shader_info->fs.early_fragment_test = nir->info.fs.early_fragment_tests;
+ break;
+ case MESA_SHADER_GEOMETRY:
+ shader_info->gs.vertices_in = nir->info.gs.vertices_in;
+ shader_info->gs.vertices_out = nir->info.gs.vertices_out;
+ shader_info->gs.output_prim = nir->info.gs.output_primitive;
+ shader_info->gs.invocations = nir->info.gs.invocations;
+ break;
+ case MESA_SHADER_TESS_EVAL:
+ shader_info->tes.primitive_mode = nir->info.tess.primitive_mode;
+ shader_info->tes.spacing = nir->info.tess.spacing;
+ shader_info->tes.ccw = nir->info.tess.ccw;
+ shader_info->tes.point_mode = nir->info.tess.point_mode;
+ shader_info->tes.as_es = options->key.tes.as_es;
+ break;
+ case MESA_SHADER_TESS_CTRL:
+ shader_info->tcs.tcs_vertices_out = nir->info.tess.tcs_vertices_out;
+ break;
+ case MESA_SHADER_VERTEX:
+ shader_info->vs.as_es = options->key.vs.as_es;
+ shader_info->vs.as_ls = options->key.vs.as_ls;
+ /* in LS mode we need at least 1, invocation id needs 3, handled elsewhere */
+ if (options->key.vs.as_ls)
+ shader_info->vs.vgpr_comp_cnt = MAX2(1, shader_info->vs.vgpr_comp_cnt);
+ break;
+ default:
+ break;
}
+}
- if (nir->stage == MESA_SHADER_FRAGMENT)
- shader_info->fs.early_fragment_test = nir->info.fs.early_fragment_tests;
+static void
+ac_gs_copy_shader_emit(struct nir_to_llvm_context *ctx)
+{
+ LLVMValueRef args[9];
+ args[0] = ctx->gsvs_ring;
+ args[1] = LLVMBuildMul(ctx->builder, ctx->vertex_id, LLVMConstInt(ctx->i32, 4, false), "");
+ args[3] = ctx->i32zero;
+ args[4] = ctx->i32one; /* OFFEN */
+ args[5] = ctx->i32zero; /* IDXEN */
+ args[6] = ctx->i32one; /* GLC */
+ args[7] = ctx->i32one; /* SLC */
+ args[8] = ctx->i32zero; /* TFE */
+
+ int idx = 0;
+
+ for (unsigned i = 0; i < RADEON_LLVM_MAX_OUTPUTS; ++i) {
+ int length = 4;
+ int slot = idx;
+ int slot_inc = 1;
+ if (!(ctx->output_mask & (1ull << i)))
+ continue;
+
+ if (i == VARYING_SLOT_CLIP_DIST0) {
+ /* unpack clip and cull from a single set of slots */
+ length = ctx->num_output_clips + ctx->num_output_culls;
+ if (length > 4)
+ slot_inc = 2;
+ }
+
+ for (unsigned j = 0; j < length; j++) {
+ LLVMValueRef value;
+ args[2] = LLVMConstInt(ctx->i32,
+ (slot * 4 + j) *
+ ctx->gs_max_out_vertices * 16 * 4, false);
+
+ value = ac_build_intrinsic(&ctx->ac,
+ "llvm.SI.buffer.load.dword.i32.i32",
+ ctx->i32, args, 9,
+ AC_FUNC_ATTR_READONLY |
+ AC_FUNC_ATTR_LEGACY);
+
+ LLVMBuildStore(ctx->builder,
+ to_float(&ctx->ac, value), ctx->outputs[radeon_llvm_reg_index_soa(i, j)]);
+ }
+ idx += slot_inc;
+ }
+ handle_vs_outputs_post(ctx, false, &ctx->shader_info->vs.outinfo);
+}
+
+void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
+ struct nir_shader *geom_shader,
+ struct ac_shader_binary *binary,
+ struct ac_shader_config *config,
+ struct ac_shader_variant_info *shader_info,
+ const struct ac_nir_compiler_options *options,
+ bool dump_shader)
+{
+ struct nir_to_llvm_context ctx = {0};
+ ctx.context = LLVMContextCreate();
+ ctx.module = LLVMModuleCreateWithNameInContext("shader", ctx.context);
+ ctx.options = options;
+ ctx.shader_info = shader_info;
+
+ ac_llvm_context_init(&ctx.ac, ctx.context, options->chip_class);
+ ctx.ac.module = ctx.module;
+
+ ctx.is_gs_copy_shader = true;
+ LLVMSetTarget(ctx.module, "amdgcn--");
+ setup_types(&ctx);
+
+ ctx.builder = LLVMCreateBuilderInContext(ctx.context);
+ ctx.ac.builder = ctx.builder;
+ ctx.stage = MESA_SHADER_VERTEX;
+
+ create_function(&ctx);
+
+ ctx.gs_max_out_vertices = geom_shader->info.gs.vertices_out;
+ ac_setup_rings(&ctx);
+
+ ctx.num_output_clips = geom_shader->info.clip_distance_array_size;
+ ctx.num_output_culls = geom_shader->info.cull_distance_array_size;
+
+ nir_foreach_variable(variable, &geom_shader->outputs)
+ handle_shader_output_decl(&ctx, variable);
+
+ ac_gs_copy_shader_emit(&ctx);
+
+ LLVMBuildRetVoid(ctx.builder);
+
+ ac_llvm_finalize_module(&ctx);
+
+ ac_compile_llvm_module(tm, ctx.module, binary, config, shader_info,
+ MESA_SHADER_VERTEX,
+ dump_shader, options->supports_spill);
}
diff --git a/lib/mesa/src/amd/common/ac_nir_to_llvm.h b/lib/mesa/src/amd/common/ac_nir_to_llvm.h
index a17caf285..af93a1c5c 100644
--- a/lib/mesa/src/amd/common/ac_nir_to_llvm.h
+++ b/lib/mesa/src/amd/common/ac_nir_to_llvm.h
@@ -21,13 +21,16 @@
* IN THE SOFTWARE.
*/
-#pragma once
+#ifndef AC_NIR_TO_LLVM_H
+#define AC_NIR_TO_LLVM_H
#include <stdbool.h>
#include "llvm-c/Core.h"
#include "llvm-c/TargetMachine.h"
#include "amd_family.h"
-
+#include "../vulkan/radv_descriptor_set.h"
+#include "ac_shader_info.h"
+#include "shader_enums.h"
struct ac_shader_binary;
struct ac_shader_config;
struct nir_shader;
@@ -36,39 +39,122 @@ struct radv_pipeline_layout;
struct ac_vs_variant_key {
uint32_t instance_rate_inputs;
+ uint32_t as_es:1;
+ uint32_t as_ls:1;
+ uint32_t export_prim_id:1;
+};
+
+struct ac_tes_variant_key {
+ uint32_t as_es:1;
+ uint32_t export_prim_id:1;
+};
+
+struct ac_tcs_variant_key {
+ unsigned primitive_mode;
+ unsigned input_vertices;
};
struct ac_fs_variant_key {
uint32_t col_format;
uint32_t is_int8;
+ uint32_t is_int10;
};
union ac_shader_variant_key {
struct ac_vs_variant_key vs;
struct ac_fs_variant_key fs;
+ struct ac_tes_variant_key tes;
+ struct ac_tcs_variant_key tcs;
};
struct ac_nir_compiler_options {
struct radv_pipeline_layout *layout;
union ac_shader_variant_key key;
bool unsafe_math;
+ bool supports_spill;
enum radeon_family family;
enum chip_class chip_class;
};
+struct ac_userdata_info {
+ int8_t sgpr_idx;
+ uint8_t num_sgprs;
+ bool indirect;
+ uint32_t indirect_offset;
+};
+
+enum ac_ud_index {
+ AC_UD_SCRATCH_RING_OFFSETS = 0,
+ AC_UD_PUSH_CONSTANTS = 1,
+ AC_UD_INDIRECT_DESCRIPTOR_SETS = 2,
+ AC_UD_SHADER_START = 3,
+ AC_UD_VS_VERTEX_BUFFERS = AC_UD_SHADER_START,
+ AC_UD_VS_BASE_VERTEX_START_INSTANCE,
+ AC_UD_VS_LS_TCS_IN_LAYOUT,
+ AC_UD_VS_MAX_UD,
+ AC_UD_PS_SAMPLE_POS_OFFSET = AC_UD_SHADER_START,
+ AC_UD_PS_MAX_UD,
+ AC_UD_CS_GRID_SIZE = AC_UD_SHADER_START,
+ AC_UD_CS_MAX_UD,
+ AC_UD_GS_VS_RING_STRIDE_ENTRIES = AC_UD_SHADER_START,
+ AC_UD_GS_MAX_UD,
+ AC_UD_TCS_OFFCHIP_LAYOUT = AC_UD_SHADER_START,
+ AC_UD_TCS_MAX_UD,
+ AC_UD_TES_OFFCHIP_LAYOUT = AC_UD_SHADER_START,
+ AC_UD_TES_MAX_UD,
+ AC_UD_MAX_UD = AC_UD_VS_MAX_UD,
+};
+
+/* descriptor index into scratch ring offsets */
+#define RING_SCRATCH 0
+#define RING_ESGS_VS 1
+#define RING_ESGS_GS 2
+#define RING_GSVS_VS 3
+#define RING_GSVS_GS 4
+#define RING_HS_TESS_FACTOR 5
+#define RING_HS_TESS_OFFCHIP 6
+#define RING_PS_SAMPLE_POSITIONS 7
+
+// Match MAX_SETS from radv_descriptor_set.h
+#define AC_UD_MAX_SETS MAX_SETS
+
+struct ac_userdata_locations {
+ struct ac_userdata_info descriptor_sets[AC_UD_MAX_SETS];
+ struct ac_userdata_info shader_data[AC_UD_MAX_UD];
+};
+
+struct ac_vs_output_info {
+ uint8_t vs_output_param_offset[VARYING_SLOT_MAX];
+ uint8_t clip_dist_mask;
+ uint8_t cull_dist_mask;
+ uint8_t param_exports;
+ bool writes_pointsize;
+ bool writes_layer;
+ bool writes_viewport_index;
+ bool export_prim_id;
+ uint32_t export_mask;
+ unsigned pos_exports;
+};
+
+struct ac_es_output_info {
+ uint32_t esgs_itemsize;
+};
+
struct ac_shader_variant_info {
+ struct ac_userdata_locations user_sgprs_locs;
+ struct ac_shader_info info;
unsigned num_user_sgprs;
unsigned num_input_sgprs;
unsigned num_input_vgprs;
+ bool need_indirect_descriptor_sets;
union {
struct {
- unsigned param_exports;
- unsigned pos_exports;
+ struct ac_vs_output_info outinfo;
+ struct ac_es_output_info es_info;
unsigned vgpr_comp_cnt;
- uint32_t export_mask;
- bool writes_pointsize;
- uint8_t clip_dist_mask;
- uint8_t cull_dist_mask;
+ bool as_es;
+ bool as_ls;
+ uint64_t outputs_written;
} vs;
struct {
unsigned num_interp;
@@ -79,12 +165,44 @@ struct ac_shader_variant_info {
bool can_discard;
bool writes_z;
bool writes_stencil;
+ bool writes_sample_mask;
bool early_fragment_test;
bool writes_memory;
+ bool force_persample;
+ bool prim_id_input;
+ bool layer_input;
} fs;
struct {
unsigned block_size[3];
} cs;
+ struct {
+ unsigned vertices_in;
+ unsigned vertices_out;
+ unsigned output_prim;
+ unsigned invocations;
+ unsigned gsvs_vertex_size;
+ unsigned max_gsvs_emit_size;
+ bool uses_prim_id;
+ } gs;
+ struct {
+ bool uses_prim_id;
+ unsigned tcs_vertices_out;
+ /* Which outputs are actually written */
+ uint64_t outputs_written;
+ /* Which patch outputs are actually written */
+ uint32_t patch_outputs_written;
+
+ } tcs;
+ struct {
+ struct ac_vs_output_info outinfo;
+ struct ac_es_output_info es_info;
+ bool as_es;
+ unsigned primitive_mode;
+ enum gl_tess_spacing spacing;
+ bool ccw;
+ bool point_mode;
+ bool uses_prim_id;
+ } tes;
};
};
@@ -96,24 +214,12 @@ void ac_compile_nir_shader(LLVMTargetMachineRef tm,
const struct ac_nir_compiler_options *options,
bool dump_shader);
-/* SHADER ABI defines */
-
-/* offset in dwords */
-#define AC_USERDATA_DESCRIPTOR_SET_0 0
-#define AC_USERDATA_DESCRIPTOR_SET_1 2
-#define AC_USERDATA_DESCRIPTOR_SET_2 4
-#define AC_USERDATA_DESCRIPTOR_SET_3 6
-#define AC_USERDATA_PUSH_CONST_DYN 8
-
-#define AC_USERDATA_VS_VERTEX_BUFFERS 10
-#define AC_USERDATA_VS_BASE_VERTEX 12
-#define AC_USERDATA_VS_START_INSTANCE 13
-
-#define AC_USERDATA_PS_SAMPLE_POS 10
-
-#define AC_USERDATA_CS_GRID_SIZE 10
+void ac_create_gs_copy_shader(LLVMTargetMachineRef tm,
+ struct nir_shader *geom_shader,
+ struct ac_shader_binary *binary,
+ struct ac_shader_config *config,
+ struct ac_shader_variant_info *shader_info,
+ const struct ac_nir_compiler_options *options,
+ bool dump_shader);
-#ifdef __cplusplus
-extern "C"
-#endif
-void ac_add_attr_dereferenceable(LLVMValueRef val, uint64_t bytes);
+#endif /* AC_NIR_TO_LLVM_H */
diff --git a/lib/mesa/src/amd/common/amd_family.h b/lib/mesa/src/amd/common/amd_family.h
index 6a713ad76..c62d0aa52 100644
--- a/lib/mesa/src/amd/common/amd_family.h
+++ b/lib/mesa/src/amd/common/amd_family.h
@@ -91,6 +91,9 @@ enum radeon_family {
CHIP_STONEY,
CHIP_POLARIS10,
CHIP_POLARIS11,
+ CHIP_POLARIS12,
+ CHIP_VEGA10,
+ CHIP_RAVEN,
CHIP_LAST,
};
@@ -103,9 +106,10 @@ enum chip_class {
R700,
EVERGREEN,
CAYMAN,
- SI,
- CIK,
- VI,
+ SI, /* GFX6 */
+ CIK, /* GFX7 */
+ VI, /* GFX8 */
+ GFX9,
};
#endif
diff --git a/lib/mesa/src/amd/common/amdgpu_id.h b/lib/mesa/src/amd/common/amdgpu_id.h
index f91df5571..6f254f074 100644
--- a/lib/mesa/src/amd/common/amdgpu_id.h
+++ b/lib/mesa/src/amd/common/amdgpu_id.h
@@ -48,6 +48,8 @@ enum {
FAMILY_VI,
FAMILY_CZ,
FAMILY_PI,
+ FAMILY_AI,
+ FAMILY_RV,
FAMILY_LAST,
};
@@ -142,6 +144,8 @@ enum {
VI_POLARIS11_M_A0 = 90,
+ VI_POLARIS12_V_A0 = 100,
+
VI_UNKNOWN = 0xFF
};
@@ -155,7 +159,9 @@ enum {
#define ASICREV_IS_POLARIS10_P(eChipRev)\
((eChipRev >= VI_POLARIS10_P_A0) && (eChipRev < VI_POLARIS11_M_A0))
#define ASICREV_IS_POLARIS11_M(eChipRev) \
- (eChipRev >= VI_POLARIS11_M_A0)
+ (eChipRev >= VI_POLARIS11_M_A0 && eChipRev < VI_POLARIS12_V_A0)
+#define ASICREV_IS_POLARIS12_V(eChipRev)\
+ (eChipRev >= VI_POLARIS12_V_A0)
/* CZ specific rev IDs */
enum {
@@ -170,4 +176,23 @@ enum {
#define ASICREV_IS_STONEY(eChipRev) \
((eChipRev >= STONEY_A0) && (eChipRev < CZ_UNKNOWN))
+/* AI specific rev IDs */
+enum {
+ AI_VEGA10_P_A0 = 0x01,
+
+ AI_UNKNOWN = 0xFF
+};
+
+#define ASICREV_IS_VEGA10_P(eChipRev) \
+ ((eChipRev) >= AI_VEGA10_P_A0 && (eChipRev) < AI_UNKNOWN)
+
+/* RV specific rev IDs */
+enum {
+ RAVEN_A0 = 0x01,
+ RAVEN_UNKNOWN = 0xFF
+};
+
+#define ASICREV_IS_RAVEN(eChipRev) \
+ ((eChipRev) >= RAVEN_A0 && (eChipRev) < RAVEN_UNKNOWN)
+
#endif /* AMDGPU_ID_H */
diff --git a/lib/mesa/src/amd/common/gfx9d.h b/lib/mesa/src/amd/common/gfx9d.h
new file mode 100644
index 000000000..8c6164518
--- /dev/null
+++ b/lib/mesa/src/amd/common/gfx9d.h
@@ -0,0 +1,7479 @@
+/*
+ * Vega 3D Registers
+ *
+ * Copyright (C) 2016 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef GFX9D_H
+#define GFX9D_H
+
+#define R_008008_GRBM_STATUS2 0x008008
+#define S_008008_ME0PIPE1_CMDFIFO_AVAIL(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_008008_ME0PIPE1_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x0F)
+#define C_008008_ME0PIPE1_CMDFIFO_AVAIL 0xFFFFFFF0
+#define S_008008_ME0PIPE1_CF_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008008_ME0PIPE1_CF_RQ_PENDING(x) (((x) >> 4) & 0x1)
+#define C_008008_ME0PIPE1_CF_RQ_PENDING 0xFFFFFFEF
+#define S_008008_ME0PIPE1_PF_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008008_ME0PIPE1_PF_RQ_PENDING(x) (((x) >> 5) & 0x1)
+#define C_008008_ME0PIPE1_PF_RQ_PENDING 0xFFFFFFDF
+#define S_008008_ME1PIPE0_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008008_ME1PIPE0_RQ_PENDING(x) (((x) >> 6) & 0x1)
+#define C_008008_ME1PIPE0_RQ_PENDING 0xFFFFFFBF
+#define S_008008_ME1PIPE1_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008008_ME1PIPE1_RQ_PENDING(x) (((x) >> 7) & 0x1)
+#define C_008008_ME1PIPE1_RQ_PENDING 0xFFFFFF7F
+#define S_008008_ME1PIPE2_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008008_ME1PIPE2_RQ_PENDING(x) (((x) >> 8) & 0x1)
+#define C_008008_ME1PIPE2_RQ_PENDING 0xFFFFFEFF
+#define S_008008_ME1PIPE3_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008008_ME1PIPE3_RQ_PENDING(x) (((x) >> 9) & 0x1)
+#define C_008008_ME1PIPE3_RQ_PENDING 0xFFFFFDFF
+#define S_008008_ME2PIPE0_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008008_ME2PIPE0_RQ_PENDING(x) (((x) >> 10) & 0x1)
+#define C_008008_ME2PIPE0_RQ_PENDING 0xFFFFFBFF
+#define S_008008_ME2PIPE1_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008008_ME2PIPE1_RQ_PENDING(x) (((x) >> 11) & 0x1)
+#define C_008008_ME2PIPE1_RQ_PENDING 0xFFFFF7FF
+#define S_008008_ME2PIPE2_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008008_ME2PIPE2_RQ_PENDING(x) (((x) >> 12) & 0x1)
+#define C_008008_ME2PIPE2_RQ_PENDING 0xFFFFEFFF
+#define S_008008_ME2PIPE3_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008008_ME2PIPE3_RQ_PENDING(x) (((x) >> 13) & 0x1)
+#define C_008008_ME2PIPE3_RQ_PENDING 0xFFFFDFFF
+#define S_008008_RLC_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008008_RLC_RQ_PENDING(x) (((x) >> 14) & 0x1)
+#define C_008008_RLC_RQ_PENDING 0xFFFFBFFF
+#define S_008008_UTCL2_BUSY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008008_UTCL2_BUSY(x) (((x) >> 15) & 0x1)
+#define C_008008_UTCL2_BUSY 0xFFFF7FFF
+#define S_008008_EA_BUSY(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008008_EA_BUSY(x) (((x) >> 16) & 0x1)
+#define C_008008_EA_BUSY 0xFFFEFFFF
+#define S_008008_RMI_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008008_RMI_BUSY(x) (((x) >> 17) & 0x1)
+#define C_008008_RMI_BUSY 0xFFFDFFFF
+#define S_008008_UTCL2_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008008_UTCL2_RQ_PENDING(x) (((x) >> 18) & 0x1)
+#define C_008008_UTCL2_RQ_PENDING 0xFFFBFFFF
+#define S_008008_CPF_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008008_CPF_RQ_PENDING(x) (((x) >> 19) & 0x1)
+#define C_008008_CPF_RQ_PENDING 0xFFF7FFFF
+#define S_008008_EA_LINK_BUSY(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008008_EA_LINK_BUSY(x) (((x) >> 20) & 0x1)
+#define C_008008_EA_LINK_BUSY 0xFFEFFFFF
+#define S_008008_RLC_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008008_RLC_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008008_RLC_BUSY 0xFEFFFFFF
+#define S_008008_TC_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008008_TC_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008008_TC_BUSY 0xFDFFFFFF
+#define S_008008_TCC_CC_RESIDENT(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008008_TCC_CC_RESIDENT(x) (((x) >> 26) & 0x1)
+#define C_008008_TCC_CC_RESIDENT 0xFBFFFFFF
+#define S_008008_CPF_BUSY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008008_CPF_BUSY(x) (((x) >> 28) & 0x1)
+#define C_008008_CPF_BUSY 0xEFFFFFFF
+#define S_008008_CPC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008008_CPC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008008_CPC_BUSY 0xDFFFFFFF
+#define S_008008_CPG_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008008_CPG_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008008_CPG_BUSY 0xBFFFFFFF
+#define S_008008_CPAXI_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008008_CPAXI_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008008_CPAXI_BUSY 0x7FFFFFFF
+#define R_008010_GRBM_STATUS 0x008010
+#define S_008010_ME0PIPE0_CMDFIFO_AVAIL(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_008010_ME0PIPE0_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x0F)
+#define C_008010_ME0PIPE0_CMDFIFO_AVAIL 0xFFFFFFF0
+#define S_008010_RSMU_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008010_RSMU_RQ_PENDING(x) (((x) >> 5) & 0x1)
+#define C_008010_RSMU_RQ_PENDING 0xFFFFFFDF
+#define S_008010_ME0PIPE0_CF_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008010_ME0PIPE0_CF_RQ_PENDING(x) (((x) >> 7) & 0x1)
+#define C_008010_ME0PIPE0_CF_RQ_PENDING 0xFFFFFF7F
+#define S_008010_ME0PIPE0_PF_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008010_ME0PIPE0_PF_RQ_PENDING(x) (((x) >> 8) & 0x1)
+#define C_008010_ME0PIPE0_PF_RQ_PENDING 0xFFFFFEFF
+#define S_008010_GDS_DMA_RQ_PENDING(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008010_GDS_DMA_RQ_PENDING(x) (((x) >> 9) & 0x1)
+#define C_008010_GDS_DMA_RQ_PENDING 0xFFFFFDFF
+#define S_008010_DB_CLEAN(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008010_DB_CLEAN(x) (((x) >> 12) & 0x1)
+#define C_008010_DB_CLEAN 0xFFFFEFFF
+#define S_008010_CB_CLEAN(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008010_CB_CLEAN(x) (((x) >> 13) & 0x1)
+#define C_008010_CB_CLEAN 0xFFFFDFFF
+#define S_008010_TA_BUSY(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008010_TA_BUSY(x) (((x) >> 14) & 0x1)
+#define C_008010_TA_BUSY 0xFFFFBFFF
+#define S_008010_GDS_BUSY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008010_GDS_BUSY(x) (((x) >> 15) & 0x1)
+#define C_008010_GDS_BUSY 0xFFFF7FFF
+#define S_008010_WD_BUSY_NO_DMA(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008010_WD_BUSY_NO_DMA(x) (((x) >> 16) & 0x1)
+#define C_008010_WD_BUSY_NO_DMA 0xFFFEFFFF
+#define S_008010_VGT_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008010_VGT_BUSY(x) (((x) >> 17) & 0x1)
+#define C_008010_VGT_BUSY 0xFFFDFFFF
+#define S_008010_IA_BUSY_NO_DMA(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008010_IA_BUSY_NO_DMA(x) (((x) >> 18) & 0x1)
+#define C_008010_IA_BUSY_NO_DMA 0xFFFBFFFF
+#define S_008010_IA_BUSY(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008010_IA_BUSY(x) (((x) >> 19) & 0x1)
+#define C_008010_IA_BUSY 0xFFF7FFFF
+#define S_008010_SX_BUSY(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008010_SX_BUSY(x) (((x) >> 20) & 0x1)
+#define C_008010_SX_BUSY 0xFFEFFFFF
+#define S_008010_WD_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008010_WD_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008010_WD_BUSY 0xFFDFFFFF
+#define S_008010_SPI_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008010_SPI_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008010_SPI_BUSY 0xFFBFFFFF
+#define S_008010_BCI_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008010_BCI_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008010_BCI_BUSY 0xFF7FFFFF
+#define S_008010_SC_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008010_SC_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008010_SC_BUSY 0xFEFFFFFF
+#define S_008010_PA_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008010_PA_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008010_PA_BUSY 0xFDFFFFFF
+#define S_008010_DB_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008010_DB_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008010_DB_BUSY 0xFBFFFFFF
+#define S_008010_CP_COHERENCY_BUSY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008010_CP_COHERENCY_BUSY(x) (((x) >> 28) & 0x1)
+#define C_008010_CP_COHERENCY_BUSY 0xEFFFFFFF
+#define S_008010_CP_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008010_CP_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008010_CP_BUSY 0xDFFFFFFF
+#define S_008010_CB_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008010_CB_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008010_CB_BUSY 0xBFFFFFFF
+#define S_008010_GUI_ACTIVE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008010_GUI_ACTIVE(x) (((x) >> 31) & 0x1)
+#define C_008010_GUI_ACTIVE 0x7FFFFFFF
+#define R_008014_GRBM_STATUS_SE0 0x008014
+#define S_008014_DB_CLEAN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008014_DB_CLEAN(x) (((x) >> 1) & 0x1)
+#define C_008014_DB_CLEAN 0xFFFFFFFD
+#define S_008014_CB_CLEAN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008014_CB_CLEAN(x) (((x) >> 2) & 0x1)
+#define C_008014_CB_CLEAN 0xFFFFFFFB
+#define S_008014_RMI_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008014_RMI_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008014_RMI_BUSY 0xFFDFFFFF
+#define S_008014_BCI_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008014_BCI_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008014_BCI_BUSY 0xFFBFFFFF
+#define S_008014_VGT_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008014_VGT_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008014_VGT_BUSY 0xFF7FFFFF
+#define S_008014_PA_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008014_PA_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008014_PA_BUSY 0xFEFFFFFF
+#define S_008014_TA_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008014_TA_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008014_TA_BUSY 0xFDFFFFFF
+#define S_008014_SX_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008014_SX_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008014_SX_BUSY 0xFBFFFFFF
+#define S_008014_SPI_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008014_SPI_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008014_SPI_BUSY 0xF7FFFFFF
+#define S_008014_SC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008014_SC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008014_SC_BUSY 0xDFFFFFFF
+#define S_008014_DB_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008014_DB_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008014_DB_BUSY 0xBFFFFFFF
+#define S_008014_CB_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008014_CB_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008014_CB_BUSY 0x7FFFFFFF
+#define R_008018_GRBM_STATUS_SE1 0x008018
+#define S_008018_DB_CLEAN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008018_DB_CLEAN(x) (((x) >> 1) & 0x1)
+#define C_008018_DB_CLEAN 0xFFFFFFFD
+#define S_008018_CB_CLEAN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008018_CB_CLEAN(x) (((x) >> 2) & 0x1)
+#define C_008018_CB_CLEAN 0xFFFFFFFB
+#define S_008018_RMI_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008018_RMI_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008018_RMI_BUSY 0xFFDFFFFF
+#define S_008018_BCI_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008018_BCI_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008018_BCI_BUSY 0xFFBFFFFF
+#define S_008018_VGT_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008018_VGT_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008018_VGT_BUSY 0xFF7FFFFF
+#define S_008018_PA_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008018_PA_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008018_PA_BUSY 0xFEFFFFFF
+#define S_008018_TA_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008018_TA_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008018_TA_BUSY 0xFDFFFFFF
+#define S_008018_SX_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008018_SX_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008018_SX_BUSY 0xFBFFFFFF
+#define S_008018_SPI_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008018_SPI_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008018_SPI_BUSY 0xF7FFFFFF
+#define S_008018_SC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008018_SC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008018_SC_BUSY 0xDFFFFFFF
+#define S_008018_DB_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008018_DB_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008018_DB_BUSY 0xBFFFFFFF
+#define S_008018_CB_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008018_CB_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008018_CB_BUSY 0x7FFFFFFF
+#define R_008038_GRBM_STATUS_SE2 0x008038
+#define S_008038_DB_CLEAN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008038_DB_CLEAN(x) (((x) >> 1) & 0x1)
+#define C_008038_DB_CLEAN 0xFFFFFFFD
+#define S_008038_CB_CLEAN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008038_CB_CLEAN(x) (((x) >> 2) & 0x1)
+#define C_008038_CB_CLEAN 0xFFFFFFFB
+#define S_008038_RMI_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008038_RMI_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008038_RMI_BUSY 0xFFDFFFFF
+#define S_008038_BCI_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008038_BCI_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008038_BCI_BUSY 0xFFBFFFFF
+#define S_008038_VGT_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008038_VGT_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008038_VGT_BUSY 0xFF7FFFFF
+#define S_008038_PA_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008038_PA_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008038_PA_BUSY 0xFEFFFFFF
+#define S_008038_TA_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008038_TA_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008038_TA_BUSY 0xFDFFFFFF
+#define S_008038_SX_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008038_SX_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008038_SX_BUSY 0xFBFFFFFF
+#define S_008038_SPI_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008038_SPI_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008038_SPI_BUSY 0xF7FFFFFF
+#define S_008038_SC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008038_SC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008038_SC_BUSY 0xDFFFFFFF
+#define S_008038_DB_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008038_DB_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008038_DB_BUSY 0xBFFFFFFF
+#define S_008038_CB_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008038_CB_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008038_CB_BUSY 0x7FFFFFFF
+#define R_00803C_GRBM_STATUS_SE3 0x00803C
+#define S_00803C_DB_CLEAN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_00803C_DB_CLEAN(x) (((x) >> 1) & 0x1)
+#define C_00803C_DB_CLEAN 0xFFFFFFFD
+#define S_00803C_CB_CLEAN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_00803C_CB_CLEAN(x) (((x) >> 2) & 0x1)
+#define C_00803C_CB_CLEAN 0xFFFFFFFB
+#define S_00803C_RMI_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00803C_RMI_BUSY(x) (((x) >> 21) & 0x1)
+#define C_00803C_RMI_BUSY 0xFFDFFFFF
+#define S_00803C_BCI_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00803C_BCI_BUSY(x) (((x) >> 22) & 0x1)
+#define C_00803C_BCI_BUSY 0xFFBFFFFF
+#define S_00803C_VGT_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00803C_VGT_BUSY(x) (((x) >> 23) & 0x1)
+#define C_00803C_VGT_BUSY 0xFF7FFFFF
+#define S_00803C_PA_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_00803C_PA_BUSY(x) (((x) >> 24) & 0x1)
+#define C_00803C_PA_BUSY 0xFEFFFFFF
+#define S_00803C_TA_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_00803C_TA_BUSY(x) (((x) >> 25) & 0x1)
+#define C_00803C_TA_BUSY 0xFDFFFFFF
+#define S_00803C_SX_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_00803C_SX_BUSY(x) (((x) >> 26) & 0x1)
+#define C_00803C_SX_BUSY 0xFBFFFFFF
+#define S_00803C_SPI_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00803C_SPI_BUSY(x) (((x) >> 27) & 0x1)
+#define C_00803C_SPI_BUSY 0xF7FFFFFF
+#define S_00803C_SC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_00803C_SC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_00803C_SC_BUSY 0xDFFFFFFF
+#define S_00803C_DB_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_00803C_DB_BUSY(x) (((x) >> 30) & 0x1)
+#define C_00803C_DB_BUSY 0xBFFFFFFF
+#define S_00803C_CB_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00803C_CB_BUSY(x) (((x) >> 31) & 0x1)
+#define C_00803C_CB_BUSY 0x7FFFFFFF
+#define R_0300FC_CP_STRMOUT_CNTL 0x0300FC
+#define S_0300FC_OFFSET_UPDATE_DONE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_0300FC_OFFSET_UPDATE_DONE(x) (((x) >> 0) & 0x1)
+#define C_0300FC_OFFSET_UPDATE_DONE 0xFFFFFFFE
+#define R_0301E4_CP_COHER_BASE_HI 0x0301E4
+#define S_0301E4_COHER_BASE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0301E4_COHER_BASE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_0301E4_COHER_BASE_HI_256B 0xFFFFFF00
+#define R_0301EC_CP_COHER_START_DELAY 0x0301EC
+#define S_0301EC_START_DELAY_COUNT(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_0301EC_START_DELAY_COUNT(x) (((x) >> 0) & 0x3F)
+#define C_0301EC_START_DELAY_COUNT 0xFFFFFFC0
+#define R_0301F0_CP_COHER_CNTL 0x0301F0
+#define S_0301F0_TC_NC_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 3)
+#define G_0301F0_TC_NC_ACTION_ENA(x) (((x) >> 3) & 0x1)
+#define C_0301F0_TC_NC_ACTION_ENA 0xFFFFFFF7
+#define S_0301F0_TC_WC_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 4)
+#define G_0301F0_TC_WC_ACTION_ENA(x) (((x) >> 4) & 0x1)
+#define C_0301F0_TC_WC_ACTION_ENA 0xFFFFFFEF
+#define S_0301F0_TC_INV_METADATA_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 5)
+#define G_0301F0_TC_INV_METADATA_ACTION_ENA(x) (((x) >> 5) & 0x1)
+#define C_0301F0_TC_INV_METADATA_ACTION_ENA 0xFFFFFFDF
+#define S_0301F0_TCL1_VOL_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 15)
+#define G_0301F0_TCL1_VOL_ACTION_ENA(x) (((x) >> 15) & 0x1)
+#define C_0301F0_TCL1_VOL_ACTION_ENA 0xFFFF7FFF
+#define S_0301F0_TC_WB_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 18)
+#define G_0301F0_TC_WB_ACTION_ENA(x) (((x) >> 18) & 0x1)
+#define C_0301F0_TC_WB_ACTION_ENA 0xFFFBFFFF
+#define S_0301F0_TCL1_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 22)
+#define G_0301F0_TCL1_ACTION_ENA(x) (((x) >> 22) & 0x1)
+#define C_0301F0_TCL1_ACTION_ENA 0xFFBFFFFF
+#define S_0301F0_TC_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 23)
+#define G_0301F0_TC_ACTION_ENA(x) (((x) >> 23) & 0x1)
+#define C_0301F0_TC_ACTION_ENA 0xFF7FFFFF
+#define S_0301F0_CB_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 25)
+#define G_0301F0_CB_ACTION_ENA(x) (((x) >> 25) & 0x1)
+#define C_0301F0_CB_ACTION_ENA 0xFDFFFFFF
+#define S_0301F0_DB_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 26)
+#define G_0301F0_DB_ACTION_ENA(x) (((x) >> 26) & 0x1)
+#define C_0301F0_DB_ACTION_ENA 0xFBFFFFFF
+#define S_0301F0_SH_KCACHE_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 27)
+#define G_0301F0_SH_KCACHE_ACTION_ENA(x) (((x) >> 27) & 0x1)
+#define C_0301F0_SH_KCACHE_ACTION_ENA 0xF7FFFFFF
+#define S_0301F0_SH_KCACHE_VOL_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 28)
+#define G_0301F0_SH_KCACHE_VOL_ACTION_ENA(x) (((x) >> 28) & 0x1)
+#define C_0301F0_SH_KCACHE_VOL_ACTION_ENA 0xEFFFFFFF
+#define S_0301F0_SH_ICACHE_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 29)
+#define G_0301F0_SH_ICACHE_ACTION_ENA(x) (((x) >> 29) & 0x1)
+#define C_0301F0_SH_ICACHE_ACTION_ENA 0xDFFFFFFF
+#define S_0301F0_SH_KCACHE_WB_ACTION_ENA(x) (((unsigned)(x) & 0x1) << 30)
+#define G_0301F0_SH_KCACHE_WB_ACTION_ENA(x) (((x) >> 30) & 0x1)
+#define C_0301F0_SH_KCACHE_WB_ACTION_ENA 0xBFFFFFFF
+#define R_0301F4_CP_COHER_SIZE 0x0301F4
+#define R_0301F8_CP_COHER_BASE 0x0301F8
+#define R_0301FC_CP_COHER_STATUS 0x0301FC
+#define S_0301FC_MEID(x) (((unsigned)(x) & 0x03) << 24)
+#define G_0301FC_MEID(x) (((x) >> 24) & 0x03)
+#define C_0301FC_MEID 0xFCFFFFFF
+#define S_0301FC_STATUS(x) (((unsigned)(x) & 0x1) << 31)
+#define G_0301FC_STATUS(x) (((x) >> 31) & 0x1)
+#define C_0301FC_STATUS 0x7FFFFFFF
+#define R_008210_CP_CPC_STATUS 0x008210
+#define S_008210_MEC1_BUSY(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008210_MEC1_BUSY(x) (((x) >> 0) & 0x1)
+#define C_008210_MEC1_BUSY 0xFFFFFFFE
+#define S_008210_MEC2_BUSY(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008210_MEC2_BUSY(x) (((x) >> 1) & 0x1)
+#define C_008210_MEC2_BUSY 0xFFFFFFFD
+#define S_008210_DC0_BUSY(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008210_DC0_BUSY(x) (((x) >> 2) & 0x1)
+#define C_008210_DC0_BUSY 0xFFFFFFFB
+#define S_008210_DC1_BUSY(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008210_DC1_BUSY(x) (((x) >> 3) & 0x1)
+#define C_008210_DC1_BUSY 0xFFFFFFF7
+#define S_008210_RCIU1_BUSY(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008210_RCIU1_BUSY(x) (((x) >> 4) & 0x1)
+#define C_008210_RCIU1_BUSY 0xFFFFFFEF
+#define S_008210_RCIU2_BUSY(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008210_RCIU2_BUSY(x) (((x) >> 5) & 0x1)
+#define C_008210_RCIU2_BUSY 0xFFFFFFDF
+#define S_008210_ROQ1_BUSY(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008210_ROQ1_BUSY(x) (((x) >> 6) & 0x1)
+#define C_008210_ROQ1_BUSY 0xFFFFFFBF
+#define S_008210_ROQ2_BUSY(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008210_ROQ2_BUSY(x) (((x) >> 7) & 0x1)
+#define C_008210_ROQ2_BUSY 0xFFFFFF7F
+#define S_008210_TCIU_BUSY(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008210_TCIU_BUSY(x) (((x) >> 10) & 0x1)
+#define C_008210_TCIU_BUSY 0xFFFFFBFF
+#define S_008210_SCRATCH_RAM_BUSY(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008210_SCRATCH_RAM_BUSY(x) (((x) >> 11) & 0x1)
+#define C_008210_SCRATCH_RAM_BUSY 0xFFFFF7FF
+#define S_008210_QU_BUSY(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008210_QU_BUSY(x) (((x) >> 12) & 0x1)
+#define C_008210_QU_BUSY 0xFFFFEFFF
+#define S_008210_UTCL2IU_BUSY(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008210_UTCL2IU_BUSY(x) (((x) >> 13) & 0x1)
+#define C_008210_UTCL2IU_BUSY 0xFFFFDFFF
+#define S_008210_SAVE_RESTORE_BUSY(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008210_SAVE_RESTORE_BUSY(x) (((x) >> 14) & 0x1)
+#define C_008210_SAVE_RESTORE_BUSY 0xFFFFBFFF
+#define S_008210_CPG_CPC_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008210_CPG_CPC_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008210_CPG_CPC_BUSY 0xDFFFFFFF
+#define S_008210_CPF_CPC_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008210_CPF_CPC_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008210_CPF_CPC_BUSY 0xBFFFFFFF
+#define S_008210_CPC_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008210_CPC_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008210_CPC_BUSY 0x7FFFFFFF
+#define R_008214_CP_CPC_BUSY_STAT 0x008214
+#define S_008214_MEC1_LOAD_BUSY(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008214_MEC1_LOAD_BUSY(x) (((x) >> 0) & 0x1)
+#define C_008214_MEC1_LOAD_BUSY 0xFFFFFFFE
+#define S_008214_MEC1_SEMAPOHRE_BUSY(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008214_MEC1_SEMAPOHRE_BUSY(x) (((x) >> 1) & 0x1)
+#define C_008214_MEC1_SEMAPOHRE_BUSY 0xFFFFFFFD
+#define S_008214_MEC1_MUTEX_BUSY(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008214_MEC1_MUTEX_BUSY(x) (((x) >> 2) & 0x1)
+#define C_008214_MEC1_MUTEX_BUSY 0xFFFFFFFB
+#define S_008214_MEC1_MESSAGE_BUSY(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008214_MEC1_MESSAGE_BUSY(x) (((x) >> 3) & 0x1)
+#define C_008214_MEC1_MESSAGE_BUSY 0xFFFFFFF7
+#define S_008214_MEC1_EOP_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008214_MEC1_EOP_QUEUE_BUSY(x) (((x) >> 4) & 0x1)
+#define C_008214_MEC1_EOP_QUEUE_BUSY 0xFFFFFFEF
+#define S_008214_MEC1_IQ_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008214_MEC1_IQ_QUEUE_BUSY(x) (((x) >> 5) & 0x1)
+#define C_008214_MEC1_IQ_QUEUE_BUSY 0xFFFFFFDF
+#define S_008214_MEC1_IB_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008214_MEC1_IB_QUEUE_BUSY(x) (((x) >> 6) & 0x1)
+#define C_008214_MEC1_IB_QUEUE_BUSY 0xFFFFFFBF
+#define S_008214_MEC1_TC_BUSY(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008214_MEC1_TC_BUSY(x) (((x) >> 7) & 0x1)
+#define C_008214_MEC1_TC_BUSY 0xFFFFFF7F
+#define S_008214_MEC1_DMA_BUSY(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008214_MEC1_DMA_BUSY(x) (((x) >> 8) & 0x1)
+#define C_008214_MEC1_DMA_BUSY 0xFFFFFEFF
+#define S_008214_MEC1_PARTIAL_FLUSH_BUSY(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008214_MEC1_PARTIAL_FLUSH_BUSY(x) (((x) >> 9) & 0x1)
+#define C_008214_MEC1_PARTIAL_FLUSH_BUSY 0xFFFFFDFF
+#define S_008214_MEC1_PIPE0_BUSY(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008214_MEC1_PIPE0_BUSY(x) (((x) >> 10) & 0x1)
+#define C_008214_MEC1_PIPE0_BUSY 0xFFFFFBFF
+#define S_008214_MEC1_PIPE1_BUSY(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008214_MEC1_PIPE1_BUSY(x) (((x) >> 11) & 0x1)
+#define C_008214_MEC1_PIPE1_BUSY 0xFFFFF7FF
+#define S_008214_MEC1_PIPE2_BUSY(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008214_MEC1_PIPE2_BUSY(x) (((x) >> 12) & 0x1)
+#define C_008214_MEC1_PIPE2_BUSY 0xFFFFEFFF
+#define S_008214_MEC1_PIPE3_BUSY(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008214_MEC1_PIPE3_BUSY(x) (((x) >> 13) & 0x1)
+#define C_008214_MEC1_PIPE3_BUSY 0xFFFFDFFF
+#define S_008214_MEC2_LOAD_BUSY(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008214_MEC2_LOAD_BUSY(x) (((x) >> 16) & 0x1)
+#define C_008214_MEC2_LOAD_BUSY 0xFFFEFFFF
+#define S_008214_MEC2_SEMAPOHRE_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008214_MEC2_SEMAPOHRE_BUSY(x) (((x) >> 17) & 0x1)
+#define C_008214_MEC2_SEMAPOHRE_BUSY 0xFFFDFFFF
+#define S_008214_MEC2_MUTEX_BUSY(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008214_MEC2_MUTEX_BUSY(x) (((x) >> 18) & 0x1)
+#define C_008214_MEC2_MUTEX_BUSY 0xFFFBFFFF
+#define S_008214_MEC2_MESSAGE_BUSY(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008214_MEC2_MESSAGE_BUSY(x) (((x) >> 19) & 0x1)
+#define C_008214_MEC2_MESSAGE_BUSY 0xFFF7FFFF
+#define S_008214_MEC2_EOP_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008214_MEC2_EOP_QUEUE_BUSY(x) (((x) >> 20) & 0x1)
+#define C_008214_MEC2_EOP_QUEUE_BUSY 0xFFEFFFFF
+#define S_008214_MEC2_IQ_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008214_MEC2_IQ_QUEUE_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008214_MEC2_IQ_QUEUE_BUSY 0xFFDFFFFF
+#define S_008214_MEC2_IB_QUEUE_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008214_MEC2_IB_QUEUE_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008214_MEC2_IB_QUEUE_BUSY 0xFFBFFFFF
+#define S_008214_MEC2_TC_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008214_MEC2_TC_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008214_MEC2_TC_BUSY 0xFF7FFFFF
+#define S_008214_MEC2_DMA_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008214_MEC2_DMA_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008214_MEC2_DMA_BUSY 0xFEFFFFFF
+#define S_008214_MEC2_PARTIAL_FLUSH_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008214_MEC2_PARTIAL_FLUSH_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008214_MEC2_PARTIAL_FLUSH_BUSY 0xFDFFFFFF
+#define S_008214_MEC2_PIPE0_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008214_MEC2_PIPE0_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008214_MEC2_PIPE0_BUSY 0xFBFFFFFF
+#define S_008214_MEC2_PIPE1_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008214_MEC2_PIPE1_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008214_MEC2_PIPE1_BUSY 0xF7FFFFFF
+#define S_008214_MEC2_PIPE2_BUSY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008214_MEC2_PIPE2_BUSY(x) (((x) >> 28) & 0x1)
+#define C_008214_MEC2_PIPE2_BUSY 0xEFFFFFFF
+#define S_008214_MEC2_PIPE3_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008214_MEC2_PIPE3_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008214_MEC2_PIPE3_BUSY 0xDFFFFFFF
+#define R_008218_CP_CPC_STALLED_STAT1 0x008218
+#define S_008218_RCIU_TX_FREE_STALL(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008218_RCIU_TX_FREE_STALL(x) (((x) >> 3) & 0x1)
+#define C_008218_RCIU_TX_FREE_STALL 0xFFFFFFF7
+#define S_008218_RCIU_PRIV_VIOLATION(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008218_RCIU_PRIV_VIOLATION(x) (((x) >> 4) & 0x1)
+#define C_008218_RCIU_PRIV_VIOLATION 0xFFFFFFEF
+#define S_008218_TCIU_TX_FREE_STALL(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008218_TCIU_TX_FREE_STALL(x) (((x) >> 6) & 0x1)
+#define C_008218_TCIU_TX_FREE_STALL 0xFFFFFFBF
+#define S_008218_MEC1_DECODING_PACKET(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008218_MEC1_DECODING_PACKET(x) (((x) >> 8) & 0x1)
+#define C_008218_MEC1_DECODING_PACKET 0xFFFFFEFF
+#define S_008218_MEC1_WAIT_ON_RCIU(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008218_MEC1_WAIT_ON_RCIU(x) (((x) >> 9) & 0x1)
+#define C_008218_MEC1_WAIT_ON_RCIU 0xFFFFFDFF
+#define S_008218_MEC1_WAIT_ON_RCIU_READ(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008218_MEC1_WAIT_ON_RCIU_READ(x) (((x) >> 10) & 0x1)
+#define C_008218_MEC1_WAIT_ON_RCIU_READ 0xFFFFFBFF
+#define S_008218_MEC1_WAIT_ON_ROQ_DATA(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008218_MEC1_WAIT_ON_ROQ_DATA(x) (((x) >> 13) & 0x1)
+#define C_008218_MEC1_WAIT_ON_ROQ_DATA 0xFFFFDFFF
+#define S_008218_MEC2_DECODING_PACKET(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008218_MEC2_DECODING_PACKET(x) (((x) >> 16) & 0x1)
+#define C_008218_MEC2_DECODING_PACKET 0xFFFEFFFF
+#define S_008218_MEC2_WAIT_ON_RCIU(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008218_MEC2_WAIT_ON_RCIU(x) (((x) >> 17) & 0x1)
+#define C_008218_MEC2_WAIT_ON_RCIU 0xFFFDFFFF
+#define S_008218_MEC2_WAIT_ON_RCIU_READ(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008218_MEC2_WAIT_ON_RCIU_READ(x) (((x) >> 18) & 0x1)
+#define C_008218_MEC2_WAIT_ON_RCIU_READ 0xFFFBFFFF
+#define S_008218_MEC2_WAIT_ON_ROQ_DATA(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008218_MEC2_WAIT_ON_ROQ_DATA(x) (((x) >> 21) & 0x1)
+#define C_008218_MEC2_WAIT_ON_ROQ_DATA 0xFFDFFFFF
+#define S_008218_UTCL2IU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008218_UTCL2IU_WAITING_ON_FREE(x) (((x) >> 22) & 0x1)
+#define C_008218_UTCL2IU_WAITING_ON_FREE 0xFFBFFFFF
+#define S_008218_UTCL2IU_WAITING_ON_TAGS(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008218_UTCL2IU_WAITING_ON_TAGS(x) (((x) >> 23) & 0x1)
+#define C_008218_UTCL2IU_WAITING_ON_TAGS 0xFF7FFFFF
+#define S_008218_UTCL1_WAITING_ON_TRANS(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008218_UTCL1_WAITING_ON_TRANS(x) (((x) >> 24) & 0x1)
+#define C_008218_UTCL1_WAITING_ON_TRANS 0xFEFFFFFF
+#define R_00821C_CP_CPF_STATUS 0x00821C
+#define S_00821C_POST_WPTR_GFX_BUSY(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00821C_POST_WPTR_GFX_BUSY(x) (((x) >> 0) & 0x1)
+#define C_00821C_POST_WPTR_GFX_BUSY 0xFFFFFFFE
+#define S_00821C_CSF_BUSY(x) (((unsigned)(x) & 0x1) << 1)
+#define G_00821C_CSF_BUSY(x) (((x) >> 1) & 0x1)
+#define C_00821C_CSF_BUSY 0xFFFFFFFD
+#define S_00821C_ROQ_ALIGN_BUSY(x) (((unsigned)(x) & 0x1) << 4)
+#define G_00821C_ROQ_ALIGN_BUSY(x) (((x) >> 4) & 0x1)
+#define C_00821C_ROQ_ALIGN_BUSY 0xFFFFFFEF
+#define S_00821C_ROQ_RING_BUSY(x) (((unsigned)(x) & 0x1) << 5)
+#define G_00821C_ROQ_RING_BUSY(x) (((x) >> 5) & 0x1)
+#define C_00821C_ROQ_RING_BUSY 0xFFFFFFDF
+#define S_00821C_ROQ_INDIRECT1_BUSY(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00821C_ROQ_INDIRECT1_BUSY(x) (((x) >> 6) & 0x1)
+#define C_00821C_ROQ_INDIRECT1_BUSY 0xFFFFFFBF
+#define S_00821C_ROQ_INDIRECT2_BUSY(x) (((unsigned)(x) & 0x1) << 7)
+#define G_00821C_ROQ_INDIRECT2_BUSY(x) (((x) >> 7) & 0x1)
+#define C_00821C_ROQ_INDIRECT2_BUSY 0xFFFFFF7F
+#define S_00821C_ROQ_STATE_BUSY(x) (((unsigned)(x) & 0x1) << 8)
+#define G_00821C_ROQ_STATE_BUSY(x) (((x) >> 8) & 0x1)
+#define C_00821C_ROQ_STATE_BUSY 0xFFFFFEFF
+#define S_00821C_ROQ_CE_RING_BUSY(x) (((unsigned)(x) & 0x1) << 9)
+#define G_00821C_ROQ_CE_RING_BUSY(x) (((x) >> 9) & 0x1)
+#define C_00821C_ROQ_CE_RING_BUSY 0xFFFFFDFF
+#define S_00821C_ROQ_CE_INDIRECT1_BUSY(x) (((unsigned)(x) & 0x1) << 10)
+#define G_00821C_ROQ_CE_INDIRECT1_BUSY(x) (((x) >> 10) & 0x1)
+#define C_00821C_ROQ_CE_INDIRECT1_BUSY 0xFFFFFBFF
+#define S_00821C_ROQ_CE_INDIRECT2_BUSY(x) (((unsigned)(x) & 0x1) << 11)
+#define G_00821C_ROQ_CE_INDIRECT2_BUSY(x) (((x) >> 11) & 0x1)
+#define C_00821C_ROQ_CE_INDIRECT2_BUSY 0xFFFFF7FF
+#define S_00821C_SEMAPHORE_BUSY(x) (((unsigned)(x) & 0x1) << 12)
+#define G_00821C_SEMAPHORE_BUSY(x) (((x) >> 12) & 0x1)
+#define C_00821C_SEMAPHORE_BUSY 0xFFFFEFFF
+#define S_00821C_INTERRUPT_BUSY(x) (((unsigned)(x) & 0x1) << 13)
+#define G_00821C_INTERRUPT_BUSY(x) (((x) >> 13) & 0x1)
+#define C_00821C_INTERRUPT_BUSY 0xFFFFDFFF
+#define S_00821C_TCIU_BUSY(x) (((unsigned)(x) & 0x1) << 14)
+#define G_00821C_TCIU_BUSY(x) (((x) >> 14) & 0x1)
+#define C_00821C_TCIU_BUSY 0xFFFFBFFF
+#define S_00821C_HQD_BUSY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_00821C_HQD_BUSY(x) (((x) >> 15) & 0x1)
+#define C_00821C_HQD_BUSY 0xFFFF7FFF
+#define S_00821C_PRT_BUSY(x) (((unsigned)(x) & 0x1) << 16)
+#define G_00821C_PRT_BUSY(x) (((x) >> 16) & 0x1)
+#define C_00821C_PRT_BUSY 0xFFFEFFFF
+#define S_00821C_UTCL2IU_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_00821C_UTCL2IU_BUSY(x) (((x) >> 17) & 0x1)
+#define C_00821C_UTCL2IU_BUSY 0xFFFDFFFF
+#define S_00821C_CPF_GFX_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_00821C_CPF_GFX_BUSY(x) (((x) >> 26) & 0x1)
+#define C_00821C_CPF_GFX_BUSY 0xFBFFFFFF
+#define S_00821C_CPF_CMP_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00821C_CPF_CMP_BUSY(x) (((x) >> 27) & 0x1)
+#define C_00821C_CPF_CMP_BUSY 0xF7FFFFFF
+#define S_00821C_GRBM_CPF_STAT_BUSY(x) (((unsigned)(x) & 0x03) << 28)
+#define G_00821C_GRBM_CPF_STAT_BUSY(x) (((x) >> 28) & 0x03)
+#define C_00821C_GRBM_CPF_STAT_BUSY 0xCFFFFFFF
+#define S_00821C_CPC_CPF_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_00821C_CPC_CPF_BUSY(x) (((x) >> 30) & 0x1)
+#define C_00821C_CPC_CPF_BUSY 0xBFFFFFFF
+#define S_00821C_CPF_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00821C_CPF_BUSY(x) (((x) >> 31) & 0x1)
+#define C_00821C_CPF_BUSY 0x7FFFFFFF
+#define R_008220_CP_CPF_BUSY_STAT 0x008220
+#define S_008220_REG_BUS_FIFO_BUSY(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008220_REG_BUS_FIFO_BUSY(x) (((x) >> 0) & 0x1)
+#define C_008220_REG_BUS_FIFO_BUSY 0xFFFFFFFE
+#define S_008220_CSF_RING_BUSY(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008220_CSF_RING_BUSY(x) (((x) >> 1) & 0x1)
+#define C_008220_CSF_RING_BUSY 0xFFFFFFFD
+#define S_008220_CSF_INDIRECT1_BUSY(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008220_CSF_INDIRECT1_BUSY(x) (((x) >> 2) & 0x1)
+#define C_008220_CSF_INDIRECT1_BUSY 0xFFFFFFFB
+#define S_008220_CSF_INDIRECT2_BUSY(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008220_CSF_INDIRECT2_BUSY(x) (((x) >> 3) & 0x1)
+#define C_008220_CSF_INDIRECT2_BUSY 0xFFFFFFF7
+#define S_008220_CSF_STATE_BUSY(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008220_CSF_STATE_BUSY(x) (((x) >> 4) & 0x1)
+#define C_008220_CSF_STATE_BUSY 0xFFFFFFEF
+#define S_008220_CSF_CE_INDR1_BUSY(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008220_CSF_CE_INDR1_BUSY(x) (((x) >> 5) & 0x1)
+#define C_008220_CSF_CE_INDR1_BUSY 0xFFFFFFDF
+#define S_008220_CSF_CE_INDR2_BUSY(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008220_CSF_CE_INDR2_BUSY(x) (((x) >> 6) & 0x1)
+#define C_008220_CSF_CE_INDR2_BUSY 0xFFFFFFBF
+#define S_008220_CSF_ARBITER_BUSY(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008220_CSF_ARBITER_BUSY(x) (((x) >> 7) & 0x1)
+#define C_008220_CSF_ARBITER_BUSY 0xFFFFFF7F
+#define S_008220_CSF_INPUT_BUSY(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008220_CSF_INPUT_BUSY(x) (((x) >> 8) & 0x1)
+#define C_008220_CSF_INPUT_BUSY 0xFFFFFEFF
+#define S_008220_OUTSTANDING_READ_TAGS(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008220_OUTSTANDING_READ_TAGS(x) (((x) >> 9) & 0x1)
+#define C_008220_OUTSTANDING_READ_TAGS 0xFFFFFDFF
+#define S_008220_HPD_PROCESSING_EOP_BUSY(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008220_HPD_PROCESSING_EOP_BUSY(x) (((x) >> 11) & 0x1)
+#define C_008220_HPD_PROCESSING_EOP_BUSY 0xFFFFF7FF
+#define S_008220_HQD_DISPATCH_BUSY(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008220_HQD_DISPATCH_BUSY(x) (((x) >> 12) & 0x1)
+#define C_008220_HQD_DISPATCH_BUSY 0xFFFFEFFF
+#define S_008220_HQD_IQ_TIMER_BUSY(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008220_HQD_IQ_TIMER_BUSY(x) (((x) >> 13) & 0x1)
+#define C_008220_HQD_IQ_TIMER_BUSY 0xFFFFDFFF
+#define S_008220_HQD_DMA_OFFLOAD_BUSY(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008220_HQD_DMA_OFFLOAD_BUSY(x) (((x) >> 14) & 0x1)
+#define C_008220_HQD_DMA_OFFLOAD_BUSY 0xFFFFBFFF
+#define S_008220_HQD_WAIT_SEMAPHORE_BUSY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008220_HQD_WAIT_SEMAPHORE_BUSY(x) (((x) >> 15) & 0x1)
+#define C_008220_HQD_WAIT_SEMAPHORE_BUSY 0xFFFF7FFF
+#define S_008220_HQD_SIGNAL_SEMAPHORE_BUSY(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008220_HQD_SIGNAL_SEMAPHORE_BUSY(x) (((x) >> 16) & 0x1)
+#define C_008220_HQD_SIGNAL_SEMAPHORE_BUSY 0xFFFEFFFF
+#define S_008220_HQD_MESSAGE_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008220_HQD_MESSAGE_BUSY(x) (((x) >> 17) & 0x1)
+#define C_008220_HQD_MESSAGE_BUSY 0xFFFDFFFF
+#define S_008220_HQD_PQ_FETCHER_BUSY(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008220_HQD_PQ_FETCHER_BUSY(x) (((x) >> 18) & 0x1)
+#define C_008220_HQD_PQ_FETCHER_BUSY 0xFFFBFFFF
+#define S_008220_HQD_IB_FETCHER_BUSY(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008220_HQD_IB_FETCHER_BUSY(x) (((x) >> 19) & 0x1)
+#define C_008220_HQD_IB_FETCHER_BUSY 0xFFF7FFFF
+#define S_008220_HQD_IQ_FETCHER_BUSY(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008220_HQD_IQ_FETCHER_BUSY(x) (((x) >> 20) & 0x1)
+#define C_008220_HQD_IQ_FETCHER_BUSY 0xFFEFFFFF
+#define S_008220_HQD_EOP_FETCHER_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008220_HQD_EOP_FETCHER_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008220_HQD_EOP_FETCHER_BUSY 0xFFDFFFFF
+#define S_008220_HQD_CONSUMED_RPTR_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008220_HQD_CONSUMED_RPTR_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008220_HQD_CONSUMED_RPTR_BUSY 0xFFBFFFFF
+#define S_008220_HQD_FETCHER_ARB_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008220_HQD_FETCHER_ARB_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008220_HQD_FETCHER_ARB_BUSY 0xFF7FFFFF
+#define S_008220_HQD_ROQ_ALIGN_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008220_HQD_ROQ_ALIGN_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008220_HQD_ROQ_ALIGN_BUSY 0xFEFFFFFF
+#define S_008220_HQD_ROQ_EOP_BUSY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008220_HQD_ROQ_EOP_BUSY(x) (((x) >> 25) & 0x1)
+#define C_008220_HQD_ROQ_EOP_BUSY 0xFDFFFFFF
+#define S_008220_HQD_ROQ_IQ_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008220_HQD_ROQ_IQ_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008220_HQD_ROQ_IQ_BUSY 0xFBFFFFFF
+#define S_008220_HQD_ROQ_PQ_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008220_HQD_ROQ_PQ_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008220_HQD_ROQ_PQ_BUSY 0xF7FFFFFF
+#define S_008220_HQD_ROQ_IB_BUSY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008220_HQD_ROQ_IB_BUSY(x) (((x) >> 28) & 0x1)
+#define C_008220_HQD_ROQ_IB_BUSY 0xEFFFFFFF
+#define S_008220_HQD_WPTR_POLL_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008220_HQD_WPTR_POLL_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008220_HQD_WPTR_POLL_BUSY 0xDFFFFFFF
+#define S_008220_HQD_PQ_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008220_HQD_PQ_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008220_HQD_PQ_BUSY 0xBFFFFFFF
+#define S_008220_HQD_IB_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008220_HQD_IB_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008220_HQD_IB_BUSY 0x7FFFFFFF
+#define R_008224_CP_CPF_STALLED_STAT1 0x008224
+#define S_008224_RING_FETCHING_DATA(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008224_RING_FETCHING_DATA(x) (((x) >> 0) & 0x1)
+#define C_008224_RING_FETCHING_DATA 0xFFFFFFFE
+#define S_008224_INDR1_FETCHING_DATA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008224_INDR1_FETCHING_DATA(x) (((x) >> 1) & 0x1)
+#define C_008224_INDR1_FETCHING_DATA 0xFFFFFFFD
+#define S_008224_INDR2_FETCHING_DATA(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008224_INDR2_FETCHING_DATA(x) (((x) >> 2) & 0x1)
+#define C_008224_INDR2_FETCHING_DATA 0xFFFFFFFB
+#define S_008224_STATE_FETCHING_DATA(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008224_STATE_FETCHING_DATA(x) (((x) >> 3) & 0x1)
+#define C_008224_STATE_FETCHING_DATA 0xFFFFFFF7
+#define S_008224_TCIU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008224_TCIU_WAITING_ON_FREE(x) (((x) >> 5) & 0x1)
+#define C_008224_TCIU_WAITING_ON_FREE 0xFFFFFFDF
+#define S_008224_TCIU_WAITING_ON_TAGS(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008224_TCIU_WAITING_ON_TAGS(x) (((x) >> 6) & 0x1)
+#define C_008224_TCIU_WAITING_ON_TAGS 0xFFFFFFBF
+#define S_008224_UTCL2IU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008224_UTCL2IU_WAITING_ON_FREE(x) (((x) >> 7) & 0x1)
+#define C_008224_UTCL2IU_WAITING_ON_FREE 0xFFFFFF7F
+#define S_008224_UTCL2IU_WAITING_ON_TAGS(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008224_UTCL2IU_WAITING_ON_TAGS(x) (((x) >> 8) & 0x1)
+#define C_008224_UTCL2IU_WAITING_ON_TAGS 0xFFFFFEFF
+#define S_008224_GFX_UTCL1_WAITING_ON_TRANS(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008224_GFX_UTCL1_WAITING_ON_TRANS(x) (((x) >> 9) & 0x1)
+#define C_008224_GFX_UTCL1_WAITING_ON_TRANS 0xFFFFFDFF
+#define S_008224_CMP_UTCL1_WAITING_ON_TRANS(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008224_CMP_UTCL1_WAITING_ON_TRANS(x) (((x) >> 10) & 0x1)
+#define C_008224_CMP_UTCL1_WAITING_ON_TRANS 0xFFFFFBFF
+#define S_008224_RCIU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008224_RCIU_WAITING_ON_FREE(x) (((x) >> 11) & 0x1)
+#define C_008224_RCIU_WAITING_ON_FREE 0xFFFFF7FF
+#define R_030230_CP_COHER_SIZE_HI 0x030230
+#define S_030230_COHER_SIZE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030230_COHER_SIZE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_030230_COHER_SIZE_HI_256B 0xFFFFFF00
+#define R_008670_CP_STALLED_STAT3 0x008670
+#define S_008670_CE_TO_CSF_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008670_CE_TO_CSF_NOT_RDY_TO_RCV(x) (((x) >> 0) & 0x1)
+#define C_008670_CE_TO_CSF_NOT_RDY_TO_RCV 0xFFFFFFFE
+#define S_008670_CE_TO_RAM_INIT_FETCHER_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008670_CE_TO_RAM_INIT_FETCHER_NOT_RDY_TO_RCV(x) (((x) >> 1) & 0x1)
+#define C_008670_CE_TO_RAM_INIT_FETCHER_NOT_RDY_TO_RCV 0xFFFFFFFD
+#define S_008670_CE_WAITING_ON_DATA_FROM_RAM_INIT_FETCHER(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008670_CE_WAITING_ON_DATA_FROM_RAM_INIT_FETCHER(x) (((x) >> 2) & 0x1)
+#define C_008670_CE_WAITING_ON_DATA_FROM_RAM_INIT_FETCHER 0xFFFFFFFB
+#define S_008670_CE_TO_RAM_INIT_NOT_RDY(x) (((unsigned)(x) & 0x1) << 3)
+#define G_008670_CE_TO_RAM_INIT_NOT_RDY(x) (((x) >> 3) & 0x1)
+#define C_008670_CE_TO_RAM_INIT_NOT_RDY 0xFFFFFFF7
+#define S_008670_CE_TO_RAM_DUMP_NOT_RDY(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008670_CE_TO_RAM_DUMP_NOT_RDY(x) (((x) >> 4) & 0x1)
+#define C_008670_CE_TO_RAM_DUMP_NOT_RDY 0xFFFFFFEF
+#define S_008670_CE_TO_RAM_WRITE_NOT_RDY(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008670_CE_TO_RAM_WRITE_NOT_RDY(x) (((x) >> 5) & 0x1)
+#define C_008670_CE_TO_RAM_WRITE_NOT_RDY 0xFFFFFFDF
+#define S_008670_CE_TO_INC_FIFO_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 6)
+#define G_008670_CE_TO_INC_FIFO_NOT_RDY_TO_RCV(x) (((x) >> 6) & 0x1)
+#define C_008670_CE_TO_INC_FIFO_NOT_RDY_TO_RCV 0xFFFFFFBF
+#define S_008670_CE_TO_WR_FIFO_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 7)
+#define G_008670_CE_TO_WR_FIFO_NOT_RDY_TO_RCV(x) (((x) >> 7) & 0x1)
+#define C_008670_CE_TO_WR_FIFO_NOT_RDY_TO_RCV 0xFFFFFF7F
+#define S_008670_CE_WAITING_ON_BUFFER_DATA(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008670_CE_WAITING_ON_BUFFER_DATA(x) (((x) >> 10) & 0x1)
+#define C_008670_CE_WAITING_ON_BUFFER_DATA 0xFFFFFBFF
+#define S_008670_CE_WAITING_ON_CE_BUFFER_FLAG(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008670_CE_WAITING_ON_CE_BUFFER_FLAG(x) (((x) >> 11) & 0x1)
+#define C_008670_CE_WAITING_ON_CE_BUFFER_FLAG 0xFFFFF7FF
+#define S_008670_CE_WAITING_ON_DE_COUNTER(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008670_CE_WAITING_ON_DE_COUNTER(x) (((x) >> 12) & 0x1)
+#define C_008670_CE_WAITING_ON_DE_COUNTER 0xFFFFEFFF
+#define S_008670_CE_WAITING_ON_DE_COUNTER_UNDERFLOW(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008670_CE_WAITING_ON_DE_COUNTER_UNDERFLOW(x) (((x) >> 13) & 0x1)
+#define C_008670_CE_WAITING_ON_DE_COUNTER_UNDERFLOW 0xFFFFDFFF
+#define S_008670_TCIU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008670_TCIU_WAITING_ON_FREE(x) (((x) >> 14) & 0x1)
+#define C_008670_TCIU_WAITING_ON_FREE 0xFFFFBFFF
+#define S_008670_TCIU_WAITING_ON_TAGS(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008670_TCIU_WAITING_ON_TAGS(x) (((x) >> 15) & 0x1)
+#define C_008670_TCIU_WAITING_ON_TAGS 0xFFFF7FFF
+#define S_008670_CE_STALLED_ON_TC_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008670_CE_STALLED_ON_TC_WR_CONFIRM(x) (((x) >> 16) & 0x1)
+#define C_008670_CE_STALLED_ON_TC_WR_CONFIRM 0xFFFEFFFF
+#define S_008670_CE_STALLED_ON_ATOMIC_RTN_DATA(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008670_CE_STALLED_ON_ATOMIC_RTN_DATA(x) (((x) >> 17) & 0x1)
+#define C_008670_CE_STALLED_ON_ATOMIC_RTN_DATA 0xFFFDFFFF
+#define S_008670_UTCL2IU_WAITING_ON_FREE(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008670_UTCL2IU_WAITING_ON_FREE(x) (((x) >> 18) & 0x1)
+#define C_008670_UTCL2IU_WAITING_ON_FREE 0xFFFBFFFF
+#define S_008670_UTCL2IU_WAITING_ON_TAGS(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008670_UTCL2IU_WAITING_ON_TAGS(x) (((x) >> 19) & 0x1)
+#define C_008670_UTCL2IU_WAITING_ON_TAGS 0xFFF7FFFF
+#define S_008670_UTCL1_WAITING_ON_TRANS(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008670_UTCL1_WAITING_ON_TRANS(x) (((x) >> 20) & 0x1)
+#define C_008670_UTCL1_WAITING_ON_TRANS 0xFFEFFFFF
+#define R_008674_CP_STALLED_STAT1 0x008674
+#define S_008674_RBIU_TO_DMA_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008674_RBIU_TO_DMA_NOT_RDY_TO_RCV(x) (((x) >> 0) & 0x1)
+#define C_008674_RBIU_TO_DMA_NOT_RDY_TO_RCV 0xFFFFFFFE
+#define S_008674_RBIU_TO_SEM_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008674_RBIU_TO_SEM_NOT_RDY_TO_RCV(x) (((x) >> 2) & 0x1)
+#define C_008674_RBIU_TO_SEM_NOT_RDY_TO_RCV 0xFFFFFFFB
+#define S_008674_RBIU_TO_MEMWR_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008674_RBIU_TO_MEMWR_NOT_RDY_TO_RCV(x) (((x) >> 4) & 0x1)
+#define C_008674_RBIU_TO_MEMWR_NOT_RDY_TO_RCV 0xFFFFFFEF
+#define S_008674_ME_HAS_ACTIVE_CE_BUFFER_FLAG(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008674_ME_HAS_ACTIVE_CE_BUFFER_FLAG(x) (((x) >> 10) & 0x1)
+#define C_008674_ME_HAS_ACTIVE_CE_BUFFER_FLAG 0xFFFFFBFF
+#define S_008674_ME_HAS_ACTIVE_DE_BUFFER_FLAG(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008674_ME_HAS_ACTIVE_DE_BUFFER_FLAG(x) (((x) >> 11) & 0x1)
+#define C_008674_ME_HAS_ACTIVE_DE_BUFFER_FLAG 0xFFFFF7FF
+#define S_008674_ME_STALLED_ON_TC_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008674_ME_STALLED_ON_TC_WR_CONFIRM(x) (((x) >> 12) & 0x1)
+#define C_008674_ME_STALLED_ON_TC_WR_CONFIRM 0xFFFFEFFF
+#define S_008674_ME_STALLED_ON_ATOMIC_RTN_DATA(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008674_ME_STALLED_ON_ATOMIC_RTN_DATA(x) (((x) >> 13) & 0x1)
+#define C_008674_ME_STALLED_ON_ATOMIC_RTN_DATA 0xFFFFDFFF
+#define S_008674_ME_WAITING_ON_TC_READ_DATA(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008674_ME_WAITING_ON_TC_READ_DATA(x) (((x) >> 14) & 0x1)
+#define C_008674_ME_WAITING_ON_TC_READ_DATA 0xFFFFBFFF
+#define S_008674_ME_WAITING_ON_REG_READ_DATA(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008674_ME_WAITING_ON_REG_READ_DATA(x) (((x) >> 15) & 0x1)
+#define C_008674_ME_WAITING_ON_REG_READ_DATA 0xFFFF7FFF
+#define S_008674_RCIU_WAITING_ON_GDS_FREE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008674_RCIU_WAITING_ON_GDS_FREE(x) (((x) >> 23) & 0x1)
+#define C_008674_RCIU_WAITING_ON_GDS_FREE 0xFF7FFFFF
+#define S_008674_RCIU_WAITING_ON_GRBM_FREE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008674_RCIU_WAITING_ON_GRBM_FREE(x) (((x) >> 24) & 0x1)
+#define C_008674_RCIU_WAITING_ON_GRBM_FREE 0xFEFFFFFF
+#define S_008674_RCIU_WAITING_ON_VGT_FREE(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008674_RCIU_WAITING_ON_VGT_FREE(x) (((x) >> 25) & 0x1)
+#define C_008674_RCIU_WAITING_ON_VGT_FREE 0xFDFFFFFF
+#define S_008674_RCIU_STALLED_ON_ME_READ(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008674_RCIU_STALLED_ON_ME_READ(x) (((x) >> 26) & 0x1)
+#define C_008674_RCIU_STALLED_ON_ME_READ 0xFBFFFFFF
+#define S_008674_RCIU_STALLED_ON_DMA_READ(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008674_RCIU_STALLED_ON_DMA_READ(x) (((x) >> 27) & 0x1)
+#define C_008674_RCIU_STALLED_ON_DMA_READ 0xF7FFFFFF
+#define S_008674_RCIU_STALLED_ON_APPEND_READ(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008674_RCIU_STALLED_ON_APPEND_READ(x) (((x) >> 28) & 0x1)
+#define C_008674_RCIU_STALLED_ON_APPEND_READ 0xEFFFFFFF
+#define S_008674_RCIU_HALTED_BY_REG_VIOLATION(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008674_RCIU_HALTED_BY_REG_VIOLATION(x) (((x) >> 29) & 0x1)
+#define C_008674_RCIU_HALTED_BY_REG_VIOLATION 0xDFFFFFFF
+#define R_008678_CP_STALLED_STAT2 0x008678
+#define S_008678_PFP_TO_CSF_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 0)
+#define G_008678_PFP_TO_CSF_NOT_RDY_TO_RCV(x) (((x) >> 0) & 0x1)
+#define C_008678_PFP_TO_CSF_NOT_RDY_TO_RCV 0xFFFFFFFE
+#define S_008678_PFP_TO_MEQ_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 1)
+#define G_008678_PFP_TO_MEQ_NOT_RDY_TO_RCV(x) (((x) >> 1) & 0x1)
+#define C_008678_PFP_TO_MEQ_NOT_RDY_TO_RCV 0xFFFFFFFD
+#define S_008678_PFP_TO_RCIU_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 2)
+#define G_008678_PFP_TO_RCIU_NOT_RDY_TO_RCV(x) (((x) >> 2) & 0x1)
+#define C_008678_PFP_TO_RCIU_NOT_RDY_TO_RCV 0xFFFFFFFB
+#define S_008678_PFP_TO_VGT_WRITES_PENDING(x) (((unsigned)(x) & 0x1) << 4)
+#define G_008678_PFP_TO_VGT_WRITES_PENDING(x) (((x) >> 4) & 0x1)
+#define C_008678_PFP_TO_VGT_WRITES_PENDING 0xFFFFFFEF
+#define S_008678_PFP_RCIU_READ_PENDING(x) (((unsigned)(x) & 0x1) << 5)
+#define G_008678_PFP_RCIU_READ_PENDING(x) (((x) >> 5) & 0x1)
+#define C_008678_PFP_RCIU_READ_PENDING 0xFFFFFFDF
+#define S_008678_PFP_WAITING_ON_BUFFER_DATA(x) (((unsigned)(x) & 0x1) << 8)
+#define G_008678_PFP_WAITING_ON_BUFFER_DATA(x) (((x) >> 8) & 0x1)
+#define C_008678_PFP_WAITING_ON_BUFFER_DATA 0xFFFFFEFF
+#define S_008678_ME_WAIT_ON_CE_COUNTER(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008678_ME_WAIT_ON_CE_COUNTER(x) (((x) >> 9) & 0x1)
+#define C_008678_ME_WAIT_ON_CE_COUNTER 0xFFFFFDFF
+#define S_008678_ME_WAIT_ON_AVAIL_BUFFER(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008678_ME_WAIT_ON_AVAIL_BUFFER(x) (((x) >> 10) & 0x1)
+#define C_008678_ME_WAIT_ON_AVAIL_BUFFER 0xFFFFFBFF
+#define S_008678_GFX_CNTX_NOT_AVAIL_TO_ME(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008678_GFX_CNTX_NOT_AVAIL_TO_ME(x) (((x) >> 11) & 0x1)
+#define C_008678_GFX_CNTX_NOT_AVAIL_TO_ME 0xFFFFF7FF
+#define S_008678_ME_RCIU_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008678_ME_RCIU_NOT_RDY_TO_RCV(x) (((x) >> 12) & 0x1)
+#define C_008678_ME_RCIU_NOT_RDY_TO_RCV 0xFFFFEFFF
+#define S_008678_ME_TO_CONST_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008678_ME_TO_CONST_NOT_RDY_TO_RCV(x) (((x) >> 13) & 0x1)
+#define C_008678_ME_TO_CONST_NOT_RDY_TO_RCV 0xFFFFDFFF
+#define S_008678_ME_WAITING_DATA_FROM_PFP(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008678_ME_WAITING_DATA_FROM_PFP(x) (((x) >> 14) & 0x1)
+#define C_008678_ME_WAITING_DATA_FROM_PFP 0xFFFFBFFF
+#define S_008678_ME_WAITING_ON_PARTIAL_FLUSH(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008678_ME_WAITING_ON_PARTIAL_FLUSH(x) (((x) >> 15) & 0x1)
+#define C_008678_ME_WAITING_ON_PARTIAL_FLUSH 0xFFFF7FFF
+#define S_008678_MEQ_TO_ME_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008678_MEQ_TO_ME_NOT_RDY_TO_RCV(x) (((x) >> 16) & 0x1)
+#define C_008678_MEQ_TO_ME_NOT_RDY_TO_RCV 0xFFFEFFFF
+#define S_008678_STQ_TO_ME_NOT_RDY_TO_RCV(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008678_STQ_TO_ME_NOT_RDY_TO_RCV(x) (((x) >> 17) & 0x1)
+#define C_008678_STQ_TO_ME_NOT_RDY_TO_RCV 0xFFFDFFFF
+#define S_008678_ME_WAITING_DATA_FROM_STQ(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008678_ME_WAITING_DATA_FROM_STQ(x) (((x) >> 18) & 0x1)
+#define C_008678_ME_WAITING_DATA_FROM_STQ 0xFFFBFFFF
+#define S_008678_PFP_STALLED_ON_TC_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008678_PFP_STALLED_ON_TC_WR_CONFIRM(x) (((x) >> 19) & 0x1)
+#define C_008678_PFP_STALLED_ON_TC_WR_CONFIRM 0xFFF7FFFF
+#define S_008678_PFP_STALLED_ON_ATOMIC_RTN_DATA(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008678_PFP_STALLED_ON_ATOMIC_RTN_DATA(x) (((x) >> 20) & 0x1)
+#define C_008678_PFP_STALLED_ON_ATOMIC_RTN_DATA 0xFFEFFFFF
+#define S_008678_EOPD_FIFO_NEEDS_SC_EOP_DONE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008678_EOPD_FIFO_NEEDS_SC_EOP_DONE(x) (((x) >> 21) & 0x1)
+#define C_008678_EOPD_FIFO_NEEDS_SC_EOP_DONE 0xFFDFFFFF
+#define S_008678_EOPD_FIFO_NEEDS_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008678_EOPD_FIFO_NEEDS_WR_CONFIRM(x) (((x) >> 22) & 0x1)
+#define C_008678_EOPD_FIFO_NEEDS_WR_CONFIRM 0xFFBFFFFF
+#define S_008678_STRMO_WR_OF_PRIM_DATA_PENDING(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008678_STRMO_WR_OF_PRIM_DATA_PENDING(x) (((x) >> 23) & 0x1)
+#define C_008678_STRMO_WR_OF_PRIM_DATA_PENDING 0xFF7FFFFF
+#define S_008678_PIPE_STATS_WR_DATA_PENDING(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008678_PIPE_STATS_WR_DATA_PENDING(x) (((x) >> 24) & 0x1)
+#define C_008678_PIPE_STATS_WR_DATA_PENDING 0xFEFFFFFF
+#define S_008678_APPEND_RDY_WAIT_ON_CS_DONE(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008678_APPEND_RDY_WAIT_ON_CS_DONE(x) (((x) >> 25) & 0x1)
+#define C_008678_APPEND_RDY_WAIT_ON_CS_DONE 0xFDFFFFFF
+#define S_008678_APPEND_RDY_WAIT_ON_PS_DONE(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008678_APPEND_RDY_WAIT_ON_PS_DONE(x) (((x) >> 26) & 0x1)
+#define C_008678_APPEND_RDY_WAIT_ON_PS_DONE 0xFBFFFFFF
+#define S_008678_APPEND_WAIT_ON_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008678_APPEND_WAIT_ON_WR_CONFIRM(x) (((x) >> 27) & 0x1)
+#define C_008678_APPEND_WAIT_ON_WR_CONFIRM 0xF7FFFFFF
+#define S_008678_APPEND_ACTIVE_PARTITION(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008678_APPEND_ACTIVE_PARTITION(x) (((x) >> 28) & 0x1)
+#define C_008678_APPEND_ACTIVE_PARTITION 0xEFFFFFFF
+#define S_008678_APPEND_WAITING_TO_SEND_MEMWRITE(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008678_APPEND_WAITING_TO_SEND_MEMWRITE(x) (((x) >> 29) & 0x1)
+#define C_008678_APPEND_WAITING_TO_SEND_MEMWRITE 0xDFFFFFFF
+#define S_008678_SURF_SYNC_NEEDS_IDLE_CNTXS(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008678_SURF_SYNC_NEEDS_IDLE_CNTXS(x) (((x) >> 30) & 0x1)
+#define C_008678_SURF_SYNC_NEEDS_IDLE_CNTXS 0xBFFFFFFF
+#define S_008678_SURF_SYNC_NEEDS_ALL_CLEAN(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008678_SURF_SYNC_NEEDS_ALL_CLEAN(x) (((x) >> 31) & 0x1)
+#define C_008678_SURF_SYNC_NEEDS_ALL_CLEAN 0x7FFFFFFF
+#define R_008680_CP_STAT 0x008680
+#define S_008680_ROQ_RING_BUSY(x) (((unsigned)(x) & 0x1) << 9)
+#define G_008680_ROQ_RING_BUSY(x) (((x) >> 9) & 0x1)
+#define C_008680_ROQ_RING_BUSY 0xFFFFFDFF
+#define S_008680_ROQ_INDIRECT1_BUSY(x) (((unsigned)(x) & 0x1) << 10)
+#define G_008680_ROQ_INDIRECT1_BUSY(x) (((x) >> 10) & 0x1)
+#define C_008680_ROQ_INDIRECT1_BUSY 0xFFFFFBFF
+#define S_008680_ROQ_INDIRECT2_BUSY(x) (((unsigned)(x) & 0x1) << 11)
+#define G_008680_ROQ_INDIRECT2_BUSY(x) (((x) >> 11) & 0x1)
+#define C_008680_ROQ_INDIRECT2_BUSY 0xFFFFF7FF
+#define S_008680_ROQ_STATE_BUSY(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008680_ROQ_STATE_BUSY(x) (((x) >> 12) & 0x1)
+#define C_008680_ROQ_STATE_BUSY 0xFFFFEFFF
+#define S_008680_DC_BUSY(x) (((unsigned)(x) & 0x1) << 13)
+#define G_008680_DC_BUSY(x) (((x) >> 13) & 0x1)
+#define C_008680_DC_BUSY 0xFFFFDFFF
+#define S_008680_UTCL2IU_BUSY(x) (((unsigned)(x) & 0x1) << 14)
+#define G_008680_UTCL2IU_BUSY(x) (((x) >> 14) & 0x1)
+#define C_008680_UTCL2IU_BUSY 0xFFFFBFFF
+#define S_008680_PFP_BUSY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008680_PFP_BUSY(x) (((x) >> 15) & 0x1)
+#define C_008680_PFP_BUSY 0xFFFF7FFF
+#define S_008680_MEQ_BUSY(x) (((unsigned)(x) & 0x1) << 16)
+#define G_008680_MEQ_BUSY(x) (((x) >> 16) & 0x1)
+#define C_008680_MEQ_BUSY 0xFFFEFFFF
+#define S_008680_ME_BUSY(x) (((unsigned)(x) & 0x1) << 17)
+#define G_008680_ME_BUSY(x) (((x) >> 17) & 0x1)
+#define C_008680_ME_BUSY 0xFFFDFFFF
+#define S_008680_QUERY_BUSY(x) (((unsigned)(x) & 0x1) << 18)
+#define G_008680_QUERY_BUSY(x) (((x) >> 18) & 0x1)
+#define C_008680_QUERY_BUSY 0xFFFBFFFF
+#define S_008680_SEMAPHORE_BUSY(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008680_SEMAPHORE_BUSY(x) (((x) >> 19) & 0x1)
+#define C_008680_SEMAPHORE_BUSY 0xFFF7FFFF
+#define S_008680_INTERRUPT_BUSY(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008680_INTERRUPT_BUSY(x) (((x) >> 20) & 0x1)
+#define C_008680_INTERRUPT_BUSY 0xFFEFFFFF
+#define S_008680_SURFACE_SYNC_BUSY(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008680_SURFACE_SYNC_BUSY(x) (((x) >> 21) & 0x1)
+#define C_008680_SURFACE_SYNC_BUSY 0xFFDFFFFF
+#define S_008680_DMA_BUSY(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008680_DMA_BUSY(x) (((x) >> 22) & 0x1)
+#define C_008680_DMA_BUSY 0xFFBFFFFF
+#define S_008680_RCIU_BUSY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008680_RCIU_BUSY(x) (((x) >> 23) & 0x1)
+#define C_008680_RCIU_BUSY 0xFF7FFFFF
+#define S_008680_SCRATCH_RAM_BUSY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_008680_SCRATCH_RAM_BUSY(x) (((x) >> 24) & 0x1)
+#define C_008680_SCRATCH_RAM_BUSY 0xFEFFFFFF
+#define S_008680_CE_BUSY(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008680_CE_BUSY(x) (((x) >> 26) & 0x1)
+#define C_008680_CE_BUSY 0xFBFFFFFF
+#define S_008680_TCIU_BUSY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008680_TCIU_BUSY(x) (((x) >> 27) & 0x1)
+#define C_008680_TCIU_BUSY 0xF7FFFFFF
+#define S_008680_ROQ_CE_RING_BUSY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008680_ROQ_CE_RING_BUSY(x) (((x) >> 28) & 0x1)
+#define C_008680_ROQ_CE_RING_BUSY 0xEFFFFFFF
+#define S_008680_ROQ_CE_INDIRECT1_BUSY(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008680_ROQ_CE_INDIRECT1_BUSY(x) (((x) >> 29) & 0x1)
+#define C_008680_ROQ_CE_INDIRECT1_BUSY 0xDFFFFFFF
+#define S_008680_ROQ_CE_INDIRECT2_BUSY(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008680_ROQ_CE_INDIRECT2_BUSY(x) (((x) >> 30) & 0x1)
+#define C_008680_ROQ_CE_INDIRECT2_BUSY 0xBFFFFFFF
+#define S_008680_CP_BUSY(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008680_CP_BUSY(x) (((x) >> 31) & 0x1)
+#define C_008680_CP_BUSY 0x7FFFFFFF
+#define R_030800_GRBM_GFX_INDEX 0x030800
+#define S_030800_INSTANCE_INDEX(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030800_INSTANCE_INDEX(x) (((x) >> 0) & 0xFF)
+#define C_030800_INSTANCE_INDEX 0xFFFFFF00
+#define S_030800_SH_INDEX(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_030800_SH_INDEX(x) (((x) >> 8) & 0xFF)
+#define C_030800_SH_INDEX 0xFFFF00FF
+#define S_030800_SE_INDEX(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_030800_SE_INDEX(x) (((x) >> 16) & 0xFF)
+#define C_030800_SE_INDEX 0xFF00FFFF
+#define S_030800_SH_BROADCAST_WRITES(x) (((unsigned)(x) & 0x1) << 29)
+#define G_030800_SH_BROADCAST_WRITES(x) (((x) >> 29) & 0x1)
+#define C_030800_SH_BROADCAST_WRITES 0xDFFFFFFF
+#define S_030800_INSTANCE_BROADCAST_WRITES(x) (((unsigned)(x) & 0x1) << 30)
+#define G_030800_INSTANCE_BROADCAST_WRITES(x) (((x) >> 30) & 0x1)
+#define C_030800_INSTANCE_BROADCAST_WRITES 0xBFFFFFFF
+#define S_030800_SE_BROADCAST_WRITES(x) (((unsigned)(x) & 0x1) << 31)
+#define G_030800_SE_BROADCAST_WRITES(x) (((x) >> 31) & 0x1)
+#define C_030800_SE_BROADCAST_WRITES 0x7FFFFFFF
+#define R_030904_VGT_GSVS_RING_SIZE 0x030904
+#define R_030908_VGT_PRIMITIVE_TYPE 0x030908
+#define S_030908_PRIM_TYPE(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_030908_PRIM_TYPE(x) (((x) >> 0) & 0x3F)
+#define C_030908_PRIM_TYPE 0xFFFFFFC0
+#define R_03090C_VGT_INDEX_TYPE 0x03090C
+#define S_03090C_INDEX_TYPE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_03090C_INDEX_TYPE(x) (((x) >> 0) & 0x03)
+#define C_03090C_INDEX_TYPE 0xFFFFFFFC
+#define S_03090C_PRIMGEN_EN(x) (((unsigned)(x) & 0x1) << 8)
+#define G_03090C_PRIMGEN_EN(x) (((x) >> 8) & 0x1)
+#define C_03090C_PRIMGEN_EN 0xFFFFFEFF
+#define R_030910_VGT_STRMOUT_BUFFER_FILLED_SIZE_0 0x030910
+#define R_030914_VGT_STRMOUT_BUFFER_FILLED_SIZE_1 0x030914
+#define R_030918_VGT_STRMOUT_BUFFER_FILLED_SIZE_2 0x030918
+#define R_03091C_VGT_STRMOUT_BUFFER_FILLED_SIZE_3 0x03091C
+#define R_030920_VGT_MAX_VTX_INDX 0x030920
+#define R_030924_VGT_MIN_VTX_INDX 0x030924
+#define R_030928_VGT_INDX_OFFSET 0x030928
+#define R_03092C_VGT_MULTI_PRIM_IB_RESET_EN 0x03092C
+#define S_03092C_RESET_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_03092C_RESET_EN(x) (((x) >> 0) & 0x1)
+#define C_03092C_RESET_EN 0xFFFFFFFE
+#define S_03092C_MATCH_ALL_BITS(x) (((unsigned)(x) & 0x1) << 1)
+#define G_03092C_MATCH_ALL_BITS(x) (((x) >> 1) & 0x1)
+#define C_03092C_MATCH_ALL_BITS 0xFFFFFFFD
+#define R_030930_VGT_NUM_INDICES 0x030930
+#define R_030934_VGT_NUM_INSTANCES 0x030934
+#define R_030938_VGT_TF_RING_SIZE 0x030938
+#define S_030938_SIZE(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030938_SIZE(x) (((x) >> 0) & 0xFFFF)
+#define C_030938_SIZE 0xFFFF0000
+#define R_03093C_VGT_HS_OFFCHIP_PARAM 0x03093C
+#define S_03093C_OFFCHIP_BUFFERING(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_03093C_OFFCHIP_BUFFERING(x) (((x) >> 0) & 0x1FF)
+#define C_03093C_OFFCHIP_BUFFERING 0xFFFFFE00
+#define S_03093C_OFFCHIP_GRANULARITY(x) (((unsigned)(x) & 0x03) << 9)
+#define G_03093C_OFFCHIP_GRANULARITY(x) (((x) >> 9) & 0x03)
+#define C_03093C_OFFCHIP_GRANULARITY 0xFFFFF9FF
+#define R_030940_VGT_TF_MEMORY_BASE 0x030940
+#define R_030944_VGT_TF_MEMORY_BASE_HI 0x030944
+#define S_030944_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030944_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_030944_BASE_HI 0xFFFFFF00
+#define R_030948_WD_POS_BUF_BASE 0x030948
+#define R_03094C_WD_POS_BUF_BASE_HI 0x03094C
+#define S_03094C_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_03094C_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_03094C_BASE_HI 0xFFFFFF00
+#define R_030950_WD_CNTL_SB_BUF_BASE 0x030950
+#define R_030954_WD_CNTL_SB_BUF_BASE_HI 0x030954
+#define S_030954_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030954_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_030954_BASE_HI 0xFFFFFF00
+#define R_030958_WD_INDEX_BUF_BASE 0x030958
+#define R_03095C_WD_INDEX_BUF_BASE_HI 0x03095C
+#define S_03095C_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_03095C_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_03095C_BASE_HI 0xFFFFFF00
+#define R_030960_IA_MULTI_VGT_PARAM 0x030960
+#define S_030960_PRIMGROUP_SIZE(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030960_PRIMGROUP_SIZE(x) (((x) >> 0) & 0xFFFF)
+#define C_030960_PRIMGROUP_SIZE 0xFFFF0000
+#define S_030960_PARTIAL_VS_WAVE_ON(x) (((unsigned)(x) & 0x1) << 16)
+#define G_030960_PARTIAL_VS_WAVE_ON(x) (((x) >> 16) & 0x1)
+#define C_030960_PARTIAL_VS_WAVE_ON 0xFFFEFFFF
+#define S_030960_SWITCH_ON_EOP(x) (((unsigned)(x) & 0x1) << 17)
+#define G_030960_SWITCH_ON_EOP(x) (((x) >> 17) & 0x1)
+#define C_030960_SWITCH_ON_EOP 0xFFFDFFFF
+#define S_030960_PARTIAL_ES_WAVE_ON(x) (((unsigned)(x) & 0x1) << 18)
+#define G_030960_PARTIAL_ES_WAVE_ON(x) (((x) >> 18) & 0x1)
+#define C_030960_PARTIAL_ES_WAVE_ON 0xFFFBFFFF
+#define S_030960_SWITCH_ON_EOI(x) (((unsigned)(x) & 0x1) << 19)
+#define G_030960_SWITCH_ON_EOI(x) (((x) >> 19) & 0x1)
+#define C_030960_SWITCH_ON_EOI 0xFFF7FFFF
+#define S_030960_WD_SWITCH_ON_EOP(x) (((unsigned)(x) & 0x1) << 20)
+#define G_030960_WD_SWITCH_ON_EOP(x) (((x) >> 20) & 0x1)
+#define C_030960_WD_SWITCH_ON_EOP 0xFFEFFFFF
+#define S_030960_EN_INST_OPT_BASIC(x) (((unsigned)(x) & 0x1) << 21)
+#define G_030960_EN_INST_OPT_BASIC(x) (((x) >> 21) & 0x1)
+#define C_030960_EN_INST_OPT_BASIC 0xFFDFFFFF
+#define S_030960_EN_INST_OPT_ADV(x) (((unsigned)(x) & 0x1) << 22)
+#define G_030960_EN_INST_OPT_ADV(x) (((x) >> 22) & 0x1)
+#define C_030960_EN_INST_OPT_ADV 0xFFBFFFFF
+#define S_030960_HW_USE_ONLY(x) (((unsigned)(x) & 0x1) << 23)
+#define G_030960_HW_USE_ONLY(x) (((x) >> 23) & 0x1)
+#define C_030960_HW_USE_ONLY 0xFF7FFFFF
+#define R_030964_VGT_OBJECT_ID 0x030964
+#define R_030968_VGT_INSTANCE_BASE_ID 0x030968
+#define R_030A00_PA_SU_LINE_STIPPLE_VALUE 0x030A00
+#define S_030A00_LINE_STIPPLE_VALUE(x) (((unsigned)(x) & 0xFFFFFF) << 0)
+#define G_030A00_LINE_STIPPLE_VALUE(x) (((x) >> 0) & 0xFFFFFF)
+#define C_030A00_LINE_STIPPLE_VALUE 0xFF000000
+#define R_030A04_PA_SC_LINE_STIPPLE_STATE 0x030A04
+#define S_030A04_CURRENT_PTR(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_030A04_CURRENT_PTR(x) (((x) >> 0) & 0x0F)
+#define C_030A04_CURRENT_PTR 0xFFFFFFF0
+#define S_030A04_CURRENT_COUNT(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_030A04_CURRENT_COUNT(x) (((x) >> 8) & 0xFF)
+#define C_030A04_CURRENT_COUNT 0xFFFF00FF
+#define R_030A10_PA_SC_SCREEN_EXTENT_MIN_0 0x030A10
+#define S_030A10_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030A10_X(x) (((x) >> 0) & 0xFFFF)
+#define C_030A10_X 0xFFFF0000
+#define S_030A10_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_030A10_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_030A10_Y 0x0000FFFF
+#define R_030A14_PA_SC_SCREEN_EXTENT_MAX_0 0x030A14
+#define S_030A14_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030A14_X(x) (((x) >> 0) & 0xFFFF)
+#define C_030A14_X 0xFFFF0000
+#define S_030A14_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_030A14_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_030A14_Y 0x0000FFFF
+#define R_030A18_PA_SC_SCREEN_EXTENT_MIN_1 0x030A18
+#define S_030A18_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030A18_X(x) (((x) >> 0) & 0xFFFF)
+#define C_030A18_X 0xFFFF0000
+#define S_030A18_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_030A18_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_030A18_Y 0x0000FFFF
+#define R_030A2C_PA_SC_SCREEN_EXTENT_MAX_1 0x030A2C
+#define S_030A2C_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_030A2C_X(x) (((x) >> 0) & 0xFFFF)
+#define C_030A2C_X 0xFFFF0000
+#define S_030A2C_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_030A2C_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_030A2C_Y 0x0000FFFF
+#define R_030D20_SQC_CACHES 0x030D20
+#define S_030D20_TARGET_INST(x) (((unsigned)(x) & 0x1) << 0)
+#define G_030D20_TARGET_INST(x) (((x) >> 0) & 0x1)
+#define C_030D20_TARGET_INST 0xFFFFFFFE
+#define S_030D20_TARGET_DATA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_030D20_TARGET_DATA(x) (((x) >> 1) & 0x1)
+#define C_030D20_TARGET_DATA 0xFFFFFFFD
+#define S_030D20_INVALIDATE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_030D20_INVALIDATE(x) (((x) >> 2) & 0x1)
+#define C_030D20_INVALIDATE 0xFFFFFFFB
+#define S_030D20_WRITEBACK(x) (((unsigned)(x) & 0x1) << 3)
+#define G_030D20_WRITEBACK(x) (((x) >> 3) & 0x1)
+#define C_030D20_WRITEBACK 0xFFFFFFF7
+#define S_030D20_VOL(x) (((unsigned)(x) & 0x1) << 4)
+#define G_030D20_VOL(x) (((x) >> 4) & 0x1)
+#define C_030D20_VOL 0xFFFFFFEF
+#define S_030D20_COMPLETE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_030D20_COMPLETE(x) (((x) >> 16) & 0x1)
+#define C_030D20_COMPLETE 0xFFFEFFFF
+#define R_030D24_SQC_WRITEBACK 0x030D24
+#define S_030D24_DWB(x) (((unsigned)(x) & 0x1) << 0)
+#define G_030D24_DWB(x) (((x) >> 0) & 0x1)
+#define C_030D24_DWB 0xFFFFFFFE
+#define S_030D24_DIRTY(x) (((unsigned)(x) & 0x1) << 1)
+#define G_030D24_DIRTY(x) (((x) >> 1) & 0x1)
+#define C_030D24_DIRTY 0xFFFFFFFD
+#define R_030E00_TA_CS_BC_BASE_ADDR 0x030E00
+#define R_030E04_TA_CS_BC_BASE_ADDR_HI 0x030E04
+#define S_030E04_ADDRESS(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030E04_ADDRESS(x) (((x) >> 0) & 0xFF)
+#define C_030E04_ADDRESS 0xFFFFFF00
+#define R_030E08_TA_GRAD_ADJ_UCONFIG 0x030E08
+#define S_030E08_GRAD_ADJ_0(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_030E08_GRAD_ADJ_0(x) (((x) >> 0) & 0xFF)
+#define C_030E08_GRAD_ADJ_0 0xFFFFFF00
+#define S_030E08_GRAD_ADJ_1(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_030E08_GRAD_ADJ_1(x) (((x) >> 8) & 0xFF)
+#define C_030E08_GRAD_ADJ_1 0xFFFF00FF
+#define S_030E08_GRAD_ADJ_2(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_030E08_GRAD_ADJ_2(x) (((x) >> 16) & 0xFF)
+#define C_030E08_GRAD_ADJ_2 0xFF00FFFF
+#define S_030E08_GRAD_ADJ_3(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_030E08_GRAD_ADJ_3(x) (((x) >> 24) & 0xFF)
+#define C_030E08_GRAD_ADJ_3 0x00FFFFFF
+#define R_030F00_DB_OCCLUSION_COUNT0_LOW 0x030F00
+#define R_008F00_SQ_BUF_RSRC_WORD0 0x008F00
+#define R_030F04_DB_OCCLUSION_COUNT0_HI 0x030F04
+#define S_030F04_COUNT_HI(x) (((unsigned)(x) & 0x7FFFFFFF) << 0)
+#define G_030F04_COUNT_HI(x) (((x) >> 0) & 0x7FFFFFFF)
+#define C_030F04_COUNT_HI 0x80000000
+#define R_008F04_SQ_BUF_RSRC_WORD1 0x008F04
+#define S_008F04_BASE_ADDRESS_HI(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_008F04_BASE_ADDRESS_HI(x) (((x) >> 0) & 0xFFFF)
+#define C_008F04_BASE_ADDRESS_HI 0xFFFF0000
+#define S_008F04_STRIDE(x) (((unsigned)(x) & 0x3FFF) << 16)
+#define G_008F04_STRIDE(x) (((x) >> 16) & 0x3FFF)
+#define C_008F04_STRIDE 0xC000FFFF
+#define S_008F04_CACHE_SWIZZLE(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008F04_CACHE_SWIZZLE(x) (((x) >> 30) & 0x1)
+#define C_008F04_CACHE_SWIZZLE 0xBFFFFFFF
+#define S_008F04_SWIZZLE_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008F04_SWIZZLE_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_008F04_SWIZZLE_ENABLE 0x7FFFFFFF
+#define R_030F08_DB_OCCLUSION_COUNT1_LOW 0x030F08
+#define R_008F08_SQ_BUF_RSRC_WORD2 0x008F08
+#define R_030F0C_DB_OCCLUSION_COUNT1_HI 0x030F0C
+#define S_030F0C_COUNT_HI(x) (((unsigned)(x) & 0x7FFFFFFF) << 0)
+#define G_030F0C_COUNT_HI(x) (((x) >> 0) & 0x7FFFFFFF)
+#define C_030F0C_COUNT_HI 0x80000000
+#define R_008F0C_SQ_BUF_RSRC_WORD3 0x008F0C
+#define S_008F0C_DST_SEL_X(x) (((unsigned)(x) & 0x07) << 0)
+#define G_008F0C_DST_SEL_X(x) (((x) >> 0) & 0x07)
+#define C_008F0C_DST_SEL_X 0xFFFFFFF8
+#define S_008F0C_DST_SEL_Y(x) (((unsigned)(x) & 0x07) << 3)
+#define G_008F0C_DST_SEL_Y(x) (((x) >> 3) & 0x07)
+#define C_008F0C_DST_SEL_Y 0xFFFFFFC7
+#define S_008F0C_DST_SEL_Z(x) (((unsigned)(x) & 0x07) << 6)
+#define G_008F0C_DST_SEL_Z(x) (((x) >> 6) & 0x07)
+#define C_008F0C_DST_SEL_Z 0xFFFFFE3F
+#define S_008F0C_DST_SEL_W(x) (((unsigned)(x) & 0x07) << 9)
+#define G_008F0C_DST_SEL_W(x) (((x) >> 9) & 0x07)
+#define C_008F0C_DST_SEL_W 0xFFFFF1FF
+#define S_008F0C_NUM_FORMAT(x) (((unsigned)(x) & 0x07) << 12)
+#define G_008F0C_NUM_FORMAT(x) (((x) >> 12) & 0x07)
+#define C_008F0C_NUM_FORMAT 0xFFFF8FFF
+#define S_008F0C_DATA_FORMAT(x) (((unsigned)(x) & 0x0F) << 15)
+#define G_008F0C_DATA_FORMAT(x) (((x) >> 15) & 0x0F)
+#define C_008F0C_DATA_FORMAT 0xFFF87FFF
+#define S_008F0C_USER_VM_ENABLE(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008F0C_USER_VM_ENABLE(x) (((x) >> 19) & 0x1)
+#define C_008F0C_USER_VM_ENABLE 0xFFF7FFFF
+#define S_008F0C_USER_VM_MODE(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008F0C_USER_VM_MODE(x) (((x) >> 20) & 0x1)
+#define C_008F0C_USER_VM_MODE 0xFFEFFFFF
+#define S_008F0C_INDEX_STRIDE(x) (((unsigned)(x) & 0x03) << 21)
+#define G_008F0C_INDEX_STRIDE(x) (((x) >> 21) & 0x03)
+#define C_008F0C_INDEX_STRIDE 0xFF9FFFFF
+#define S_008F0C_ADD_TID_ENABLE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008F0C_ADD_TID_ENABLE(x) (((x) >> 23) & 0x1)
+#define C_008F0C_ADD_TID_ENABLE 0xFF7FFFFF
+#define S_008F0C_NV(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008F0C_NV(x) (((x) >> 27) & 0x1)
+#define C_008F0C_NV 0xF7FFFFFF
+#define S_008F0C_TYPE(x) (((unsigned)(x) & 0x03) << 30)
+#define G_008F0C_TYPE(x) (((x) >> 30) & 0x03)
+#define C_008F0C_TYPE 0x3FFFFFFF
+#define R_030F10_DB_OCCLUSION_COUNT2_LOW 0x030F10
+#define R_008F10_SQ_IMG_RSRC_WORD0 0x008F10
+#define R_030F14_DB_OCCLUSION_COUNT2_HI 0x030F14
+#define S_030F14_COUNT_HI(x) (((unsigned)(x) & 0x7FFFFFFF) << 0)
+#define G_030F14_COUNT_HI(x) (((x) >> 0) & 0x7FFFFFFF)
+#define C_030F14_COUNT_HI 0x80000000
+#define R_008F14_SQ_IMG_RSRC_WORD1 0x008F14
+#define S_008F14_BASE_ADDRESS_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_008F14_BASE_ADDRESS_HI(x) (((x) >> 0) & 0xFF)
+#define C_008F14_BASE_ADDRESS_HI 0xFFFFFF00
+#define S_008F14_MIN_LOD(x) (((unsigned)(x) & 0xFFF) << 8)
+#define G_008F14_MIN_LOD(x) (((x) >> 8) & 0xFFF)
+#define C_008F14_MIN_LOD 0xFFF000FF
+#define S_008F14_DATA_FORMAT_GFX9(x) (((unsigned)(x) & 0x3F) << 20)
+#define G_008F14_DATA_FORMAT_GFX9(x) (((x) >> 20) & 0x3F)
+#define C_008F14_DATA_FORMAT_GFX9 0xFC0FFFFF
+#define V_008F14_IMG_DATA_FORMAT_INVALID 0x00
+#define V_008F14_IMG_DATA_FORMAT_8 0x01
+#define V_008F14_IMG_DATA_FORMAT_16 0x02
+#define V_008F14_IMG_DATA_FORMAT_8_8 0x03
+#define V_008F14_IMG_DATA_FORMAT_32 0x04
+#define V_008F14_IMG_DATA_FORMAT_16_16 0x05
+#define V_008F14_IMG_DATA_FORMAT_10_11_11 0x06
+#define V_008F14_IMG_DATA_FORMAT_11_11_10 0x07
+#define V_008F14_IMG_DATA_FORMAT_10_10_10_2 0x08
+#define V_008F14_IMG_DATA_FORMAT_2_10_10_10 0x09
+#define V_008F14_IMG_DATA_FORMAT_8_8_8_8 0x0A
+#define V_008F14_IMG_DATA_FORMAT_32_32 0x0B
+#define V_008F14_IMG_DATA_FORMAT_16_16_16_16 0x0C
+#define V_008F14_IMG_DATA_FORMAT_32_32_32 0x0D
+#define V_008F14_IMG_DATA_FORMAT_32_32_32_32 0x0E
+#define V_008F14_IMG_DATA_FORMAT_RESERVED_15 0x0F
+#define V_008F14_IMG_DATA_FORMAT_5_6_5 0x10
+#define V_008F14_IMG_DATA_FORMAT_1_5_5_5 0x11
+#define V_008F14_IMG_DATA_FORMAT_5_5_5_1 0x12
+#define V_008F14_IMG_DATA_FORMAT_4_4_4_4 0x13
+#define V_008F14_IMG_DATA_FORMAT_8_24 0x14
+#define V_008F14_IMG_DATA_FORMAT_24_8 0x15
+#define V_008F14_IMG_DATA_FORMAT_X24_8_32 0x16
+#define V_008F14_IMG_DATA_FORMAT_8_AS_8_8_8_8 0x17
+#define V_008F14_IMG_DATA_FORMAT_ETC2_RGB 0x18
+#define V_008F14_IMG_DATA_FORMAT_ETC2_RGBA 0x19
+#define V_008F14_IMG_DATA_FORMAT_ETC2_R 0x1A
+#define V_008F14_IMG_DATA_FORMAT_ETC2_RG 0x1B
+#define V_008F14_IMG_DATA_FORMAT_ETC2_RGBA1 0x1C
+#define V_008F14_IMG_DATA_FORMAT_RESERVED_29 0x1D
+#define V_008F14_IMG_DATA_FORMAT_RESERVED_30 0x1E
+#define V_008F14_IMG_DATA_FORMAT_6E4 0x1F
+#define V_008F14_IMG_DATA_FORMAT_GB_GR 0x20
+#define V_008F14_IMG_DATA_FORMAT_BG_RG 0x21
+#define V_008F14_IMG_DATA_FORMAT_5_9_9_9 0x22
+#define V_008F14_IMG_DATA_FORMAT_BC1 0x23
+#define V_008F14_IMG_DATA_FORMAT_BC2 0x24
+#define V_008F14_IMG_DATA_FORMAT_BC3 0x25
+#define V_008F14_IMG_DATA_FORMAT_BC4 0x26
+#define V_008F14_IMG_DATA_FORMAT_BC5 0x27
+#define V_008F14_IMG_DATA_FORMAT_BC6 0x28
+#define V_008F14_IMG_DATA_FORMAT_BC7 0x29
+#define V_008F14_IMG_DATA_FORMAT_16_AS_32_32 0x2A
+#define V_008F14_IMG_DATA_FORMAT_16_AS_16_16_16_16_GFX9 0x2B
+#define V_008F14_IMG_DATA_FORMAT_16_AS_32_32_32_32_GFX9 0x2C
+#define V_008F14_IMG_DATA_FORMAT_FMASK 0x2D /* NUM_FORMAT selects the format */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_2D_LDR 0x2E /* NUM_FORMAT selects the block size */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_2D_HDR 0x2F /* ditto */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_2D_LDR_SRGB 0x30 /* ditto */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_3D_LDR 0x31 /* ditto */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_3D_HDR 0x32 /* ditto */
+#define V_008F14_IMG_DATA_FORMAT_ASTC_3D_LDR_SRGB 0x33 /* ditto */
+#define V_008F14_IMG_DATA_FORMAT_N_IN_16 0x34
+#define V_008F14_IMG_DATA_FORMAT_N_IN_16_16 0x35
+#define V_008F14_IMG_DATA_FORMAT_N_IN_16_16_16_16 0x36
+#define V_008F14_IMG_DATA_FORMAT_N_IN_16_AS_16_16_16_16 0x37
+#define V_008F14_IMG_DATA_FORMAT_RESERVED_56 0x38
+#define V_008F14_IMG_DATA_FORMAT_4_4 0x39
+#define V_008F14_IMG_DATA_FORMAT_6_5_5 0x3A
+#define V_008F14_IMG_DATA_FORMAT_S8_16 0x3B
+#define V_008F14_IMG_DATA_FORMAT_S8_32 0x3C
+#define V_008F14_IMG_DATA_FORMAT_8_AS_32 0x3D
+#define V_008F14_IMG_DATA_FORMAT_8_AS_32_32 0x3E
+#define V_008F14_IMG_DATA_FORMAT_32_AS_32_32_32_32 0x3F
+#define S_008F14_NUM_FORMAT_GFX9(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_008F14_NUM_FORMAT_GFX9(x) (((x) >> 26) & 0x0F)
+#define C_008F14_NUM_FORMAT_GFX9 0xC3FFFFFF
+#define V_008F14_IMG_NUM_FORMAT_UNORM 0x00
+#define V_008F14_IMG_NUM_FORMAT_SNORM 0x01
+#define V_008F14_IMG_NUM_FORMAT_USCALED 0x02
+#define V_008F14_IMG_NUM_FORMAT_SSCALED 0x03
+#define V_008F14_IMG_NUM_FORMAT_UINT 0x04
+#define V_008F14_IMG_NUM_FORMAT_SINT 0x05
+#define V_008F14_IMG_NUM_FORMAT_RESERVED_6 0x06
+#define V_008F14_IMG_NUM_FORMAT_FLOAT 0x07
+#define V_008F14_IMG_NUM_FORMAT_METADATA 0x08
+#define V_008F14_IMG_NUM_FORMAT_SRGB 0x09
+#define V_008F14_IMG_NUM_FORMAT_UNORM_UINT 0x0A
+#define S_008F14_NUM_FORMAT_FMASK(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_008F14_NUM_FORMAT_FMASK(x) (((x) >> 26) & 0x0F)
+#define C_008F14_NUM_FORMAT_FMASK 0xC3FFFFFF
+#define V_008F14_IMG_FMASK_8_2_1 0x00
+#define V_008F14_IMG_FMASK_8_4_1 0x01
+#define V_008F14_IMG_FMASK_8_8_1 0x02
+#define V_008F14_IMG_FMASK_8_2_2 0x03
+#define V_008F14_IMG_FMASK_8_4_2 0x04
+#define V_008F14_IMG_FMASK_8_4_4 0x05
+#define V_008F14_IMG_FMASK_16_16_1 0x06
+#define V_008F14_IMG_FMASK_16_8_2 0x07
+#define V_008F14_IMG_FMASK_32_16_2 0x08
+#define V_008F14_IMG_FMASK_32_8_4 0x09
+#define V_008F14_IMG_FMASK_32_8_8 0x0A
+#define V_008F14_IMG_FMASK_64_16_4 0x0B
+#define V_008F14_IMG_FMASK_64_16_8 0x0C
+#define S_008F14_NUM_FORMAT_ASTC_2D(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_008F14_NUM_FORMAT_ASTC_2D(x) (((x) >> 26) & 0x0F)
+#define C_008F14_NUM_FORMAT_ASTC_2D 0xC3FFFFFF
+#define V_008F14_IMG_ASTC_2D_4x4 0x00
+#define V_008F14_IMG_ASTC_2D_5x4 0x01
+#define V_008F14_IMG_ASTC_2D_5x5 0x02
+#define V_008F14_IMG_ASTC_2D_6x5 0x03
+#define V_008F14_IMG_ASTC_2D_6x6 0x04
+#define V_008F14_IMG_ASTC_2D_8x5 0x05
+#define V_008F14_IMG_ASTC_2D_8x6 0x06
+#define V_008F14_IMG_ASTC_2D_8x8 0x07
+#define V_008F14_IMG_ASTC_2D_10x5 0x08
+#define V_008F14_IMG_ASTC_2D_10x6 0x09
+#define V_008F14_IMG_ASTC_2D_10x8 0x0A
+#define V_008F14_IMG_ASTC_2D_10x10 0x0B
+#define V_008F14_IMG_ASTC_2D_12x10 0x0C
+#define V_008F14_IMG_ASTC_2D_12x12 0x0D
+#define S_008F14_NUM_FORMAT_ASTC_3D(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_008F14_NUM_FORMAT_ASTC_3D(x) (((x) >> 26) & 0x0F)
+#define C_008F14_NUM_FORMAT_ASTC_3D 0xC3FFFFFF
+#define V_008F14_IMG_ASTC_3D_3x3x3 0x00
+#define V_008F14_IMG_ASTC_3D_4x3x3 0x01
+#define V_008F14_IMG_ASTC_3D_4x4x3 0x02
+#define V_008F14_IMG_ASTC_3D_4x4x4 0x03
+#define V_008F14_IMG_ASTC_3D_5x4x4 0x04
+#define V_008F14_IMG_ASTC_3D_5x5x4 0x05
+#define V_008F14_IMG_ASTC_3D_5x5x5 0x06
+#define V_008F14_IMG_ASTC_3D_6x5x5 0x07
+#define V_008F14_IMG_ASTC_3D_6x6x5 0x08
+#define V_008F14_IMG_ASTC_3D_6x6x6 0x09
+#define S_008F14_NV(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008F14_NV(x) (((x) >> 30) & 0x1)
+#define C_008F14_NV 0xBFFFFFFF
+#define S_008F14_META_DIRECT(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008F14_META_DIRECT(x) (((x) >> 31) & 0x1)
+#define C_008F14_META_DIRECT 0x7FFFFFFF
+#define R_030F18_DB_OCCLUSION_COUNT3_LOW 0x030F18
+#define R_008F18_SQ_IMG_RSRC_WORD2 0x008F18
+#define S_008F18_WIDTH(x) (((unsigned)(x) & 0x3FFF) << 0)
+#define G_008F18_WIDTH(x) (((x) >> 0) & 0x3FFF)
+#define C_008F18_WIDTH 0xFFFFC000
+#define S_008F18_HEIGHT(x) (((unsigned)(x) & 0x3FFF) << 14)
+#define G_008F18_HEIGHT(x) (((x) >> 14) & 0x3FFF)
+#define C_008F18_HEIGHT 0xF0003FFF
+#define S_008F18_PERF_MOD(x) (((unsigned)(x) & 0x07) << 28)
+#define G_008F18_PERF_MOD(x) (((x) >> 28) & 0x07)
+#define C_008F18_PERF_MOD 0x8FFFFFFF
+#define R_030F1C_DB_OCCLUSION_COUNT3_HI 0x030F1C
+#define S_030F1C_COUNT_HI(x) (((unsigned)(x) & 0x7FFFFFFF) << 0)
+#define G_030F1C_COUNT_HI(x) (((x) >> 0) & 0x7FFFFFFF)
+#define C_030F1C_COUNT_HI 0x80000000
+#define R_008F1C_SQ_IMG_RSRC_WORD3 0x008F1C
+#define S_008F1C_DST_SEL_X(x) (((unsigned)(x) & 0x07) << 0)
+#define G_008F1C_DST_SEL_X(x) (((x) >> 0) & 0x07)
+#define C_008F1C_DST_SEL_X 0xFFFFFFF8
+#define S_008F1C_DST_SEL_Y(x) (((unsigned)(x) & 0x07) << 3)
+#define G_008F1C_DST_SEL_Y(x) (((x) >> 3) & 0x07)
+#define C_008F1C_DST_SEL_Y 0xFFFFFFC7
+#define S_008F1C_DST_SEL_Z(x) (((unsigned)(x) & 0x07) << 6)
+#define G_008F1C_DST_SEL_Z(x) (((x) >> 6) & 0x07)
+#define C_008F1C_DST_SEL_Z 0xFFFFFE3F
+#define S_008F1C_DST_SEL_W(x) (((unsigned)(x) & 0x07) << 9)
+#define G_008F1C_DST_SEL_W(x) (((x) >> 9) & 0x07)
+#define C_008F1C_DST_SEL_W 0xFFFFF1FF
+#define S_008F1C_BASE_LEVEL(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_008F1C_BASE_LEVEL(x) (((x) >> 12) & 0x0F)
+#define C_008F1C_BASE_LEVEL 0xFFFF0FFF
+#define S_008F1C_LAST_LEVEL(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_008F1C_LAST_LEVEL(x) (((x) >> 16) & 0x0F)
+#define C_008F1C_LAST_LEVEL 0xFFF0FFFF
+#define S_008F1C_SW_MODE(x) (((unsigned)(x) & 0x1F) << 20)
+#define G_008F1C_SW_MODE(x) (((x) >> 20) & 0x1F)
+#define C_008F1C_SW_MODE 0xFE0FFFFF
+#define S_008F1C_TYPE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_008F1C_TYPE(x) (((x) >> 28) & 0x0F)
+#define C_008F1C_TYPE 0x0FFFFFFF
+#define R_008F20_SQ_IMG_RSRC_WORD4 0x008F20
+#define S_008F20_DEPTH(x) (((unsigned)(x) & 0x1FFF) << 0)
+#define G_008F20_DEPTH(x) (((x) >> 0) & 0x1FFF)
+#define C_008F20_DEPTH 0xFFFFE000
+#define S_008F20_PITCH_GFX9(x) (((unsigned)(x) & 0xFFFF) << 13)
+#define G_008F20_PITCH_GFX9(x) (((x) >> 13) & 0xFFFF)
+#define C_008F20_PITCH_GFX9 0xE0001FFF
+#define S_008F20_BC_SWIZZLE(x) (((unsigned)(x) & 0x07) << 29)
+#define G_008F20_BC_SWIZZLE(x) (((x) >> 29) & 0x07)
+#define C_008F20_BC_SWIZZLE 0x1FFFFFFF
+#define V_008F20_BC_SWIZZLE_XYZW 0
+#define V_008F20_BC_SWIZZLE_XWYZ 1
+#define V_008F20_BC_SWIZZLE_WZYX 2
+#define V_008F20_BC_SWIZZLE_WXYZ 3
+#define V_008F20_BC_SWIZZLE_ZYXW 4
+#define V_008F20_BC_SWIZZLE_YXWZ 5
+#define R_008F24_SQ_IMG_RSRC_WORD5 0x008F24
+#define S_008F24_BASE_ARRAY(x) (((unsigned)(x) & 0x1FFF) << 0)
+#define G_008F24_BASE_ARRAY(x) (((x) >> 0) & 0x1FFF)
+#define C_008F24_BASE_ARRAY 0xFFFFE000
+#define S_008F24_ARRAY_PITCH(x) (((unsigned)(x) & 0x0F) << 13)
+#define G_008F24_ARRAY_PITCH(x) (((x) >> 13) & 0x0F)
+#define C_008F24_ARRAY_PITCH 0xFFFE1FFF
+#define S_008F24_META_DATA_ADDRESS(x) (((unsigned)(x) & 0xFF) << 17)
+#define G_008F24_META_DATA_ADDRESS(x) (((x) >> 17) & 0xFF)
+#define C_008F24_META_DATA_ADDRESS 0xFE01FFFF
+#define S_008F24_META_LINEAR(x) (((unsigned)(x) & 0x1) << 25)
+#define G_008F24_META_LINEAR(x) (((x) >> 25) & 0x1)
+#define C_008F24_META_LINEAR 0xFDFFFFFF
+#define S_008F24_META_PIPE_ALIGNED(x) (((unsigned)(x) & 0x1) << 26)
+#define G_008F24_META_PIPE_ALIGNED(x) (((x) >> 26) & 0x1)
+#define C_008F24_META_PIPE_ALIGNED 0xFBFFFFFF
+#define S_008F24_META_RB_ALIGNED(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008F24_META_RB_ALIGNED(x) (((x) >> 27) & 0x1)
+#define C_008F24_META_RB_ALIGNED 0xF7FFFFFF
+#define S_008F24_MAX_MIP(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_008F24_MAX_MIP(x) (((x) >> 28) & 0x0F)
+#define C_008F24_MAX_MIP 0x0FFFFFFF
+#define R_008F28_SQ_IMG_RSRC_WORD6 0x008F28
+#define S_008F28_MIN_LOD_WARN(x) (((unsigned)(x) & 0xFFF) << 0)
+#define G_008F28_MIN_LOD_WARN(x) (((x) >> 0) & 0xFFF)
+#define C_008F28_MIN_LOD_WARN 0xFFFFF000
+#define S_008F28_COUNTER_BANK_ID(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_008F28_COUNTER_BANK_ID(x) (((x) >> 12) & 0xFF)
+#define C_008F28_COUNTER_BANK_ID 0xFFF00FFF
+#define S_008F28_LOD_HDW_CNT_EN(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008F28_LOD_HDW_CNT_EN(x) (((x) >> 20) & 0x1)
+#define C_008F28_LOD_HDW_CNT_EN 0xFFEFFFFF
+#define S_008F28_COMPRESSION_EN(x) (((unsigned)(x) & 0x1) << 21)
+#define G_008F28_COMPRESSION_EN(x) (((x) >> 21) & 0x1)
+#define C_008F28_COMPRESSION_EN 0xFFDFFFFF
+#define S_008F28_ALPHA_IS_ON_MSB(x) (((unsigned)(x) & 0x1) << 22)
+#define G_008F28_ALPHA_IS_ON_MSB(x) (((x) >> 22) & 0x1)
+#define C_008F28_ALPHA_IS_ON_MSB 0xFFBFFFFF
+#define S_008F28_COLOR_TRANSFORM(x) (((unsigned)(x) & 0x1) << 23)
+#define G_008F28_COLOR_TRANSFORM(x) (((x) >> 23) & 0x1)
+#define C_008F28_COLOR_TRANSFORM 0xFF7FFFFF
+#define S_008F28_LOST_ALPHA_BITS(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_008F28_LOST_ALPHA_BITS(x) (((x) >> 24) & 0x0F)
+#define C_008F28_LOST_ALPHA_BITS 0xF0FFFFFF
+#define S_008F28_LOST_COLOR_BITS(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_008F28_LOST_COLOR_BITS(x) (((x) >> 28) & 0x0F)
+#define C_008F28_LOST_COLOR_BITS 0x0FFFFFFF
+#define R_008F2C_SQ_IMG_RSRC_WORD7 0x008F2C
+#define R_008F30_SQ_IMG_SAMP_WORD0 0x008F30
+#define S_008F30_CLAMP_X(x) (((unsigned)(x) & 0x07) << 0)
+#define G_008F30_CLAMP_X(x) (((x) >> 0) & 0x07)
+#define C_008F30_CLAMP_X 0xFFFFFFF8
+#define S_008F30_CLAMP_Y(x) (((unsigned)(x) & 0x07) << 3)
+#define G_008F30_CLAMP_Y(x) (((x) >> 3) & 0x07)
+#define C_008F30_CLAMP_Y 0xFFFFFFC7
+#define S_008F30_CLAMP_Z(x) (((unsigned)(x) & 0x07) << 6)
+#define G_008F30_CLAMP_Z(x) (((x) >> 6) & 0x07)
+#define C_008F30_CLAMP_Z 0xFFFFFE3F
+#define S_008F30_MAX_ANISO_RATIO(x) (((unsigned)(x) & 0x07) << 9)
+#define G_008F30_MAX_ANISO_RATIO(x) (((x) >> 9) & 0x07)
+#define C_008F30_MAX_ANISO_RATIO 0xFFFFF1FF
+#define S_008F30_DEPTH_COMPARE_FUNC(x) (((unsigned)(x) & 0x07) << 12)
+#define G_008F30_DEPTH_COMPARE_FUNC(x) (((x) >> 12) & 0x07)
+#define C_008F30_DEPTH_COMPARE_FUNC 0xFFFF8FFF
+#define S_008F30_FORCE_UNNORMALIZED(x) (((unsigned)(x) & 0x1) << 15)
+#define G_008F30_FORCE_UNNORMALIZED(x) (((x) >> 15) & 0x1)
+#define C_008F30_FORCE_UNNORMALIZED 0xFFFF7FFF
+#define S_008F30_ANISO_THRESHOLD(x) (((unsigned)(x) & 0x07) << 16)
+#define G_008F30_ANISO_THRESHOLD(x) (((x) >> 16) & 0x07)
+#define C_008F30_ANISO_THRESHOLD 0xFFF8FFFF
+#define S_008F30_MC_COORD_TRUNC(x) (((unsigned)(x) & 0x1) << 19)
+#define G_008F30_MC_COORD_TRUNC(x) (((x) >> 19) & 0x1)
+#define C_008F30_MC_COORD_TRUNC 0xFFF7FFFF
+#define S_008F30_FORCE_DEGAMMA(x) (((unsigned)(x) & 0x1) << 20)
+#define G_008F30_FORCE_DEGAMMA(x) (((x) >> 20) & 0x1)
+#define C_008F30_FORCE_DEGAMMA 0xFFEFFFFF
+#define S_008F30_ANISO_BIAS(x) (((unsigned)(x) & 0x3F) << 21)
+#define G_008F30_ANISO_BIAS(x) (((x) >> 21) & 0x3F)
+#define C_008F30_ANISO_BIAS 0xF81FFFFF
+#define S_008F30_TRUNC_COORD(x) (((unsigned)(x) & 0x1) << 27)
+#define G_008F30_TRUNC_COORD(x) (((x) >> 27) & 0x1)
+#define C_008F30_TRUNC_COORD 0xF7FFFFFF
+#define S_008F30_DISABLE_CUBE_WRAP(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008F30_DISABLE_CUBE_WRAP(x) (((x) >> 28) & 0x1)
+#define C_008F30_DISABLE_CUBE_WRAP 0xEFFFFFFF
+#define S_008F30_FILTER_MODE(x) (((unsigned)(x) & 0x03) << 29)
+#define G_008F30_FILTER_MODE(x) (((x) >> 29) & 0x03)
+#define C_008F30_FILTER_MODE 0x9FFFFFFF
+#define S_008F30_COMPAT_MODE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008F30_COMPAT_MODE(x) (((x) >> 31) & 0x1)
+#define C_008F30_COMPAT_MODE 0x7FFFFFFF
+#define R_008F34_SQ_IMG_SAMP_WORD1 0x008F34
+#define S_008F34_MIN_LOD(x) (((unsigned)(x) & 0xFFF) << 0)
+#define G_008F34_MIN_LOD(x) (((x) >> 0) & 0xFFF)
+#define C_008F34_MIN_LOD 0xFFFFF000
+#define S_008F34_MAX_LOD(x) (((unsigned)(x) & 0xFFF) << 12)
+#define G_008F34_MAX_LOD(x) (((x) >> 12) & 0xFFF)
+#define C_008F34_MAX_LOD 0xFF000FFF
+#define S_008F34_PERF_MIP(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_008F34_PERF_MIP(x) (((x) >> 24) & 0x0F)
+#define C_008F34_PERF_MIP 0xF0FFFFFF
+#define S_008F34_PERF_Z(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_008F34_PERF_Z(x) (((x) >> 28) & 0x0F)
+#define C_008F34_PERF_Z 0x0FFFFFFF
+#define R_008F38_SQ_IMG_SAMP_WORD2 0x008F38
+#define S_008F38_LOD_BIAS(x) (((unsigned)(x) & 0x3FFF) << 0)
+#define G_008F38_LOD_BIAS(x) (((x) >> 0) & 0x3FFF)
+#define C_008F38_LOD_BIAS 0xFFFFC000
+#define S_008F38_LOD_BIAS_SEC(x) (((unsigned)(x) & 0x3F) << 14)
+#define G_008F38_LOD_BIAS_SEC(x) (((x) >> 14) & 0x3F)
+#define C_008F38_LOD_BIAS_SEC 0xFFF03FFF
+#define S_008F38_XY_MAG_FILTER(x) (((unsigned)(x) & 0x03) << 20)
+#define G_008F38_XY_MAG_FILTER(x) (((x) >> 20) & 0x03)
+#define C_008F38_XY_MAG_FILTER 0xFFCFFFFF
+#define S_008F38_XY_MIN_FILTER(x) (((unsigned)(x) & 0x03) << 22)
+#define G_008F38_XY_MIN_FILTER(x) (((x) >> 22) & 0x03)
+#define C_008F38_XY_MIN_FILTER 0xFF3FFFFF
+#define S_008F38_Z_FILTER(x) (((unsigned)(x) & 0x03) << 24)
+#define G_008F38_Z_FILTER(x) (((x) >> 24) & 0x03)
+#define C_008F38_Z_FILTER 0xFCFFFFFF
+#define S_008F38_MIP_FILTER(x) (((unsigned)(x) & 0x03) << 26)
+#define G_008F38_MIP_FILTER(x) (((x) >> 26) & 0x03)
+#define C_008F38_MIP_FILTER 0xF3FFFFFF
+#define S_008F38_MIP_POINT_PRECLAMP(x) (((unsigned)(x) & 0x1) << 28)
+#define G_008F38_MIP_POINT_PRECLAMP(x) (((x) >> 28) & 0x1)
+#define C_008F38_MIP_POINT_PRECLAMP 0xEFFFFFFF
+#define S_008F38_BLEND_ZERO_PRT(x) (((unsigned)(x) & 0x1) << 29)
+#define G_008F38_BLEND_ZERO_PRT(x) (((x) >> 29) & 0x1)
+#define C_008F38_BLEND_ZERO_PRT 0xDFFFFFFF
+#define S_008F38_FILTER_PREC_FIX(x) (((unsigned)(x) & 0x1) << 30)
+#define G_008F38_FILTER_PREC_FIX(x) (((x) >> 30) & 0x1)
+#define C_008F38_FILTER_PREC_FIX 0xBFFFFFFF
+#define S_008F38_ANISO_OVERRIDE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_008F38_ANISO_OVERRIDE(x) (((x) >> 31) & 0x1)
+#define C_008F38_ANISO_OVERRIDE 0x7FFFFFFF
+#define R_008F3C_SQ_IMG_SAMP_WORD3 0x008F3C
+#define S_008F3C_BORDER_COLOR_PTR(x) (((unsigned)(x) & 0xFFF) << 0)
+#define G_008F3C_BORDER_COLOR_PTR(x) (((x) >> 0) & 0xFFF)
+#define C_008F3C_BORDER_COLOR_PTR 0xFFFFF000
+#define S_008F3C_SKIP_DEGAMMA(x) (((unsigned)(x) & 0x1) << 12)
+#define G_008F3C_SKIP_DEGAMMA(x) (((x) >> 12) & 0x1)
+#define C_008F3C_SKIP_DEGAMMA 0xFFFFEFFF
+#define S_008F3C_BORDER_COLOR_TYPE(x) (((unsigned)(x) & 0x03) << 30)
+#define G_008F3C_BORDER_COLOR_TYPE(x) (((x) >> 30) & 0x03)
+#define C_008F3C_BORDER_COLOR_TYPE 0x3FFFFFFF
+#define R_030FF8_DB_ZPASS_COUNT_LOW 0x030FF8
+#define R_030FFC_DB_ZPASS_COUNT_HI 0x030FFC
+#define S_030FFC_COUNT_HI(x) (((unsigned)(x) & 0x7FFFFFFF) << 0)
+#define G_030FFC_COUNT_HI(x) (((x) >> 0) & 0x7FFFFFFF)
+#define C_030FFC_COUNT_HI 0x80000000
+#define R_031100_SPI_CONFIG_CNTL 0x031100
+#define S_031100_GPR_WRITE_PRIORITY(x) (((unsigned)(x) & 0x1FFFFF) << 0)
+#define G_031100_GPR_WRITE_PRIORITY(x) (((x) >> 0) & 0x1FFFFF)
+#define C_031100_GPR_WRITE_PRIORITY 0xFFE00000
+#define S_031100_EXP_PRIORITY_ORDER(x) (((unsigned)(x) & 0x07) << 21)
+#define G_031100_EXP_PRIORITY_ORDER(x) (((x) >> 21) & 0x07)
+#define C_031100_EXP_PRIORITY_ORDER 0xFF1FFFFF
+#define S_031100_ENABLE_SQG_TOP_EVENTS(x) (((unsigned)(x) & 0x1) << 24)
+#define G_031100_ENABLE_SQG_TOP_EVENTS(x) (((x) >> 24) & 0x1)
+#define C_031100_ENABLE_SQG_TOP_EVENTS 0xFEFFFFFF
+#define S_031100_ENABLE_SQG_BOP_EVENTS(x) (((unsigned)(x) & 0x1) << 25)
+#define G_031100_ENABLE_SQG_BOP_EVENTS(x) (((x) >> 25) & 0x1)
+#define C_031100_ENABLE_SQG_BOP_EVENTS 0xFDFFFFFF
+#define S_031100_RSRC_MGMT_RESET(x) (((unsigned)(x) & 0x1) << 26)
+#define G_031100_RSRC_MGMT_RESET(x) (((x) >> 26) & 0x1)
+#define C_031100_RSRC_MGMT_RESET 0xFBFFFFFF
+#define S_031100_TTRACE_STALL_ALL(x) (((unsigned)(x) & 0x1) << 27)
+#define G_031100_TTRACE_STALL_ALL(x) (((x) >> 27) & 0x1)
+#define C_031100_TTRACE_STALL_ALL 0xF7FFFFFF
+#define S_031100_ALLOC_ARB_LRU_ENA(x) (((unsigned)(x) & 0x1) << 28)
+#define G_031100_ALLOC_ARB_LRU_ENA(x) (((x) >> 28) & 0x1)
+#define C_031100_ALLOC_ARB_LRU_ENA 0xEFFFFFFF
+#define S_031100_EXP_ARB_LRU_ENA(x) (((unsigned)(x) & 0x1) << 29)
+#define G_031100_EXP_ARB_LRU_ENA(x) (((x) >> 29) & 0x1)
+#define C_031100_EXP_ARB_LRU_ENA 0xDFFFFFFF
+#define S_031100_PS_PKR_PRIORITY_CNTL(x) (((unsigned)(x) & 0x03) << 30)
+#define G_031100_PS_PKR_PRIORITY_CNTL(x) (((x) >> 30) & 0x03)
+#define C_031100_PS_PKR_PRIORITY_CNTL 0x3FFFFFFF
+#define R_031104_SPI_CONFIG_CNTL_1 0x031104
+#define S_031104_VTX_DONE_DELAY(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_031104_VTX_DONE_DELAY(x) (((x) >> 0) & 0x0F)
+#define C_031104_VTX_DONE_DELAY 0xFFFFFFF0
+#define S_031104_INTERP_ONE_PRIM_PER_ROW(x) (((unsigned)(x) & 0x1) << 4)
+#define G_031104_INTERP_ONE_PRIM_PER_ROW(x) (((x) >> 4) & 0x1)
+#define C_031104_INTERP_ONE_PRIM_PER_ROW 0xFFFFFFEF
+#define S_031104_BATON_RESET_DISABLE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_031104_BATON_RESET_DISABLE(x) (((x) >> 5) & 0x1)
+#define C_031104_BATON_RESET_DISABLE 0xFFFFFFDF
+#define S_031104_PC_LIMIT_ENABLE(x) (((unsigned)(x) & 0x1) << 6)
+#define G_031104_PC_LIMIT_ENABLE(x) (((x) >> 6) & 0x1)
+#define C_031104_PC_LIMIT_ENABLE 0xFFFFFFBF
+#define S_031104_PC_LIMIT_STRICT(x) (((unsigned)(x) & 0x1) << 7)
+#define G_031104_PC_LIMIT_STRICT(x) (((x) >> 7) & 0x1)
+#define C_031104_PC_LIMIT_STRICT 0xFFFFFF7F
+#define S_031104_CRC_SIMD_ID_WADDR_DISABLE(x) (((unsigned)(x) & 0x1) << 8)
+#define G_031104_CRC_SIMD_ID_WADDR_DISABLE(x) (((x) >> 8) & 0x1)
+#define C_031104_CRC_SIMD_ID_WADDR_DISABLE 0xFFFFFEFF
+#define S_031104_LBPW_CU_CHK_MODE(x) (((unsigned)(x) & 0x1) << 9)
+#define G_031104_LBPW_CU_CHK_MODE(x) (((x) >> 9) & 0x1)
+#define C_031104_LBPW_CU_CHK_MODE 0xFFFFFDFF
+#define S_031104_LBPW_CU_CHK_CNT(x) (((unsigned)(x) & 0x0F) << 10)
+#define G_031104_LBPW_CU_CHK_CNT(x) (((x) >> 10) & 0x0F)
+#define C_031104_LBPW_CU_CHK_CNT 0xFFFFC3FF
+#define S_031104_CSC_PWR_SAVE_DISABLE(x) (((unsigned)(x) & 0x1) << 14)
+#define G_031104_CSC_PWR_SAVE_DISABLE(x) (((x) >> 14) & 0x1)
+#define C_031104_CSC_PWR_SAVE_DISABLE 0xFFFFBFFF
+#define S_031104_CSG_PWR_SAVE_DISABLE(x) (((unsigned)(x) & 0x1) << 15)
+#define G_031104_CSG_PWR_SAVE_DISABLE(x) (((x) >> 15) & 0x1)
+#define C_031104_CSG_PWR_SAVE_DISABLE 0xFFFF7FFF
+#define S_031104_PC_LIMIT_SIZE(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_031104_PC_LIMIT_SIZE(x) (((x) >> 16) & 0xFFFF)
+#define C_031104_PC_LIMIT_SIZE 0x0000FFFF
+#define R_031108_SPI_CONFIG_CNTL_2 0x031108
+#define S_031108_CONTEXT_SAVE_WAIT_GDS_REQUEST_CYCLE_OVHD(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_031108_CONTEXT_SAVE_WAIT_GDS_REQUEST_CYCLE_OVHD(x) (((x) >> 0) & 0x0F)
+#define C_031108_CONTEXT_SAVE_WAIT_GDS_REQUEST_CYCLE_OVHD 0xFFFFFFF0
+#define S_031108_CONTEXT_SAVE_WAIT_GDS_GRANT_CYCLE_OVHD(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_031108_CONTEXT_SAVE_WAIT_GDS_GRANT_CYCLE_OVHD(x) (((x) >> 4) & 0x0F)
+#define C_031108_CONTEXT_SAVE_WAIT_GDS_GRANT_CYCLE_OVHD 0xFFFFFF0F
+#define R_0098F8_GB_ADDR_CONFIG 0x0098F8
+#define S_0098F8_NUM_PIPES(x) (((unsigned)(x) & 0x07) << 0)
+#define G_0098F8_NUM_PIPES(x) (((x) >> 0) & 0x07)
+#define C_0098F8_NUM_PIPES 0xFFFFFFF8
+#define S_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(x) (((unsigned)(x) & 0x07) << 3)
+#define G_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(x) (((x) >> 3) & 0x07)
+#define C_0098F8_PIPE_INTERLEAVE_SIZE_GFX9 0xFFFFFFC7
+#define S_0098F8_MAX_COMPRESSED_FRAGS(x) (((unsigned)(x) & 0x03) << 6)
+#define G_0098F8_MAX_COMPRESSED_FRAGS(x) (((x) >> 6) & 0x03)
+#define C_0098F8_MAX_COMPRESSED_FRAGS 0xFFFFFF3F
+#define S_0098F8_BANK_INTERLEAVE_SIZE(x) (((unsigned)(x) & 0x07) << 8)
+#define G_0098F8_BANK_INTERLEAVE_SIZE(x) (((x) >> 8) & 0x07)
+#define C_0098F8_BANK_INTERLEAVE_SIZE 0xFFFFF8FF
+#define S_0098F8_NUM_BANKS(x) (((unsigned)(x) & 0x07) << 12)
+#define G_0098F8_NUM_BANKS(x) (((x) >> 12) & 0x07)
+#define C_0098F8_NUM_BANKS 0xFFFF8FFF
+#define S_0098F8_SHADER_ENGINE_TILE_SIZE(x) (((unsigned)(x) & 0x07) << 16)
+#define G_0098F8_SHADER_ENGINE_TILE_SIZE(x) (((x) >> 16) & 0x07)
+#define C_0098F8_SHADER_ENGINE_TILE_SIZE 0xFFF8FFFF
+#define S_0098F8_NUM_SHADER_ENGINES_GFX9(x) (((unsigned)(x) & 0x03) << 19)
+#define G_0098F8_NUM_SHADER_ENGINES_GFX9(x) (((x) >> 19) & 0x03)
+#define C_0098F8_NUM_SHADER_ENGINES_GFX9 0xFFE7FFFF
+#define S_0098F8_NUM_GPUS_GFX9(x) (((unsigned)(x) & 0x07) << 21)
+#define G_0098F8_NUM_GPUS_GFX9(x) (((x) >> 21) & 0x07)
+#define C_0098F8_NUM_GPUS_GFX9 0xFF1FFFFF
+#define S_0098F8_MULTI_GPU_TILE_SIZE(x) (((unsigned)(x) & 0x03) << 24)
+#define G_0098F8_MULTI_GPU_TILE_SIZE(x) (((x) >> 24) & 0x03)
+#define C_0098F8_MULTI_GPU_TILE_SIZE 0xFCFFFFFF
+#define S_0098F8_NUM_RB_PER_SE(x) (((unsigned)(x) & 0x03) << 26)
+#define G_0098F8_NUM_RB_PER_SE(x) (((x) >> 26) & 0x03)
+#define C_0098F8_NUM_RB_PER_SE 0xF3FFFFFF
+#define S_0098F8_ROW_SIZE(x) (((unsigned)(x) & 0x03) << 28)
+#define G_0098F8_ROW_SIZE(x) (((x) >> 28) & 0x03)
+#define C_0098F8_ROW_SIZE 0xCFFFFFFF
+#define S_0098F8_NUM_LOWER_PIPES(x) (((unsigned)(x) & 0x1) << 30)
+#define G_0098F8_NUM_LOWER_PIPES(x) (((x) >> 30) & 0x1)
+#define C_0098F8_NUM_LOWER_PIPES 0xBFFFFFFF
+#define S_0098F8_SE_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_0098F8_SE_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_0098F8_SE_ENABLE 0x7FFFFFFF
+#define R_009910_GB_TILE_MODE0 0x009910
+#define S_009910_ARRAY_MODE(x) (((unsigned)(x) & 0x0F) << 2)
+#define G_009910_ARRAY_MODE(x) (((x) >> 2) & 0x0F)
+#define C_009910_ARRAY_MODE 0xFFFFFFC3
+#define S_009910_PIPE_CONFIG(x) (((unsigned)(x) & 0x1F) << 6)
+#define G_009910_PIPE_CONFIG(x) (((x) >> 6) & 0x1F)
+#define C_009910_PIPE_CONFIG 0xFFFFF83F
+#define S_009910_TILE_SPLIT(x) (((unsigned)(x) & 0x07) << 11)
+#define G_009910_TILE_SPLIT(x) (((x) >> 11) & 0x07)
+#define C_009910_TILE_SPLIT 0xFFFFC7FF
+#define S_009910_MICRO_TILE_MODE_NEW(x) (((unsigned)(x) & 0x07) << 22)
+#define G_009910_MICRO_TILE_MODE_NEW(x) (((x) >> 22) & 0x07)
+#define C_009910_MICRO_TILE_MODE_NEW 0xFE3FFFFF
+#define S_009910_SAMPLE_SPLIT(x) (((unsigned)(x) & 0x03) << 25)
+#define G_009910_SAMPLE_SPLIT(x) (((x) >> 25) & 0x03)
+#define C_009910_SAMPLE_SPLIT 0xF9FFFFFF
+#define R_009914_GB_TILE_MODE1 0x009914
+#define R_009918_GB_TILE_MODE2 0x009918
+#define R_00991C_GB_TILE_MODE3 0x00991C
+#define R_009920_GB_TILE_MODE4 0x009920
+#define R_009924_GB_TILE_MODE5 0x009924
+#define R_009928_GB_TILE_MODE6 0x009928
+#define R_00992C_GB_TILE_MODE7 0x00992C
+#define R_009930_GB_TILE_MODE8 0x009930
+#define R_009934_GB_TILE_MODE9 0x009934
+#define R_009938_GB_TILE_MODE10 0x009938
+#define R_00993C_GB_TILE_MODE11 0x00993C
+#define R_009940_GB_TILE_MODE12 0x009940
+#define R_009944_GB_TILE_MODE13 0x009944
+#define R_009948_GB_TILE_MODE14 0x009948
+#define R_00994C_GB_TILE_MODE15 0x00994C
+#define R_009950_GB_TILE_MODE16 0x009950
+#define R_009954_GB_TILE_MODE17 0x009954
+#define R_009958_GB_TILE_MODE18 0x009958
+#define R_00995C_GB_TILE_MODE19 0x00995C
+#define R_009960_GB_TILE_MODE20 0x009960
+#define R_009964_GB_TILE_MODE21 0x009964
+#define R_009968_GB_TILE_MODE22 0x009968
+#define R_00996C_GB_TILE_MODE23 0x00996C
+#define R_009970_GB_TILE_MODE24 0x009970
+#define R_009974_GB_TILE_MODE25 0x009974
+#define R_009978_GB_TILE_MODE26 0x009978
+#define R_00997C_GB_TILE_MODE27 0x00997C
+#define R_009980_GB_TILE_MODE28 0x009980
+#define R_009984_GB_TILE_MODE29 0x009984
+#define R_009988_GB_TILE_MODE30 0x009988
+#define R_00998C_GB_TILE_MODE31 0x00998C
+#define R_009990_GB_MACROTILE_MODE0 0x009990
+#define S_009990_BANK_WIDTH(x) (((unsigned)(x) & 0x03) << 0)
+#define G_009990_BANK_WIDTH(x) (((x) >> 0) & 0x03)
+#define C_009990_BANK_WIDTH 0xFFFFFFFC
+#define S_009990_BANK_HEIGHT(x) (((unsigned)(x) & 0x03) << 2)
+#define G_009990_BANK_HEIGHT(x) (((x) >> 2) & 0x03)
+#define C_009990_BANK_HEIGHT 0xFFFFFFF3
+#define S_009990_MACRO_TILE_ASPECT(x) (((unsigned)(x) & 0x03) << 4)
+#define G_009990_MACRO_TILE_ASPECT(x) (((x) >> 4) & 0x03)
+#define C_009990_MACRO_TILE_ASPECT 0xFFFFFFCF
+#define S_009990_NUM_BANKS(x) (((unsigned)(x) & 0x03) << 6)
+#define G_009990_NUM_BANKS(x) (((x) >> 6) & 0x03)
+#define C_009990_NUM_BANKS 0xFFFFFF3F
+#define R_009994_GB_MACROTILE_MODE1 0x009994
+#define R_009998_GB_MACROTILE_MODE2 0x009998
+#define R_00999C_GB_MACROTILE_MODE3 0x00999C
+#define R_0099A0_GB_MACROTILE_MODE4 0x0099A0
+#define R_0099A4_GB_MACROTILE_MODE5 0x0099A4
+#define R_0099A8_GB_MACROTILE_MODE6 0x0099A8
+#define R_0099AC_GB_MACROTILE_MODE7 0x0099AC
+#define R_0099B0_GB_MACROTILE_MODE8 0x0099B0
+#define R_0099B4_GB_MACROTILE_MODE9 0x0099B4
+#define R_0099B8_GB_MACROTILE_MODE10 0x0099B8
+#define R_0099BC_GB_MACROTILE_MODE11 0x0099BC
+#define R_0099C0_GB_MACROTILE_MODE12 0x0099C0
+#define R_0099C4_GB_MACROTILE_MODE13 0x0099C4
+#define R_0099C8_GB_MACROTILE_MODE14 0x0099C8
+#define R_0099CC_GB_MACROTILE_MODE15 0x0099CC
+#define R_00B01C_SPI_SHADER_PGM_RSRC3_PS 0x00B01C
+#define S_00B01C_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B01C_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B01C_CU_EN 0xFFFF0000
+#define S_00B01C_WAVE_LIMIT(x) (((unsigned)(x) & 0x3F) << 16)
+#define G_00B01C_WAVE_LIMIT(x) (((x) >> 16) & 0x3F)
+#define C_00B01C_WAVE_LIMIT 0xFFC0FFFF
+#define S_00B01C_LOCK_LOW_THRESHOLD(x) (((unsigned)(x) & 0x0F) << 22)
+#define G_00B01C_LOCK_LOW_THRESHOLD(x) (((x) >> 22) & 0x0F)
+#define C_00B01C_LOCK_LOW_THRESHOLD 0xFC3FFFFF
+#define S_00B01C_SIMD_DISABLE(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_00B01C_SIMD_DISABLE(x) (((x) >> 26) & 0x0F)
+#define C_00B01C_SIMD_DISABLE 0xC3FFFFFF
+#define R_00B020_SPI_SHADER_PGM_LO_PS 0x00B020
+#define R_00B024_SPI_SHADER_PGM_HI_PS 0x00B024
+#define S_00B024_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B024_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B024_MEM_BASE 0xFFFFFF00
+#define R_00B028_SPI_SHADER_PGM_RSRC1_PS 0x00B028
+#define S_00B028_VGPRS(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B028_VGPRS(x) (((x) >> 0) & 0x3F)
+#define C_00B028_VGPRS 0xFFFFFFC0
+#define S_00B028_SGPRS(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B028_SGPRS(x) (((x) >> 6) & 0x0F)
+#define C_00B028_SGPRS 0xFFFFFC3F
+#define S_00B028_PRIORITY(x) (((unsigned)(x) & 0x03) << 10)
+#define G_00B028_PRIORITY(x) (((x) >> 10) & 0x03)
+#define C_00B028_PRIORITY 0xFFFFF3FF
+#define S_00B028_FLOAT_MODE(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_00B028_FLOAT_MODE(x) (((x) >> 12) & 0xFF)
+#define C_00B028_FLOAT_MODE 0xFFF00FFF
+#define S_00B028_PRIV(x) (((unsigned)(x) & 0x1) << 20)
+#define G_00B028_PRIV(x) (((x) >> 20) & 0x1)
+#define C_00B028_PRIV 0xFFEFFFFF
+#define S_00B028_DX10_CLAMP(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00B028_DX10_CLAMP(x) (((x) >> 21) & 0x1)
+#define C_00B028_DX10_CLAMP 0xFFDFFFFF
+#define S_00B028_DEBUG_MODE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B028_DEBUG_MODE(x) (((x) >> 22) & 0x1)
+#define C_00B028_DEBUG_MODE 0xFFBFFFFF
+#define S_00B028_IEEE_MODE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B028_IEEE_MODE(x) (((x) >> 23) & 0x1)
+#define C_00B028_IEEE_MODE 0xFF7FFFFF
+#define S_00B028_CU_GROUP_DISABLE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_00B028_CU_GROUP_DISABLE(x) (((x) >> 24) & 0x1)
+#define C_00B028_CU_GROUP_DISABLE 0xFEFFFFFF
+#define S_00B028_CDBG_USER(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B028_CDBG_USER(x) (((x) >> 28) & 0x1)
+#define C_00B028_CDBG_USER 0xEFFFFFFF
+#define S_00B028_FP16_OVFL(x) (((unsigned)(x) & 0x1) << 29)
+#define G_00B028_FP16_OVFL(x) (((x) >> 29) & 0x1)
+#define C_00B028_FP16_OVFL 0xDFFFFFFF
+#define R_00B02C_SPI_SHADER_PGM_RSRC2_PS 0x00B02C
+#define S_00B02C_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B02C_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B02C_SCRATCH_EN 0xFFFFFFFE
+#define S_00B02C_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B02C_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B02C_USER_SGPR 0xFFFFFFC1
+#define S_00B02C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B02C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B02C_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B02C_WAVE_CNT_EN(x) (((unsigned)(x) & 0x1) << 7)
+#define G_00B02C_WAVE_CNT_EN(x) (((x) >> 7) & 0x1)
+#define C_00B02C_WAVE_CNT_EN 0xFFFFFF7F
+#define S_00B02C_EXTRA_LDS_SIZE(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_00B02C_EXTRA_LDS_SIZE(x) (((x) >> 8) & 0xFF)
+#define C_00B02C_EXTRA_LDS_SIZE 0xFFFF00FF
+#define S_00B02C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 16)
+#define G_00B02C_EXCP_EN(x) (((x) >> 16) & 0x1FF)
+#define C_00B02C_EXCP_EN 0xFE00FFFF
+#define S_00B02C_LOAD_COLLISION_WAVEID(x) (((unsigned)(x) & 0x1) << 25)
+#define G_00B02C_LOAD_COLLISION_WAVEID(x) (((x) >> 25) & 0x1)
+#define C_00B02C_LOAD_COLLISION_WAVEID 0xFDFFFFFF
+#define S_00B02C_LOAD_INTRAWAVE_COLLISION(x) (((unsigned)(x) & 0x1) << 26)
+#define G_00B02C_LOAD_INTRAWAVE_COLLISION(x) (((x) >> 26) & 0x1)
+#define C_00B02C_LOAD_INTRAWAVE_COLLISION 0xFBFFFFFF
+#define S_00B02C_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B02C_SKIP_USGPR0(x) (((x) >> 27) & 0x1)
+#define C_00B02C_SKIP_USGPR0 0xF7FFFFFF
+#define S_00B02C_USER_SGPR_MSB(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B02C_USER_SGPR_MSB(x) (((x) >> 28) & 0x1)
+#define C_00B02C_USER_SGPR_MSB 0xEFFFFFFF
+#define R_00B030_SPI_SHADER_USER_DATA_PS_0 0x00B030
+#define R_00B034_SPI_SHADER_USER_DATA_PS_1 0x00B034
+#define R_00B038_SPI_SHADER_USER_DATA_PS_2 0x00B038
+#define R_00B03C_SPI_SHADER_USER_DATA_PS_3 0x00B03C
+#define R_00B040_SPI_SHADER_USER_DATA_PS_4 0x00B040
+#define R_00B044_SPI_SHADER_USER_DATA_PS_5 0x00B044
+#define R_00B048_SPI_SHADER_USER_DATA_PS_6 0x00B048
+#define R_00B04C_SPI_SHADER_USER_DATA_PS_7 0x00B04C
+#define R_00B050_SPI_SHADER_USER_DATA_PS_8 0x00B050
+#define R_00B054_SPI_SHADER_USER_DATA_PS_9 0x00B054
+#define R_00B058_SPI_SHADER_USER_DATA_PS_10 0x00B058
+#define R_00B05C_SPI_SHADER_USER_DATA_PS_11 0x00B05C
+#define R_00B060_SPI_SHADER_USER_DATA_PS_12 0x00B060
+#define R_00B064_SPI_SHADER_USER_DATA_PS_13 0x00B064
+#define R_00B068_SPI_SHADER_USER_DATA_PS_14 0x00B068
+#define R_00B06C_SPI_SHADER_USER_DATA_PS_15 0x00B06C
+#define R_00B070_SPI_SHADER_USER_DATA_PS_16 0x00B070
+#define R_00B074_SPI_SHADER_USER_DATA_PS_17 0x00B074
+#define R_00B078_SPI_SHADER_USER_DATA_PS_18 0x00B078
+#define R_00B07C_SPI_SHADER_USER_DATA_PS_19 0x00B07C
+#define R_00B080_SPI_SHADER_USER_DATA_PS_20 0x00B080
+#define R_00B084_SPI_SHADER_USER_DATA_PS_21 0x00B084
+#define R_00B088_SPI_SHADER_USER_DATA_PS_22 0x00B088
+#define R_00B08C_SPI_SHADER_USER_DATA_PS_23 0x00B08C
+#define R_00B090_SPI_SHADER_USER_DATA_PS_24 0x00B090
+#define R_00B094_SPI_SHADER_USER_DATA_PS_25 0x00B094
+#define R_00B098_SPI_SHADER_USER_DATA_PS_26 0x00B098
+#define R_00B09C_SPI_SHADER_USER_DATA_PS_27 0x00B09C
+#define R_00B0A0_SPI_SHADER_USER_DATA_PS_28 0x00B0A0
+#define R_00B0A4_SPI_SHADER_USER_DATA_PS_29 0x00B0A4
+#define R_00B0A8_SPI_SHADER_USER_DATA_PS_30 0x00B0A8
+#define R_00B0AC_SPI_SHADER_USER_DATA_PS_31 0x00B0AC
+#define R_00B118_SPI_SHADER_PGM_RSRC3_VS 0x00B118
+#define S_00B118_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B118_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B118_CU_EN 0xFFFF0000
+#define S_00B118_WAVE_LIMIT(x) (((unsigned)(x) & 0x3F) << 16)
+#define G_00B118_WAVE_LIMIT(x) (((x) >> 16) & 0x3F)
+#define C_00B118_WAVE_LIMIT 0xFFC0FFFF
+#define S_00B118_LOCK_LOW_THRESHOLD(x) (((unsigned)(x) & 0x0F) << 22)
+#define G_00B118_LOCK_LOW_THRESHOLD(x) (((x) >> 22) & 0x0F)
+#define C_00B118_LOCK_LOW_THRESHOLD 0xFC3FFFFF
+#define S_00B118_SIMD_DISABLE(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_00B118_SIMD_DISABLE(x) (((x) >> 26) & 0x0F)
+#define C_00B118_SIMD_DISABLE 0xC3FFFFFF
+#define R_00B11C_SPI_SHADER_LATE_ALLOC_VS 0x00B11C
+#define S_00B11C_LIMIT(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B11C_LIMIT(x) (((x) >> 0) & 0x3F)
+#define C_00B11C_LIMIT 0xFFFFFFC0
+#define R_00B120_SPI_SHADER_PGM_LO_VS 0x00B120
+#define R_00B124_SPI_SHADER_PGM_HI_VS 0x00B124
+#define S_00B124_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B124_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B124_MEM_BASE 0xFFFFFF00
+#define R_00B128_SPI_SHADER_PGM_RSRC1_VS 0x00B128
+#define S_00B128_VGPRS(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B128_VGPRS(x) (((x) >> 0) & 0x3F)
+#define C_00B128_VGPRS 0xFFFFFFC0
+#define S_00B128_SGPRS(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B128_SGPRS(x) (((x) >> 6) & 0x0F)
+#define C_00B128_SGPRS 0xFFFFFC3F
+#define S_00B128_PRIORITY(x) (((unsigned)(x) & 0x03) << 10)
+#define G_00B128_PRIORITY(x) (((x) >> 10) & 0x03)
+#define C_00B128_PRIORITY 0xFFFFF3FF
+#define S_00B128_FLOAT_MODE(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_00B128_FLOAT_MODE(x) (((x) >> 12) & 0xFF)
+#define C_00B128_FLOAT_MODE 0xFFF00FFF
+#define S_00B128_PRIV(x) (((unsigned)(x) & 0x1) << 20)
+#define G_00B128_PRIV(x) (((x) >> 20) & 0x1)
+#define C_00B128_PRIV 0xFFEFFFFF
+#define S_00B128_DX10_CLAMP(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00B128_DX10_CLAMP(x) (((x) >> 21) & 0x1)
+#define C_00B128_DX10_CLAMP 0xFFDFFFFF
+#define S_00B128_DEBUG_MODE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B128_DEBUG_MODE(x) (((x) >> 22) & 0x1)
+#define C_00B128_DEBUG_MODE 0xFFBFFFFF
+#define S_00B128_IEEE_MODE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B128_IEEE_MODE(x) (((x) >> 23) & 0x1)
+#define C_00B128_IEEE_MODE 0xFF7FFFFF
+#define S_00B128_VGPR_COMP_CNT(x) (((unsigned)(x) & 0x03) << 24)
+#define G_00B128_VGPR_COMP_CNT(x) (((x) >> 24) & 0x03)
+#define C_00B128_VGPR_COMP_CNT 0xFCFFFFFF
+#define S_00B128_CU_GROUP_ENABLE(x) (((unsigned)(x) & 0x1) << 26)
+#define G_00B128_CU_GROUP_ENABLE(x) (((x) >> 26) & 0x1)
+#define C_00B128_CU_GROUP_ENABLE 0xFBFFFFFF
+#define S_00B128_CDBG_USER(x) (((unsigned)(x) & 0x1) << 30)
+#define G_00B128_CDBG_USER(x) (((x) >> 30) & 0x1)
+#define C_00B128_CDBG_USER 0xBFFFFFFF
+#define S_00B128_FP16_OVFL(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00B128_FP16_OVFL(x) (((x) >> 31) & 0x1)
+#define C_00B128_FP16_OVFL 0x7FFFFFFF
+#define R_00B12C_SPI_SHADER_PGM_RSRC2_VS 0x00B12C
+#define S_00B12C_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B12C_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B12C_SCRATCH_EN 0xFFFFFFFE
+#define S_00B12C_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B12C_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B12C_USER_SGPR 0xFFFFFFC1
+#define S_00B12C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B12C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B12C_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B12C_OC_LDS_EN(x) (((unsigned)(x) & 0x1) << 7)
+#define G_00B12C_OC_LDS_EN(x) (((x) >> 7) & 0x1)
+#define C_00B12C_OC_LDS_EN 0xFFFFFF7F
+#define S_00B12C_SO_BASE0_EN(x) (((unsigned)(x) & 0x1) << 8)
+#define G_00B12C_SO_BASE0_EN(x) (((x) >> 8) & 0x1)
+#define C_00B12C_SO_BASE0_EN 0xFFFFFEFF
+#define S_00B12C_SO_BASE1_EN(x) (((unsigned)(x) & 0x1) << 9)
+#define G_00B12C_SO_BASE1_EN(x) (((x) >> 9) & 0x1)
+#define C_00B12C_SO_BASE1_EN 0xFFFFFDFF
+#define S_00B12C_SO_BASE2_EN(x) (((unsigned)(x) & 0x1) << 10)
+#define G_00B12C_SO_BASE2_EN(x) (((x) >> 10) & 0x1)
+#define C_00B12C_SO_BASE2_EN 0xFFFFFBFF
+#define S_00B12C_SO_BASE3_EN(x) (((unsigned)(x) & 0x1) << 11)
+#define G_00B12C_SO_BASE3_EN(x) (((x) >> 11) & 0x1)
+#define C_00B12C_SO_BASE3_EN 0xFFFFF7FF
+#define S_00B12C_SO_EN(x) (((unsigned)(x) & 0x1) << 12)
+#define G_00B12C_SO_EN(x) (((x) >> 12) & 0x1)
+#define C_00B12C_SO_EN 0xFFFFEFFF
+#define S_00B12C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 13)
+#define G_00B12C_EXCP_EN(x) (((x) >> 13) & 0x1FF)
+#define C_00B12C_EXCP_EN 0xFFC01FFF
+#define S_00B12C_PC_BASE_EN(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B12C_PC_BASE_EN(x) (((x) >> 22) & 0x1)
+#define C_00B12C_PC_BASE_EN 0xFFBFFFFF
+#define S_00B12C_DISPATCH_DRAW_EN(x) (((unsigned)(x) & 0x1) << 24)
+#define G_00B12C_DISPATCH_DRAW_EN(x) (((x) >> 24) & 0x1)
+#define C_00B12C_DISPATCH_DRAW_EN 0xFEFFFFFF
+#define S_00B12C_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B12C_SKIP_USGPR0(x) (((x) >> 27) & 0x1)
+#define C_00B12C_SKIP_USGPR0 0xF7FFFFFF
+#define S_00B12C_USER_SGPR_MSB(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B12C_USER_SGPR_MSB(x) (((x) >> 28) & 0x1)
+#define C_00B12C_USER_SGPR_MSB 0xEFFFFFFF
+#define R_00B130_SPI_SHADER_USER_DATA_VS_0 0x00B130
+#define R_00B134_SPI_SHADER_USER_DATA_VS_1 0x00B134
+#define R_00B138_SPI_SHADER_USER_DATA_VS_2 0x00B138
+#define R_00B13C_SPI_SHADER_USER_DATA_VS_3 0x00B13C
+#define R_00B140_SPI_SHADER_USER_DATA_VS_4 0x00B140
+#define R_00B144_SPI_SHADER_USER_DATA_VS_5 0x00B144
+#define R_00B148_SPI_SHADER_USER_DATA_VS_6 0x00B148
+#define R_00B14C_SPI_SHADER_USER_DATA_VS_7 0x00B14C
+#define R_00B150_SPI_SHADER_USER_DATA_VS_8 0x00B150
+#define R_00B154_SPI_SHADER_USER_DATA_VS_9 0x00B154
+#define R_00B158_SPI_SHADER_USER_DATA_VS_10 0x00B158
+#define R_00B15C_SPI_SHADER_USER_DATA_VS_11 0x00B15C
+#define R_00B160_SPI_SHADER_USER_DATA_VS_12 0x00B160
+#define R_00B164_SPI_SHADER_USER_DATA_VS_13 0x00B164
+#define R_00B168_SPI_SHADER_USER_DATA_VS_14 0x00B168
+#define R_00B16C_SPI_SHADER_USER_DATA_VS_15 0x00B16C
+#define R_00B170_SPI_SHADER_USER_DATA_VS_16 0x00B170
+#define R_00B174_SPI_SHADER_USER_DATA_VS_17 0x00B174
+#define R_00B178_SPI_SHADER_USER_DATA_VS_18 0x00B178
+#define R_00B17C_SPI_SHADER_USER_DATA_VS_19 0x00B17C
+#define R_00B180_SPI_SHADER_USER_DATA_VS_20 0x00B180
+#define R_00B184_SPI_SHADER_USER_DATA_VS_21 0x00B184
+#define R_00B188_SPI_SHADER_USER_DATA_VS_22 0x00B188
+#define R_00B18C_SPI_SHADER_USER_DATA_VS_23 0x00B18C
+#define R_00B190_SPI_SHADER_USER_DATA_VS_24 0x00B190
+#define R_00B194_SPI_SHADER_USER_DATA_VS_25 0x00B194
+#define R_00B198_SPI_SHADER_USER_DATA_VS_26 0x00B198
+#define R_00B19C_SPI_SHADER_USER_DATA_VS_27 0x00B19C
+#define R_00B1A0_SPI_SHADER_USER_DATA_VS_28 0x00B1A0
+#define R_00B1A4_SPI_SHADER_USER_DATA_VS_29 0x00B1A4
+#define R_00B1A8_SPI_SHADER_USER_DATA_VS_30 0x00B1A8
+#define R_00B1AC_SPI_SHADER_USER_DATA_VS_31 0x00B1AC
+#define R_00B1F0_SPI_SHADER_PGM_RSRC2_GS_VS 0x00B1F0
+#define S_00B1F0_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B1F0_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B1F0_SCRATCH_EN 0xFFFFFFFE
+#define S_00B1F0_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B1F0_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B1F0_USER_SGPR 0xFFFFFFC1
+#define S_00B1F0_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B1F0_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B1F0_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B1F0_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 7)
+#define G_00B1F0_EXCP_EN(x) (((x) >> 7) & 0x1FF)
+#define C_00B1F0_EXCP_EN 0xFFFF007F
+#define S_00B1F0_VGPR_COMP_CNT(x) (((unsigned)(x) & 0x03) << 16)
+#define G_00B1F0_VGPR_COMP_CNT(x) (((x) >> 16) & 0x03)
+#define C_00B1F0_VGPR_COMP_CNT 0xFFFCFFFF
+#define S_00B1F0_OC_LDS_EN(x) (((unsigned)(x) & 0x1) << 18)
+#define G_00B1F0_OC_LDS_EN(x) (((x) >> 18) & 0x1)
+#define C_00B1F0_OC_LDS_EN 0xFFFBFFFF
+#define S_00B1F0_LDS_SIZE(x) (((unsigned)(x) & 0xFF) << 19)
+#define G_00B1F0_LDS_SIZE(x) (((x) >> 19) & 0xFF)
+#define C_00B1F0_LDS_SIZE 0xF807FFFF
+#define S_00B1F0_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B1F0_SKIP_USGPR0(x) (((x) >> 27) & 0x1)
+#define C_00B1F0_SKIP_USGPR0 0xF7FFFFFF
+#define S_00B1F0_USER_SGPR_MSB(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B1F0_USER_SGPR_MSB(x) (((x) >> 28) & 0x1)
+#define C_00B1F0_USER_SGPR_MSB 0xEFFFFFFF
+#define R_00B204_SPI_SHADER_PGM_RSRC4_GS 0x00B204
+#define S_00B204_GROUP_FIFO_DEPTH(x) (((unsigned)(x) & 0x7F) << 0)
+#define G_00B204_GROUP_FIFO_DEPTH(x) (((x) >> 0) & 0x7F)
+#define C_00B204_GROUP_FIFO_DEPTH 0xFFFFFF80
+#define S_00B204_SPI_SHADER_LATE_ALLOC_GS(x) (((unsigned)(x) & 0x7F) << 7)
+#define G_00B204_SPI_SHADER_LATE_ALLOC_GS(x) (((x) >> 7) & 0x7F)
+#define C_00B204_SPI_SHADER_LATE_ALLOC_GS 0xFFFFC07F
+#define R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS 0x00B208
+#define R_00B20C_SPI_SHADER_USER_DATA_ADDR_HI_GS 0x00B20C
+#define R_00B210_SPI_SHADER_PGM_LO_ES 0x00B210
+#define R_00B214_SPI_SHADER_PGM_HI_ES 0x00B214
+#define S_00B214_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B214_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B214_MEM_BASE 0xFFFFFF00
+#define R_00B21C_SPI_SHADER_PGM_RSRC3_GS 0x00B21C
+#define S_00B21C_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B21C_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B21C_CU_EN 0xFFFF0000
+#define S_00B21C_WAVE_LIMIT(x) (((unsigned)(x) & 0x3F) << 16)
+#define G_00B21C_WAVE_LIMIT(x) (((x) >> 16) & 0x3F)
+#define C_00B21C_WAVE_LIMIT 0xFFC0FFFF
+#define S_00B21C_LOCK_LOW_THRESHOLD(x) (((unsigned)(x) & 0x0F) << 22)
+#define G_00B21C_LOCK_LOW_THRESHOLD(x) (((x) >> 22) & 0x0F)
+#define C_00B21C_LOCK_LOW_THRESHOLD 0xFC3FFFFF
+#define S_00B21C_SIMD_DISABLE(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_00B21C_SIMD_DISABLE(x) (((x) >> 26) & 0x0F)
+#define C_00B21C_SIMD_DISABLE 0xC3FFFFFF
+#define R_00B220_SPI_SHADER_PGM_LO_GS 0x00B220
+#define R_00B224_SPI_SHADER_PGM_HI_GS 0x00B224
+#define S_00B224_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B224_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B224_MEM_BASE 0xFFFFFF00
+#define R_00B228_SPI_SHADER_PGM_RSRC1_GS 0x00B228
+#define S_00B228_VGPRS(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B228_VGPRS(x) (((x) >> 0) & 0x3F)
+#define C_00B228_VGPRS 0xFFFFFFC0
+#define S_00B228_SGPRS(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B228_SGPRS(x) (((x) >> 6) & 0x0F)
+#define C_00B228_SGPRS 0xFFFFFC3F
+#define S_00B228_PRIORITY(x) (((unsigned)(x) & 0x03) << 10)
+#define G_00B228_PRIORITY(x) (((x) >> 10) & 0x03)
+#define C_00B228_PRIORITY 0xFFFFF3FF
+#define S_00B228_FLOAT_MODE(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_00B228_FLOAT_MODE(x) (((x) >> 12) & 0xFF)
+#define C_00B228_FLOAT_MODE 0xFFF00FFF
+#define S_00B228_PRIV(x) (((unsigned)(x) & 0x1) << 20)
+#define G_00B228_PRIV(x) (((x) >> 20) & 0x1)
+#define C_00B228_PRIV 0xFFEFFFFF
+#define S_00B228_DX10_CLAMP(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00B228_DX10_CLAMP(x) (((x) >> 21) & 0x1)
+#define C_00B228_DX10_CLAMP 0xFFDFFFFF
+#define S_00B228_DEBUG_MODE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B228_DEBUG_MODE(x) (((x) >> 22) & 0x1)
+#define C_00B228_DEBUG_MODE 0xFFBFFFFF
+#define S_00B228_IEEE_MODE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B228_IEEE_MODE(x) (((x) >> 23) & 0x1)
+#define C_00B228_IEEE_MODE 0xFF7FFFFF
+#define S_00B228_CU_GROUP_ENABLE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_00B228_CU_GROUP_ENABLE(x) (((x) >> 24) & 0x1)
+#define C_00B228_CU_GROUP_ENABLE 0xFEFFFFFF
+#define S_00B228_CDBG_USER(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B228_CDBG_USER(x) (((x) >> 28) & 0x1)
+#define C_00B228_CDBG_USER 0xEFFFFFFF
+#define S_00B228_GS_VGPR_COMP_CNT(x) (((unsigned)(x) & 0x03) << 29)
+#define G_00B228_GS_VGPR_COMP_CNT(x) (((x) >> 29) & 0x03)
+#define C_00B228_GS_VGPR_COMP_CNT 0x9FFFFFFF
+#define S_00B228_FP16_OVFL(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00B228_FP16_OVFL(x) (((x) >> 31) & 0x1)
+#define C_00B228_FP16_OVFL 0x7FFFFFFF
+#define R_00B22C_SPI_SHADER_PGM_RSRC2_GS 0x00B22C
+#define S_00B22C_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B22C_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B22C_SCRATCH_EN 0xFFFFFFFE
+#define S_00B22C_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B22C_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B22C_USER_SGPR 0xFFFFFFC1
+#define S_00B22C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B22C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B22C_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B22C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 7)
+#define G_00B22C_EXCP_EN(x) (((x) >> 7) & 0x1FF)
+#define C_00B22C_EXCP_EN 0xFFFF007F
+#define S_00B22C_ES_VGPR_COMP_CNT(x) (((unsigned)(x) & 0x03) << 16)
+#define G_00B22C_ES_VGPR_COMP_CNT(x) (((x) >> 16) & 0x03)
+#define C_00B22C_ES_VGPR_COMP_CNT 0xFFFCFFFF
+#define S_00B22C_OC_LDS_EN(x) (((unsigned)(x) & 0x1) << 18)
+#define G_00B22C_OC_LDS_EN(x) (((x) >> 18) & 0x1)
+#define C_00B22C_OC_LDS_EN 0xFFFBFFFF
+#define S_00B22C_LDS_SIZE(x) (((unsigned)(x) & 0xFF) << 19)
+#define G_00B22C_LDS_SIZE(x) (((x) >> 19) & 0xFF)
+#define C_00B22C_LDS_SIZE 0xF807FFFF
+#define S_00B22C_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B22C_SKIP_USGPR0(x) (((x) >> 27) & 0x1)
+#define C_00B22C_SKIP_USGPR0 0xF7FFFFFF
+#define S_00B22C_USER_SGPR_MSB(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B22C_USER_SGPR_MSB(x) (((x) >> 28) & 0x1)
+#define C_00B22C_USER_SGPR_MSB 0xEFFFFFFF
+#define R_00B330_SPI_SHADER_USER_DATA_ES_0 0x00B330
+#define R_00B334_SPI_SHADER_USER_DATA_ES_1 0x00B334
+#define R_00B338_SPI_SHADER_USER_DATA_ES_2 0x00B338
+#define R_00B33C_SPI_SHADER_USER_DATA_ES_3 0x00B33C
+#define R_00B340_SPI_SHADER_USER_DATA_ES_4 0x00B340
+#define R_00B344_SPI_SHADER_USER_DATA_ES_5 0x00B344
+#define R_00B348_SPI_SHADER_USER_DATA_ES_6 0x00B348
+#define R_00B34C_SPI_SHADER_USER_DATA_ES_7 0x00B34C
+#define R_00B350_SPI_SHADER_USER_DATA_ES_8 0x00B350
+#define R_00B354_SPI_SHADER_USER_DATA_ES_9 0x00B354
+#define R_00B358_SPI_SHADER_USER_DATA_ES_10 0x00B358
+#define R_00B35C_SPI_SHADER_USER_DATA_ES_11 0x00B35C
+#define R_00B360_SPI_SHADER_USER_DATA_ES_12 0x00B360
+#define R_00B364_SPI_SHADER_USER_DATA_ES_13 0x00B364
+#define R_00B368_SPI_SHADER_USER_DATA_ES_14 0x00B368
+#define R_00B36C_SPI_SHADER_USER_DATA_ES_15 0x00B36C
+#define R_00B370_SPI_SHADER_USER_DATA_ES_16 0x00B370
+#define R_00B374_SPI_SHADER_USER_DATA_ES_17 0x00B374
+#define R_00B378_SPI_SHADER_USER_DATA_ES_18 0x00B378
+#define R_00B37C_SPI_SHADER_USER_DATA_ES_19 0x00B37C
+#define R_00B380_SPI_SHADER_USER_DATA_ES_20 0x00B380
+#define R_00B384_SPI_SHADER_USER_DATA_ES_21 0x00B384
+#define R_00B388_SPI_SHADER_USER_DATA_ES_22 0x00B388
+#define R_00B38C_SPI_SHADER_USER_DATA_ES_23 0x00B38C
+#define R_00B390_SPI_SHADER_USER_DATA_ES_24 0x00B390
+#define R_00B394_SPI_SHADER_USER_DATA_ES_25 0x00B394
+#define R_00B398_SPI_SHADER_USER_DATA_ES_26 0x00B398
+#define R_00B39C_SPI_SHADER_USER_DATA_ES_27 0x00B39C
+#define R_00B3A0_SPI_SHADER_USER_DATA_ES_28 0x00B3A0
+#define R_00B3A4_SPI_SHADER_USER_DATA_ES_29 0x00B3A4
+#define R_00B3A8_SPI_SHADER_USER_DATA_ES_30 0x00B3A8
+#define R_00B3AC_SPI_SHADER_USER_DATA_ES_31 0x00B3AC
+#define R_00B404_SPI_SHADER_PGM_RSRC4_HS 0x00B404
+#define S_00B404_GROUP_FIFO_DEPTH(x) (((unsigned)(x) & 0x7F) << 0)
+#define G_00B404_GROUP_FIFO_DEPTH(x) (((x) >> 0) & 0x7F)
+#define C_00B404_GROUP_FIFO_DEPTH 0xFFFFFF80
+#define R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS 0x00B408
+#define R_00B40C_SPI_SHADER_USER_DATA_ADDR_HI_HS 0x00B40C
+#define R_00B410_SPI_SHADER_PGM_LO_LS 0x00B410
+#define R_00B414_SPI_SHADER_PGM_HI_LS 0x00B414
+#define S_00B414_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B414_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B414_MEM_BASE 0xFFFFFF00
+#define R_00B41C_SPI_SHADER_PGM_RSRC3_HS 0x00B41C
+#define S_00B41C_WAVE_LIMIT(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B41C_WAVE_LIMIT(x) (((x) >> 0) & 0x3F)
+#define C_00B41C_WAVE_LIMIT 0xFFFFFFC0
+#define S_00B41C_LOCK_LOW_THRESHOLD(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B41C_LOCK_LOW_THRESHOLD(x) (((x) >> 6) & 0x0F)
+#define C_00B41C_LOCK_LOW_THRESHOLD 0xFFFFFC3F
+#define S_00B41C_SIMD_DISABLE(x) (((unsigned)(x) & 0x0F) << 10)
+#define G_00B41C_SIMD_DISABLE(x) (((x) >> 10) & 0x0F)
+#define C_00B41C_SIMD_DISABLE 0xFFFFC3FF
+#define S_00B41C_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B41C_CU_EN(x) (((x) >> 16) & 0xFFFF)
+#define C_00B41C_CU_EN 0x0000FFFF
+#define R_00B420_SPI_SHADER_PGM_LO_HS 0x00B420
+#define R_00B424_SPI_SHADER_PGM_HI_HS 0x00B424
+#define S_00B424_MEM_BASE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B424_MEM_BASE(x) (((x) >> 0) & 0xFF)
+#define C_00B424_MEM_BASE 0xFFFFFF00
+#define R_00B428_SPI_SHADER_PGM_RSRC1_HS 0x00B428
+#define S_00B428_VGPRS(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B428_VGPRS(x) (((x) >> 0) & 0x3F)
+#define C_00B428_VGPRS 0xFFFFFFC0
+#define S_00B428_SGPRS(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B428_SGPRS(x) (((x) >> 6) & 0x0F)
+#define C_00B428_SGPRS 0xFFFFFC3F
+#define S_00B428_PRIORITY(x) (((unsigned)(x) & 0x03) << 10)
+#define G_00B428_PRIORITY(x) (((x) >> 10) & 0x03)
+#define C_00B428_PRIORITY 0xFFFFF3FF
+#define S_00B428_FLOAT_MODE(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_00B428_FLOAT_MODE(x) (((x) >> 12) & 0xFF)
+#define C_00B428_FLOAT_MODE 0xFFF00FFF
+#define S_00B428_PRIV(x) (((unsigned)(x) & 0x1) << 20)
+#define G_00B428_PRIV(x) (((x) >> 20) & 0x1)
+#define C_00B428_PRIV 0xFFEFFFFF
+#define S_00B428_DX10_CLAMP(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00B428_DX10_CLAMP(x) (((x) >> 21) & 0x1)
+#define C_00B428_DX10_CLAMP 0xFFDFFFFF
+#define S_00B428_DEBUG_MODE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B428_DEBUG_MODE(x) (((x) >> 22) & 0x1)
+#define C_00B428_DEBUG_MODE 0xFFBFFFFF
+#define S_00B428_IEEE_MODE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B428_IEEE_MODE(x) (((x) >> 23) & 0x1)
+#define C_00B428_IEEE_MODE 0xFF7FFFFF
+#define S_00B428_CDBG_USER(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B428_CDBG_USER(x) (((x) >> 27) & 0x1)
+#define C_00B428_CDBG_USER 0xF7FFFFFF
+#define S_00B428_LS_VGPR_COMP_CNT(x) (((unsigned)(x) & 0x03) << 28)
+#define G_00B428_LS_VGPR_COMP_CNT(x) (((x) >> 28) & 0x03)
+#define C_00B428_LS_VGPR_COMP_CNT 0xCFFFFFFF
+#define S_00B428_FP16_OVFL(x) (((unsigned)(x) & 0x1) << 30)
+#define G_00B428_FP16_OVFL(x) (((x) >> 30) & 0x1)
+#define C_00B428_FP16_OVFL 0xBFFFFFFF
+#define R_00B42C_SPI_SHADER_PGM_RSRC2_HS 0x00B42C
+#define S_00B42C_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B42C_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B42C_SCRATCH_EN 0xFFFFFFFE
+#define S_00B42C_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B42C_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B42C_USER_SGPR 0xFFFFFFC1
+#define S_00B42C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B42C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B42C_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B42C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 7)
+#define G_00B42C_EXCP_EN(x) (((x) >> 7) & 0x1FF)
+#define C_00B42C_EXCP_EN 0xFFFF007F
+#define S_00B42C_LDS_SIZE(x) (((unsigned)(x) & 0x1FF) << 16)
+#define G_00B42C_LDS_SIZE(x) (((x) >> 16) & 0x1FF)
+#define C_00B42C_LDS_SIZE 0xFE00FFFF
+#define S_00B42C_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 27)
+#define G_00B42C_SKIP_USGPR0(x) (((x) >> 27) & 0x1)
+#define C_00B42C_SKIP_USGPR0 0xF7FFFFFF
+#define S_00B42C_USER_SGPR_MSB(x) (((unsigned)(x) & 0x1) << 28)
+#define G_00B42C_USER_SGPR_MSB(x) (((x) >> 28) & 0x1)
+#define C_00B42C_USER_SGPR_MSB 0xEFFFFFFF
+#define R_00B430_SPI_SHADER_USER_DATA_LS_0 0x00B430
+#define R_00B434_SPI_SHADER_USER_DATA_LS_1 0x00B434
+#define R_00B438_SPI_SHADER_USER_DATA_LS_2 0x00B438
+#define R_00B43C_SPI_SHADER_USER_DATA_LS_3 0x00B43C
+#define R_00B440_SPI_SHADER_USER_DATA_LS_4 0x00B440
+#define R_00B444_SPI_SHADER_USER_DATA_LS_5 0x00B444
+#define R_00B448_SPI_SHADER_USER_DATA_LS_6 0x00B448
+#define R_00B44C_SPI_SHADER_USER_DATA_LS_7 0x00B44C
+#define R_00B450_SPI_SHADER_USER_DATA_LS_8 0x00B450
+#define R_00B454_SPI_SHADER_USER_DATA_LS_9 0x00B454
+#define R_00B458_SPI_SHADER_USER_DATA_LS_10 0x00B458
+#define R_00B45C_SPI_SHADER_USER_DATA_LS_11 0x00B45C
+#define R_00B460_SPI_SHADER_USER_DATA_LS_12 0x00B460
+#define R_00B464_SPI_SHADER_USER_DATA_LS_13 0x00B464
+#define R_00B468_SPI_SHADER_USER_DATA_LS_14 0x00B468
+#define R_00B46C_SPI_SHADER_USER_DATA_LS_15 0x00B46C
+#define R_00B470_SPI_SHADER_USER_DATA_LS_16 0x00B470
+#define R_00B474_SPI_SHADER_USER_DATA_LS_17 0x00B474
+#define R_00B478_SPI_SHADER_USER_DATA_LS_18 0x00B478
+#define R_00B47C_SPI_SHADER_USER_DATA_LS_19 0x00B47C
+#define R_00B480_SPI_SHADER_USER_DATA_LS_20 0x00B480
+#define R_00B484_SPI_SHADER_USER_DATA_LS_21 0x00B484
+#define R_00B488_SPI_SHADER_USER_DATA_LS_22 0x00B488
+#define R_00B48C_SPI_SHADER_USER_DATA_LS_23 0x00B48C
+#define R_00B490_SPI_SHADER_USER_DATA_LS_24 0x00B490
+#define R_00B494_SPI_SHADER_USER_DATA_LS_25 0x00B494
+#define R_00B498_SPI_SHADER_USER_DATA_LS_26 0x00B498
+#define R_00B49C_SPI_SHADER_USER_DATA_LS_27 0x00B49C
+#define R_00B4A0_SPI_SHADER_USER_DATA_LS_28 0x00B4A0
+#define R_00B4A4_SPI_SHADER_USER_DATA_LS_29 0x00B4A4
+#define R_00B4A8_SPI_SHADER_USER_DATA_LS_30 0x00B4A8
+#define R_00B4AC_SPI_SHADER_USER_DATA_LS_31 0x00B4AC
+#define R_00B530_SPI_SHADER_USER_DATA_COMMON_0 0x00B530
+#define R_00B534_SPI_SHADER_USER_DATA_COMMON_1 0x00B534
+#define R_00B538_SPI_SHADER_USER_DATA_COMMON_2 0x00B538
+#define R_00B53C_SPI_SHADER_USER_DATA_COMMON_3 0x00B53C
+#define R_00B540_SPI_SHADER_USER_DATA_COMMON_4 0x00B540
+#define R_00B544_SPI_SHADER_USER_DATA_COMMON_5 0x00B544
+#define R_00B548_SPI_SHADER_USER_DATA_COMMON_6 0x00B548
+#define R_00B54C_SPI_SHADER_USER_DATA_COMMON_7 0x00B54C
+#define R_00B550_SPI_SHADER_USER_DATA_COMMON_8 0x00B550
+#define R_00B554_SPI_SHADER_USER_DATA_COMMON_9 0x00B554
+#define R_00B558_SPI_SHADER_USER_DATA_COMMON_10 0x00B558
+#define R_00B55C_SPI_SHADER_USER_DATA_COMMON_11 0x00B55C
+#define R_00B560_SPI_SHADER_USER_DATA_COMMON_12 0x00B560
+#define R_00B564_SPI_SHADER_USER_DATA_COMMON_13 0x00B564
+#define R_00B568_SPI_SHADER_USER_DATA_COMMON_14 0x00B568
+#define R_00B56C_SPI_SHADER_USER_DATA_COMMON_15 0x00B56C
+#define R_00B570_SPI_SHADER_USER_DATA_COMMON_16 0x00B570
+#define R_00B574_SPI_SHADER_USER_DATA_COMMON_17 0x00B574
+#define R_00B578_SPI_SHADER_USER_DATA_COMMON_18 0x00B578
+#define R_00B57C_SPI_SHADER_USER_DATA_COMMON_19 0x00B57C
+#define R_00B580_SPI_SHADER_USER_DATA_COMMON_20 0x00B580
+#define R_00B584_SPI_SHADER_USER_DATA_COMMON_21 0x00B584
+#define R_00B588_SPI_SHADER_USER_DATA_COMMON_22 0x00B588
+#define R_00B58C_SPI_SHADER_USER_DATA_COMMON_23 0x00B58C
+#define R_00B590_SPI_SHADER_USER_DATA_COMMON_24 0x00B590
+#define R_00B594_SPI_SHADER_USER_DATA_COMMON_25 0x00B594
+#define R_00B598_SPI_SHADER_USER_DATA_COMMON_26 0x00B598
+#define R_00B59C_SPI_SHADER_USER_DATA_COMMON_27 0x00B59C
+#define R_00B5A0_SPI_SHADER_USER_DATA_COMMON_28 0x00B5A0
+#define R_00B5A4_SPI_SHADER_USER_DATA_COMMON_29 0x00B5A4
+#define R_00B5A8_SPI_SHADER_USER_DATA_COMMON_30 0x00B5A8
+#define R_00B5AC_SPI_SHADER_USER_DATA_COMMON_31 0x00B5AC
+#define R_00B800_COMPUTE_DISPATCH_INITIATOR 0x00B800
+#define S_00B800_COMPUTE_SHADER_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B800_COMPUTE_SHADER_EN(x) (((x) >> 0) & 0x1)
+#define C_00B800_COMPUTE_SHADER_EN 0xFFFFFFFE
+#define S_00B800_PARTIAL_TG_EN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_00B800_PARTIAL_TG_EN(x) (((x) >> 1) & 0x1)
+#define C_00B800_PARTIAL_TG_EN 0xFFFFFFFD
+#define S_00B800_FORCE_START_AT_000(x) (((unsigned)(x) & 0x1) << 2)
+#define G_00B800_FORCE_START_AT_000(x) (((x) >> 2) & 0x1)
+#define C_00B800_FORCE_START_AT_000 0xFFFFFFFB
+#define S_00B800_ORDERED_APPEND_ENBL(x) (((unsigned)(x) & 0x1) << 3)
+#define G_00B800_ORDERED_APPEND_ENBL(x) (((x) >> 3) & 0x1)
+#define C_00B800_ORDERED_APPEND_ENBL 0xFFFFFFF7
+#define S_00B800_ORDERED_APPEND_MODE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_00B800_ORDERED_APPEND_MODE(x) (((x) >> 4) & 0x1)
+#define C_00B800_ORDERED_APPEND_MODE 0xFFFFFFEF
+#define S_00B800_USE_THREAD_DIMENSIONS(x) (((unsigned)(x) & 0x1) << 5)
+#define G_00B800_USE_THREAD_DIMENSIONS(x) (((x) >> 5) & 0x1)
+#define C_00B800_USE_THREAD_DIMENSIONS 0xFFFFFFDF
+#define S_00B800_ORDER_MODE(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B800_ORDER_MODE(x) (((x) >> 6) & 0x1)
+#define C_00B800_ORDER_MODE 0xFFFFFFBF
+#define S_00B800_SCALAR_L1_INV_VOL(x) (((unsigned)(x) & 0x1) << 10)
+#define G_00B800_SCALAR_L1_INV_VOL(x) (((x) >> 10) & 0x1)
+#define C_00B800_SCALAR_L1_INV_VOL 0xFFFFFBFF
+#define S_00B800_VECTOR_L1_INV_VOL(x) (((unsigned)(x) & 0x1) << 11)
+#define G_00B800_VECTOR_L1_INV_VOL(x) (((x) >> 11) & 0x1)
+#define C_00B800_VECTOR_L1_INV_VOL 0xFFFFF7FF
+#define S_00B800_RESERVED(x) (((unsigned)(x) & 0x1) << 12)
+#define G_00B800_RESERVED(x) (((x) >> 12) & 0x1)
+#define C_00B800_RESERVED 0xFFFFEFFF
+#define S_00B800_RESTORE(x) (((unsigned)(x) & 0x1) << 14)
+#define G_00B800_RESTORE(x) (((x) >> 14) & 0x1)
+#define C_00B800_RESTORE 0xFFFFBFFF
+#define R_00B804_COMPUTE_DIM_X 0x00B804
+#define R_00B808_COMPUTE_DIM_Y 0x00B808
+#define R_00B80C_COMPUTE_DIM_Z 0x00B80C
+#define R_00B810_COMPUTE_START_X 0x00B810
+#define R_00B814_COMPUTE_START_Y 0x00B814
+#define R_00B818_COMPUTE_START_Z 0x00B818
+#define R_00B81C_COMPUTE_NUM_THREAD_X 0x00B81C
+#define S_00B81C_NUM_THREAD_FULL(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B81C_NUM_THREAD_FULL(x) (((x) >> 0) & 0xFFFF)
+#define C_00B81C_NUM_THREAD_FULL 0xFFFF0000
+#define S_00B81C_NUM_THREAD_PARTIAL(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B81C_NUM_THREAD_PARTIAL(x) (((x) >> 16) & 0xFFFF)
+#define C_00B81C_NUM_THREAD_PARTIAL 0x0000FFFF
+#define R_00B820_COMPUTE_NUM_THREAD_Y 0x00B820
+#define S_00B820_NUM_THREAD_FULL(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B820_NUM_THREAD_FULL(x) (((x) >> 0) & 0xFFFF)
+#define C_00B820_NUM_THREAD_FULL 0xFFFF0000
+#define S_00B820_NUM_THREAD_PARTIAL(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B820_NUM_THREAD_PARTIAL(x) (((x) >> 16) & 0xFFFF)
+#define C_00B820_NUM_THREAD_PARTIAL 0x0000FFFF
+#define R_00B824_COMPUTE_NUM_THREAD_Z 0x00B824
+#define S_00B824_NUM_THREAD_FULL(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B824_NUM_THREAD_FULL(x) (((x) >> 0) & 0xFFFF)
+#define C_00B824_NUM_THREAD_FULL 0xFFFF0000
+#define S_00B824_NUM_THREAD_PARTIAL(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B824_NUM_THREAD_PARTIAL(x) (((x) >> 16) & 0xFFFF)
+#define C_00B824_NUM_THREAD_PARTIAL 0x0000FFFF
+#define R_00B828_COMPUTE_PIPELINESTAT_ENABLE 0x00B828
+#define S_00B828_PIPELINESTAT_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B828_PIPELINESTAT_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_00B828_PIPELINESTAT_ENABLE 0xFFFFFFFE
+#define R_00B82C_COMPUTE_PERFCOUNT_ENABLE 0x00B82C
+#define S_00B82C_PERFCOUNT_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B82C_PERFCOUNT_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_00B82C_PERFCOUNT_ENABLE 0xFFFFFFFE
+#define R_00B830_COMPUTE_PGM_LO 0x00B830
+#define R_00B834_COMPUTE_PGM_HI 0x00B834
+#define S_00B834_DATA(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B834_DATA(x) (((x) >> 0) & 0xFF)
+#define C_00B834_DATA 0xFFFFFF00
+#define R_00B838_COMPUTE_DISPATCH_PKT_ADDR_LO 0x00B838
+#define R_00B83C_COMPUTE_DISPATCH_PKT_ADDR_HI 0x00B83C
+#define S_00B83C_DATA(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B83C_DATA(x) (((x) >> 0) & 0xFF)
+#define C_00B83C_DATA 0xFFFFFF00
+#define R_00B840_COMPUTE_DISPATCH_SCRATCH_BASE_LO 0x00B840
+#define R_00B844_COMPUTE_DISPATCH_SCRATCH_BASE_HI 0x00B844
+#define S_00B844_DATA(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_00B844_DATA(x) (((x) >> 0) & 0xFF)
+#define C_00B844_DATA 0xFFFFFF00
+#define R_00B848_COMPUTE_PGM_RSRC1 0x00B848
+#define S_00B848_VGPRS(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B848_VGPRS(x) (((x) >> 0) & 0x3F)
+#define C_00B848_VGPRS 0xFFFFFFC0
+#define S_00B848_SGPRS(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_00B848_SGPRS(x) (((x) >> 6) & 0x0F)
+#define C_00B848_SGPRS 0xFFFFFC3F
+#define S_00B848_PRIORITY(x) (((unsigned)(x) & 0x03) << 10)
+#define G_00B848_PRIORITY(x) (((x) >> 10) & 0x03)
+#define C_00B848_PRIORITY 0xFFFFF3FF
+#define S_00B848_FLOAT_MODE(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_00B848_FLOAT_MODE(x) (((x) >> 12) & 0xFF)
+#define C_00B848_FLOAT_MODE 0xFFF00FFF
+#define S_00B848_PRIV(x) (((unsigned)(x) & 0x1) << 20)
+#define G_00B848_PRIV(x) (((x) >> 20) & 0x1)
+#define C_00B848_PRIV 0xFFEFFFFF
+#define S_00B848_DX10_CLAMP(x) (((unsigned)(x) & 0x1) << 21)
+#define G_00B848_DX10_CLAMP(x) (((x) >> 21) & 0x1)
+#define C_00B848_DX10_CLAMP 0xFFDFFFFF
+#define S_00B848_DEBUG_MODE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B848_DEBUG_MODE(x) (((x) >> 22) & 0x1)
+#define C_00B848_DEBUG_MODE 0xFFBFFFFF
+#define S_00B848_IEEE_MODE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B848_IEEE_MODE(x) (((x) >> 23) & 0x1)
+#define C_00B848_IEEE_MODE 0xFF7FFFFF
+#define S_00B848_BULKY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_00B848_BULKY(x) (((x) >> 24) & 0x1)
+#define C_00B848_BULKY 0xFEFFFFFF
+#define S_00B848_CDBG_USER(x) (((unsigned)(x) & 0x1) << 25)
+#define G_00B848_CDBG_USER(x) (((x) >> 25) & 0x1)
+#define C_00B848_CDBG_USER 0xFDFFFFFF
+#define S_00B848_FP16_OVFL(x) (((unsigned)(x) & 0x1) << 26)
+#define G_00B848_FP16_OVFL(x) (((x) >> 26) & 0x1)
+#define C_00B848_FP16_OVFL 0xFBFFFFFF
+#define R_00B84C_COMPUTE_PGM_RSRC2 0x00B84C
+#define S_00B84C_SCRATCH_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_00B84C_SCRATCH_EN(x) (((x) >> 0) & 0x1)
+#define C_00B84C_SCRATCH_EN 0xFFFFFFFE
+#define S_00B84C_USER_SGPR(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_00B84C_USER_SGPR(x) (((x) >> 1) & 0x1F)
+#define C_00B84C_USER_SGPR 0xFFFFFFC1
+#define S_00B84C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
+#define G_00B84C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
+#define C_00B84C_TRAP_PRESENT 0xFFFFFFBF
+#define S_00B84C_TGID_X_EN(x) (((unsigned)(x) & 0x1) << 7)
+#define G_00B84C_TGID_X_EN(x) (((x) >> 7) & 0x1)
+#define C_00B84C_TGID_X_EN 0xFFFFFF7F
+#define S_00B84C_TGID_Y_EN(x) (((unsigned)(x) & 0x1) << 8)
+#define G_00B84C_TGID_Y_EN(x) (((x) >> 8) & 0x1)
+#define C_00B84C_TGID_Y_EN 0xFFFFFEFF
+#define S_00B84C_TGID_Z_EN(x) (((unsigned)(x) & 0x1) << 9)
+#define G_00B84C_TGID_Z_EN(x) (((x) >> 9) & 0x1)
+#define C_00B84C_TGID_Z_EN 0xFFFFFDFF
+#define S_00B84C_TG_SIZE_EN(x) (((unsigned)(x) & 0x1) << 10)
+#define G_00B84C_TG_SIZE_EN(x) (((x) >> 10) & 0x1)
+#define C_00B84C_TG_SIZE_EN 0xFFFFFBFF
+#define S_00B84C_TIDIG_COMP_CNT(x) (((unsigned)(x) & 0x03) << 11)
+#define G_00B84C_TIDIG_COMP_CNT(x) (((x) >> 11) & 0x03)
+#define C_00B84C_TIDIG_COMP_CNT 0xFFFFE7FF
+#define S_00B84C_EXCP_EN_MSB(x) (((unsigned)(x) & 0x03) << 13)
+#define G_00B84C_EXCP_EN_MSB(x) (((x) >> 13) & 0x03)
+#define C_00B84C_EXCP_EN_MSB 0xFFFF9FFF
+#define S_00B84C_LDS_SIZE(x) (((unsigned)(x) & 0x1FF) << 15)
+#define G_00B84C_LDS_SIZE(x) (((x) >> 15) & 0x1FF)
+#define C_00B84C_LDS_SIZE 0xFF007FFF
+#define S_00B84C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 24)
+#define G_00B84C_EXCP_EN(x) (((x) >> 24) & 0x7F)
+#define C_00B84C_EXCP_EN 0x80FFFFFF
+#define S_00B84C_SKIP_USGPR0(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00B84C_SKIP_USGPR0(x) (((x) >> 31) & 0x1)
+#define C_00B84C_SKIP_USGPR0 0x7FFFFFFF
+#define R_00B850_COMPUTE_VMID 0x00B850
+#define S_00B850_DATA(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_00B850_DATA(x) (((x) >> 0) & 0x0F)
+#define C_00B850_DATA 0xFFFFFFF0
+#define R_00B854_COMPUTE_RESOURCE_LIMITS 0x00B854
+#define S_00B854_WAVES_PER_SH(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_00B854_WAVES_PER_SH(x) (((x) >> 0) & 0x3FF)
+#define C_00B854_WAVES_PER_SH 0xFFFFFC00
+#define S_00B854_TG_PER_CU(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_00B854_TG_PER_CU(x) (((x) >> 12) & 0x0F)
+#define C_00B854_TG_PER_CU 0xFFFF0FFF
+#define S_00B854_LOCK_THRESHOLD(x) (((unsigned)(x) & 0x3F) << 16)
+#define G_00B854_LOCK_THRESHOLD(x) (((x) >> 16) & 0x3F)
+#define C_00B854_LOCK_THRESHOLD 0xFFC0FFFF
+#define S_00B854_SIMD_DEST_CNTL(x) (((unsigned)(x) & 0x1) << 22)
+#define G_00B854_SIMD_DEST_CNTL(x) (((x) >> 22) & 0x1)
+#define C_00B854_SIMD_DEST_CNTL 0xFFBFFFFF
+#define S_00B854_FORCE_SIMD_DIST(x) (((unsigned)(x) & 0x1) << 23)
+#define G_00B854_FORCE_SIMD_DIST(x) (((x) >> 23) & 0x1)
+#define C_00B854_FORCE_SIMD_DIST 0xFF7FFFFF
+#define S_00B854_CU_GROUP_COUNT(x) (((unsigned)(x) & 0x07) << 24)
+#define G_00B854_CU_GROUP_COUNT(x) (((x) >> 24) & 0x07)
+#define C_00B854_CU_GROUP_COUNT 0xF8FFFFFF
+#define S_00B854_SIMD_DISABLE(x) (((unsigned)(x) & 0x0F) << 27)
+#define G_00B854_SIMD_DISABLE(x) (((x) >> 27) & 0x0F)
+#define C_00B854_SIMD_DISABLE 0x87FFFFFF
+#define R_00B858_COMPUTE_STATIC_THREAD_MGMT_SE0 0x00B858
+#define S_00B858_SH0_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B858_SH0_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B858_SH0_CU_EN 0xFFFF0000
+#define S_00B858_SH1_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B858_SH1_CU_EN(x) (((x) >> 16) & 0xFFFF)
+#define C_00B858_SH1_CU_EN 0x0000FFFF
+#define R_00B85C_COMPUTE_STATIC_THREAD_MGMT_SE1 0x00B85C
+#define S_00B85C_SH0_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B85C_SH0_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B85C_SH0_CU_EN 0xFFFF0000
+#define S_00B85C_SH1_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B85C_SH1_CU_EN(x) (((x) >> 16) & 0xFFFF)
+#define C_00B85C_SH1_CU_EN 0x0000FFFF
+#define R_00B860_COMPUTE_TMPRING_SIZE 0x00B860
+#define S_00B860_WAVES(x) (((unsigned)(x) & 0xFFF) << 0)
+#define G_00B860_WAVES(x) (((x) >> 0) & 0xFFF)
+#define C_00B860_WAVES 0xFFFFF000
+#define S_00B860_WAVESIZE(x) (((unsigned)(x) & 0x1FFF) << 12)
+#define G_00B860_WAVESIZE(x) (((x) >> 12) & 0x1FFF)
+#define C_00B860_WAVESIZE 0xFE000FFF
+#define R_00B864_COMPUTE_STATIC_THREAD_MGMT_SE2 0x00B864
+#define S_00B864_SH0_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B864_SH0_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B864_SH0_CU_EN 0xFFFF0000
+#define S_00B864_SH1_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B864_SH1_CU_EN(x) (((x) >> 16) & 0xFFFF)
+#define C_00B864_SH1_CU_EN 0x0000FFFF
+#define R_00B868_COMPUTE_STATIC_THREAD_MGMT_SE3 0x00B868
+#define S_00B868_SH0_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B868_SH0_CU_EN(x) (((x) >> 0) & 0xFFFF)
+#define C_00B868_SH0_CU_EN 0xFFFF0000
+#define S_00B868_SH1_CU_EN(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_00B868_SH1_CU_EN(x) (((x) >> 16) & 0xFFFF)
+#define C_00B868_SH1_CU_EN 0x0000FFFF
+#define R_00B86C_COMPUTE_RESTART_X 0x00B86C
+#define R_00B870_COMPUTE_RESTART_Y 0x00B870
+#define R_00B874_COMPUTE_RESTART_Z 0x00B874
+#define R_00B87C_COMPUTE_MISC_RESERVED 0x00B87C
+#define S_00B87C_SEND_SEID(x) (((unsigned)(x) & 0x03) << 0)
+#define G_00B87C_SEND_SEID(x) (((x) >> 0) & 0x03)
+#define C_00B87C_SEND_SEID 0xFFFFFFFC
+#define S_00B87C_RESERVED2(x) (((unsigned)(x) & 0x1) << 2)
+#define G_00B87C_RESERVED2(x) (((x) >> 2) & 0x1)
+#define C_00B87C_RESERVED2 0xFFFFFFFB
+#define S_00B87C_RESERVED3(x) (((unsigned)(x) & 0x1) << 3)
+#define G_00B87C_RESERVED3(x) (((x) >> 3) & 0x1)
+#define C_00B87C_RESERVED3 0xFFFFFFF7
+#define S_00B87C_RESERVED4(x) (((unsigned)(x) & 0x1) << 4)
+#define G_00B87C_RESERVED4(x) (((x) >> 4) & 0x1)
+#define C_00B87C_RESERVED4 0xFFFFFFEF
+#define S_00B87C_WAVE_ID_BASE(x) (((unsigned)(x) & 0xFFF) << 5)
+#define G_00B87C_WAVE_ID_BASE(x) (((x) >> 5) & 0xFFF)
+#define C_00B87C_WAVE_ID_BASE 0xFFFE001F
+#define R_00B880_COMPUTE_DISPATCH_ID 0x00B880
+#define R_00B884_COMPUTE_THREADGROUP_ID 0x00B884
+#define R_00B888_COMPUTE_RELAUNCH 0x00B888
+#define S_00B888_PAYLOAD(x) (((unsigned)(x) & 0x3FFFFFFF) << 0)
+#define G_00B888_PAYLOAD(x) (((x) >> 0) & 0x3FFFFFFF)
+#define C_00B888_PAYLOAD 0xC0000000
+#define S_00B888_IS_EVENT(x) (((unsigned)(x) & 0x1) << 30)
+#define G_00B888_IS_EVENT(x) (((x) >> 30) & 0x1)
+#define C_00B888_IS_EVENT 0xBFFFFFFF
+#define S_00B888_IS_STATE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_00B888_IS_STATE(x) (((x) >> 31) & 0x1)
+#define C_00B888_IS_STATE 0x7FFFFFFF
+#define R_00B88C_COMPUTE_WAVE_RESTORE_ADDR_LO 0x00B88C
+#define R_00B890_COMPUTE_WAVE_RESTORE_ADDR_HI 0x00B890
+#define S_00B890_ADDR(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_00B890_ADDR(x) (((x) >> 0) & 0xFFFF)
+#define C_00B890_ADDR 0xFFFF0000
+#define R_00B900_COMPUTE_USER_DATA_0 0x00B900
+#define R_00B904_COMPUTE_USER_DATA_1 0x00B904
+#define R_00B908_COMPUTE_USER_DATA_2 0x00B908
+#define R_00B90C_COMPUTE_USER_DATA_3 0x00B90C
+#define R_00B910_COMPUTE_USER_DATA_4 0x00B910
+#define R_00B914_COMPUTE_USER_DATA_5 0x00B914
+#define R_00B918_COMPUTE_USER_DATA_6 0x00B918
+#define R_00B91C_COMPUTE_USER_DATA_7 0x00B91C
+#define R_00B920_COMPUTE_USER_DATA_8 0x00B920
+#define R_00B924_COMPUTE_USER_DATA_9 0x00B924
+#define R_00B928_COMPUTE_USER_DATA_10 0x00B928
+#define R_00B92C_COMPUTE_USER_DATA_11 0x00B92C
+#define R_00B930_COMPUTE_USER_DATA_12 0x00B930
+#define R_00B934_COMPUTE_USER_DATA_13 0x00B934
+#define R_00B938_COMPUTE_USER_DATA_14 0x00B938
+#define R_00B93C_COMPUTE_USER_DATA_15 0x00B93C
+#define R_00B9FC_COMPUTE_NOWHERE 0x00B9FC
+#define R_034000_CPG_PERFCOUNTER1_LO 0x034000
+#define R_034004_CPG_PERFCOUNTER1_HI 0x034004
+#define R_034008_CPG_PERFCOUNTER0_LO 0x034008
+#define R_03400C_CPG_PERFCOUNTER0_HI 0x03400C
+#define R_034010_CPC_PERFCOUNTER1_LO 0x034010
+#define R_034014_CPC_PERFCOUNTER1_HI 0x034014
+#define R_034018_CPC_PERFCOUNTER0_LO 0x034018
+#define R_03401C_CPC_PERFCOUNTER0_HI 0x03401C
+#define R_034020_CPF_PERFCOUNTER1_LO 0x034020
+#define R_034024_CPF_PERFCOUNTER1_HI 0x034024
+#define R_034028_CPF_PERFCOUNTER0_LO 0x034028
+#define R_03402C_CPF_PERFCOUNTER0_HI 0x03402C
+#define R_034030_CPF_LATENCY_STATS_DATA 0x034030
+#define R_034034_CPG_LATENCY_STATS_DATA 0x034034
+#define R_034038_CPC_LATENCY_STATS_DATA 0x034038
+#define R_034100_GRBM_PERFCOUNTER0_LO 0x034100
+#define R_034104_GRBM_PERFCOUNTER0_HI 0x034104
+#define R_03410C_GRBM_PERFCOUNTER1_LO 0x03410C
+#define R_034110_GRBM_PERFCOUNTER1_HI 0x034110
+#define R_034114_GRBM_SE0_PERFCOUNTER_LO 0x034114
+#define R_034118_GRBM_SE0_PERFCOUNTER_HI 0x034118
+#define R_03411C_GRBM_SE1_PERFCOUNTER_LO 0x03411C
+#define R_034120_GRBM_SE1_PERFCOUNTER_HI 0x034120
+#define R_034124_GRBM_SE2_PERFCOUNTER_LO 0x034124
+#define R_034128_GRBM_SE2_PERFCOUNTER_HI 0x034128
+#define R_03412C_GRBM_SE3_PERFCOUNTER_LO 0x03412C
+#define R_034130_GRBM_SE3_PERFCOUNTER_HI 0x034130
+#define R_034200_WD_PERFCOUNTER0_LO 0x034200
+#define R_034204_WD_PERFCOUNTER0_HI 0x034204
+#define R_034208_WD_PERFCOUNTER1_LO 0x034208
+#define R_03420C_WD_PERFCOUNTER1_HI 0x03420C
+#define R_034210_WD_PERFCOUNTER2_LO 0x034210
+#define R_034214_WD_PERFCOUNTER2_HI 0x034214
+#define R_034218_WD_PERFCOUNTER3_LO 0x034218
+#define R_03421C_WD_PERFCOUNTER3_HI 0x03421C
+#define R_034220_IA_PERFCOUNTER0_LO 0x034220
+#define R_034224_IA_PERFCOUNTER0_HI 0x034224
+#define R_034228_IA_PERFCOUNTER1_LO 0x034228
+#define R_03422C_IA_PERFCOUNTER1_HI 0x03422C
+#define R_034230_IA_PERFCOUNTER2_LO 0x034230
+#define R_034234_IA_PERFCOUNTER2_HI 0x034234
+#define R_034238_IA_PERFCOUNTER3_LO 0x034238
+#define R_03423C_IA_PERFCOUNTER3_HI 0x03423C
+#define R_034240_VGT_PERFCOUNTER0_LO 0x034240
+#define R_034244_VGT_PERFCOUNTER0_HI 0x034244
+#define R_034248_VGT_PERFCOUNTER1_LO 0x034248
+#define R_03424C_VGT_PERFCOUNTER1_HI 0x03424C
+#define R_034250_VGT_PERFCOUNTER2_LO 0x034250
+#define R_034254_VGT_PERFCOUNTER2_HI 0x034254
+#define R_034258_VGT_PERFCOUNTER3_LO 0x034258
+#define R_03425C_VGT_PERFCOUNTER3_HI 0x03425C
+#define R_034400_PA_SU_PERFCOUNTER0_LO 0x034400
+#define R_034404_PA_SU_PERFCOUNTER0_HI 0x034404
+#define S_034404_PERFCOUNTER_HI(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_034404_PERFCOUNTER_HI(x) (((x) >> 0) & 0xFFFF)
+#define C_034404_PERFCOUNTER_HI 0xFFFF0000
+#define R_034408_PA_SU_PERFCOUNTER1_LO 0x034408
+#define R_03440C_PA_SU_PERFCOUNTER1_HI 0x03440C
+#define R_034410_PA_SU_PERFCOUNTER2_LO 0x034410
+#define R_034414_PA_SU_PERFCOUNTER2_HI 0x034414
+#define R_034418_PA_SU_PERFCOUNTER3_LO 0x034418
+#define R_03441C_PA_SU_PERFCOUNTER3_HI 0x03441C
+#define R_034500_PA_SC_PERFCOUNTER0_LO 0x034500
+#define R_034504_PA_SC_PERFCOUNTER0_HI 0x034504
+#define R_034508_PA_SC_PERFCOUNTER1_LO 0x034508
+#define R_03450C_PA_SC_PERFCOUNTER1_HI 0x03450C
+#define R_034510_PA_SC_PERFCOUNTER2_LO 0x034510
+#define R_034514_PA_SC_PERFCOUNTER2_HI 0x034514
+#define R_034518_PA_SC_PERFCOUNTER3_LO 0x034518
+#define R_03451C_PA_SC_PERFCOUNTER3_HI 0x03451C
+#define R_034520_PA_SC_PERFCOUNTER4_LO 0x034520
+#define R_034524_PA_SC_PERFCOUNTER4_HI 0x034524
+#define R_034528_PA_SC_PERFCOUNTER5_LO 0x034528
+#define R_03452C_PA_SC_PERFCOUNTER5_HI 0x03452C
+#define R_034530_PA_SC_PERFCOUNTER6_LO 0x034530
+#define R_034534_PA_SC_PERFCOUNTER6_HI 0x034534
+#define R_034538_PA_SC_PERFCOUNTER7_LO 0x034538
+#define R_03453C_PA_SC_PERFCOUNTER7_HI 0x03453C
+#define R_034600_SPI_PERFCOUNTER0_HI 0x034600
+#define R_034604_SPI_PERFCOUNTER0_LO 0x034604
+#define R_034608_SPI_PERFCOUNTER1_HI 0x034608
+#define R_03460C_SPI_PERFCOUNTER1_LO 0x03460C
+#define R_034610_SPI_PERFCOUNTER2_HI 0x034610
+#define R_034614_SPI_PERFCOUNTER2_LO 0x034614
+#define R_034618_SPI_PERFCOUNTER3_HI 0x034618
+#define R_03461C_SPI_PERFCOUNTER3_LO 0x03461C
+#define R_034620_SPI_PERFCOUNTER4_HI 0x034620
+#define R_034624_SPI_PERFCOUNTER4_LO 0x034624
+#define R_034628_SPI_PERFCOUNTER5_HI 0x034628
+#define R_03462C_SPI_PERFCOUNTER5_LO 0x03462C
+#define R_034700_SQ_PERFCOUNTER0_LO 0x034700
+#define R_034704_SQ_PERFCOUNTER0_HI 0x034704
+#define R_034708_SQ_PERFCOUNTER1_LO 0x034708
+#define R_03470C_SQ_PERFCOUNTER1_HI 0x03470C
+#define R_034710_SQ_PERFCOUNTER2_LO 0x034710
+#define R_034714_SQ_PERFCOUNTER2_HI 0x034714
+#define R_034718_SQ_PERFCOUNTER3_LO 0x034718
+#define R_03471C_SQ_PERFCOUNTER3_HI 0x03471C
+#define R_034720_SQ_PERFCOUNTER4_LO 0x034720
+#define R_034724_SQ_PERFCOUNTER4_HI 0x034724
+#define R_034728_SQ_PERFCOUNTER5_LO 0x034728
+#define R_03472C_SQ_PERFCOUNTER5_HI 0x03472C
+#define R_034730_SQ_PERFCOUNTER6_LO 0x034730
+#define R_034734_SQ_PERFCOUNTER6_HI 0x034734
+#define R_034738_SQ_PERFCOUNTER7_LO 0x034738
+#define R_03473C_SQ_PERFCOUNTER7_HI 0x03473C
+#define R_034740_SQ_PERFCOUNTER8_LO 0x034740
+#define R_034744_SQ_PERFCOUNTER8_HI 0x034744
+#define R_034748_SQ_PERFCOUNTER9_LO 0x034748
+#define R_03474C_SQ_PERFCOUNTER9_HI 0x03474C
+#define R_034750_SQ_PERFCOUNTER10_LO 0x034750
+#define R_034754_SQ_PERFCOUNTER10_HI 0x034754
+#define R_034758_SQ_PERFCOUNTER11_LO 0x034758
+#define R_03475C_SQ_PERFCOUNTER11_HI 0x03475C
+#define R_034760_SQ_PERFCOUNTER12_LO 0x034760
+#define R_034764_SQ_PERFCOUNTER12_HI 0x034764
+#define R_034768_SQ_PERFCOUNTER13_LO 0x034768
+#define R_03476C_SQ_PERFCOUNTER13_HI 0x03476C
+#define R_034770_SQ_PERFCOUNTER14_LO 0x034770
+#define R_034774_SQ_PERFCOUNTER14_HI 0x034774
+#define R_034778_SQ_PERFCOUNTER15_LO 0x034778
+#define R_03477C_SQ_PERFCOUNTER15_HI 0x03477C
+#define R_034900_SX_PERFCOUNTER0_LO 0x034900
+#define R_034904_SX_PERFCOUNTER0_HI 0x034904
+#define R_034908_SX_PERFCOUNTER1_LO 0x034908
+#define R_03490C_SX_PERFCOUNTER1_HI 0x03490C
+#define R_034910_SX_PERFCOUNTER2_LO 0x034910
+#define R_034914_SX_PERFCOUNTER2_HI 0x034914
+#define R_034918_SX_PERFCOUNTER3_LO 0x034918
+#define R_03491C_SX_PERFCOUNTER3_HI 0x03491C
+#define R_034A00_GDS_PERFCOUNTER0_LO 0x034A00
+#define R_034A04_GDS_PERFCOUNTER0_HI 0x034A04
+#define R_034A08_GDS_PERFCOUNTER1_LO 0x034A08
+#define R_034A0C_GDS_PERFCOUNTER1_HI 0x034A0C
+#define R_034A10_GDS_PERFCOUNTER2_LO 0x034A10
+#define R_034A14_GDS_PERFCOUNTER2_HI 0x034A14
+#define R_034A18_GDS_PERFCOUNTER3_LO 0x034A18
+#define R_034A1C_GDS_PERFCOUNTER3_HI 0x034A1C
+#define R_034B00_TA_PERFCOUNTER0_LO 0x034B00
+#define R_034B04_TA_PERFCOUNTER0_HI 0x034B04
+#define R_034B08_TA_PERFCOUNTER1_LO 0x034B08
+#define R_034B0C_TA_PERFCOUNTER1_HI 0x034B0C
+#define R_034C00_TD_PERFCOUNTER0_LO 0x034C00
+#define R_034C04_TD_PERFCOUNTER0_HI 0x034C04
+#define R_034C08_TD_PERFCOUNTER1_LO 0x034C08
+#define R_034C0C_TD_PERFCOUNTER1_HI 0x034C0C
+#define R_034D00_TCP_PERFCOUNTER0_LO 0x034D00
+#define R_034D04_TCP_PERFCOUNTER0_HI 0x034D04
+#define R_034D08_TCP_PERFCOUNTER1_LO 0x034D08
+#define R_034D0C_TCP_PERFCOUNTER1_HI 0x034D0C
+#define R_034D10_TCP_PERFCOUNTER2_LO 0x034D10
+#define R_034D14_TCP_PERFCOUNTER2_HI 0x034D14
+#define R_034D18_TCP_PERFCOUNTER3_LO 0x034D18
+#define R_034D1C_TCP_PERFCOUNTER3_HI 0x034D1C
+#define R_034E00_TCC_PERFCOUNTER0_LO 0x034E00
+#define R_034E04_TCC_PERFCOUNTER0_HI 0x034E04
+#define R_034E08_TCC_PERFCOUNTER1_LO 0x034E08
+#define R_034E0C_TCC_PERFCOUNTER1_HI 0x034E0C
+#define R_034E10_TCC_PERFCOUNTER2_LO 0x034E10
+#define R_034E14_TCC_PERFCOUNTER2_HI 0x034E14
+#define R_034E18_TCC_PERFCOUNTER3_LO 0x034E18
+#define R_034E1C_TCC_PERFCOUNTER3_HI 0x034E1C
+#define R_034E40_TCA_PERFCOUNTER0_LO 0x034E40
+#define R_034E44_TCA_PERFCOUNTER0_HI 0x034E44
+#define R_034E48_TCA_PERFCOUNTER1_LO 0x034E48
+#define R_034E4C_TCA_PERFCOUNTER1_HI 0x034E4C
+#define R_034E50_TCA_PERFCOUNTER2_LO 0x034E50
+#define R_034E54_TCA_PERFCOUNTER2_HI 0x034E54
+#define R_034E58_TCA_PERFCOUNTER3_LO 0x034E58
+#define R_034E5C_TCA_PERFCOUNTER3_HI 0x034E5C
+#define R_035018_CB_PERFCOUNTER0_LO 0x035018
+#define R_03501C_CB_PERFCOUNTER0_HI 0x03501C
+#define R_035020_CB_PERFCOUNTER1_LO 0x035020
+#define R_035024_CB_PERFCOUNTER1_HI 0x035024
+#define R_035028_CB_PERFCOUNTER2_LO 0x035028
+#define R_03502C_CB_PERFCOUNTER2_HI 0x03502C
+#define R_035030_CB_PERFCOUNTER3_LO 0x035030
+#define R_035034_CB_PERFCOUNTER3_HI 0x035034
+#define R_035100_DB_PERFCOUNTER0_LO 0x035100
+#define R_035104_DB_PERFCOUNTER0_HI 0x035104
+#define R_035108_DB_PERFCOUNTER1_LO 0x035108
+#define R_03510C_DB_PERFCOUNTER1_HI 0x03510C
+#define R_035110_DB_PERFCOUNTER2_LO 0x035110
+#define R_035114_DB_PERFCOUNTER2_HI 0x035114
+#define R_035118_DB_PERFCOUNTER3_LO 0x035118
+#define R_03511C_DB_PERFCOUNTER3_HI 0x03511C
+#define R_036000_CPG_PERFCOUNTER1_SELECT 0x036000
+#define R_036004_CPG_PERFCOUNTER0_SELECT1 0x036004
+#define S_036004_CNTR_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036004_CNTR_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036004_CNTR_SEL2 0xFFFFFC00
+#define S_036004_CNTR_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036004_CNTR_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036004_CNTR_SEL3 0xFFF003FF
+#define S_036004_CNTR_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036004_CNTR_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036004_CNTR_MODE3 0xF0FFFFFF
+#define S_036004_CNTR_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036004_CNTR_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036004_CNTR_MODE2 0x0FFFFFFF
+#define R_036008_CPG_PERFCOUNTER0_SELECT 0x036008
+#define S_036008_CNTR_SEL0(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036008_CNTR_SEL0(x) (((x) >> 0) & 0x3FF)
+#define C_036008_CNTR_SEL0 0xFFFFFC00
+#define S_036008_CNTR_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036008_CNTR_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036008_CNTR_SEL1 0xFFF003FF
+#define S_036008_SPM_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036008_SPM_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036008_SPM_MODE 0xFF0FFFFF
+#define S_036008_CNTR_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036008_CNTR_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036008_CNTR_MODE1 0xF0FFFFFF
+#define S_036008_CNTR_MODE0(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036008_CNTR_MODE0(x) (((x) >> 28) & 0x0F)
+#define C_036008_CNTR_MODE0 0x0FFFFFFF
+#define R_03600C_CPC_PERFCOUNTER1_SELECT 0x03600C
+#define R_036010_CPC_PERFCOUNTER0_SELECT1 0x036010
+#define S_036010_CNTR_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036010_CNTR_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036010_CNTR_SEL2 0xFFFFFC00
+#define S_036010_CNTR_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036010_CNTR_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036010_CNTR_SEL3 0xFFF003FF
+#define S_036010_CNTR_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036010_CNTR_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036010_CNTR_MODE3 0xF0FFFFFF
+#define S_036010_CNTR_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036010_CNTR_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036010_CNTR_MODE2 0x0FFFFFFF
+#define R_036014_CPF_PERFCOUNTER1_SELECT 0x036014
+#define R_036018_CPF_PERFCOUNTER0_SELECT1 0x036018
+#define S_036018_CNTR_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036018_CNTR_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036018_CNTR_SEL2 0xFFFFFC00
+#define S_036018_CNTR_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036018_CNTR_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036018_CNTR_SEL3 0xFFF003FF
+#define S_036018_CNTR_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036018_CNTR_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036018_CNTR_MODE3 0xF0FFFFFF
+#define S_036018_CNTR_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036018_CNTR_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036018_CNTR_MODE2 0x0FFFFFFF
+#define R_03601C_CPF_PERFCOUNTER0_SELECT 0x03601C
+#define S_03601C_CNTR_SEL0(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_03601C_CNTR_SEL0(x) (((x) >> 0) & 0x3FF)
+#define C_03601C_CNTR_SEL0 0xFFFFFC00
+#define S_03601C_CNTR_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_03601C_CNTR_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_03601C_CNTR_SEL1 0xFFF003FF
+#define S_03601C_SPM_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_03601C_SPM_MODE(x) (((x) >> 20) & 0x0F)
+#define C_03601C_SPM_MODE 0xFF0FFFFF
+#define S_03601C_CNTR_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_03601C_CNTR_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_03601C_CNTR_MODE1 0xF0FFFFFF
+#define S_03601C_CNTR_MODE0(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_03601C_CNTR_MODE0(x) (((x) >> 28) & 0x0F)
+#define C_03601C_CNTR_MODE0 0x0FFFFFFF
+#define R_036020_CP_PERFMON_CNTL 0x036020
+#define S_036020_PERFMON_STATE(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_036020_PERFMON_STATE(x) (((x) >> 0) & 0x0F)
+#define C_036020_PERFMON_STATE 0xFFFFFFF0
+#define S_036020_SPM_PERFMON_STATE(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_036020_SPM_PERFMON_STATE(x) (((x) >> 4) & 0x0F)
+#define C_036020_SPM_PERFMON_STATE 0xFFFFFF0F
+#define S_036020_PERFMON_ENABLE_MODE(x) (((unsigned)(x) & 0x03) << 8)
+#define G_036020_PERFMON_ENABLE_MODE(x) (((x) >> 8) & 0x03)
+#define C_036020_PERFMON_ENABLE_MODE 0xFFFFFCFF
+#define S_036020_PERFMON_SAMPLE_ENABLE(x) (((unsigned)(x) & 0x1) << 10)
+#define G_036020_PERFMON_SAMPLE_ENABLE(x) (((x) >> 10) & 0x1)
+#define C_036020_PERFMON_SAMPLE_ENABLE 0xFFFFFBFF
+#define R_036024_CPC_PERFCOUNTER0_SELECT 0x036024
+#define S_036024_CNTR_SEL0(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036024_CNTR_SEL0(x) (((x) >> 0) & 0x3FF)
+#define C_036024_CNTR_SEL0 0xFFFFFC00
+#define S_036024_CNTR_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036024_CNTR_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036024_CNTR_SEL1 0xFFF003FF
+#define S_036024_SPM_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036024_SPM_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036024_SPM_MODE 0xFF0FFFFF
+#define S_036024_CNTR_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036024_CNTR_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036024_CNTR_MODE1 0xF0FFFFFF
+#define S_036024_CNTR_MODE0(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036024_CNTR_MODE0(x) (((x) >> 28) & 0x0F)
+#define C_036024_CNTR_MODE0 0x0FFFFFFF
+#define R_036028_CPF_TC_PERF_COUNTER_WINDOW_SELECT 0x036028
+#define S_036028_INDEX(x) (((unsigned)(x) & 0x07) << 0)
+#define G_036028_INDEX(x) (((x) >> 0) & 0x07)
+#define C_036028_INDEX 0xFFFFFFF8
+#define S_036028_ALWAYS(x) (((unsigned)(x) & 0x1) << 30)
+#define G_036028_ALWAYS(x) (((x) >> 30) & 0x1)
+#define C_036028_ALWAYS 0xBFFFFFFF
+#define S_036028_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_036028_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_036028_ENABLE 0x7FFFFFFF
+#define R_03602C_CPG_TC_PERF_COUNTER_WINDOW_SELECT 0x03602C
+#define S_03602C_INDEX(x) (((unsigned)(x) & 0x1F) << 0)
+#define G_03602C_INDEX(x) (((x) >> 0) & 0x1F)
+#define C_03602C_INDEX 0xFFFFFFE0
+#define S_03602C_ALWAYS(x) (((unsigned)(x) & 0x1) << 30)
+#define G_03602C_ALWAYS(x) (((x) >> 30) & 0x1)
+#define C_03602C_ALWAYS 0xBFFFFFFF
+#define S_03602C_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_03602C_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_03602C_ENABLE 0x7FFFFFFF
+#define R_036030_CPF_LATENCY_STATS_SELECT 0x036030
+#define S_036030_INDEX(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_036030_INDEX(x) (((x) >> 0) & 0x0F)
+#define C_036030_INDEX 0xFFFFFFF0
+#define S_036030_CLEAR(x) (((unsigned)(x) & 0x1) << 30)
+#define G_036030_CLEAR(x) (((x) >> 30) & 0x1)
+#define C_036030_CLEAR 0xBFFFFFFF
+#define S_036030_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_036030_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_036030_ENABLE 0x7FFFFFFF
+#define R_036034_CPG_LATENCY_STATS_SELECT 0x036034
+#define S_036034_INDEX(x) (((unsigned)(x) & 0x1F) << 0)
+#define G_036034_INDEX(x) (((x) >> 0) & 0x1F)
+#define C_036034_INDEX 0xFFFFFFE0
+#define S_036034_CLEAR(x) (((unsigned)(x) & 0x1) << 30)
+#define G_036034_CLEAR(x) (((x) >> 30) & 0x1)
+#define C_036034_CLEAR 0xBFFFFFFF
+#define S_036034_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_036034_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_036034_ENABLE 0x7FFFFFFF
+#define R_036038_CPC_LATENCY_STATS_SELECT 0x036038
+#define S_036038_INDEX(x) (((unsigned)(x) & 0x07) << 0)
+#define G_036038_INDEX(x) (((x) >> 0) & 0x07)
+#define C_036038_INDEX 0xFFFFFFF8
+#define S_036038_CLEAR(x) (((unsigned)(x) & 0x1) << 30)
+#define G_036038_CLEAR(x) (((x) >> 30) & 0x1)
+#define C_036038_CLEAR 0xBFFFFFFF
+#define S_036038_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_036038_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_036038_ENABLE 0x7FFFFFFF
+#define R_036100_GRBM_PERFCOUNTER0_SELECT 0x036100
+#define S_036100_PERF_SEL(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_036100_PERF_SEL(x) (((x) >> 0) & 0x3F)
+#define C_036100_PERF_SEL 0xFFFFFFC0
+#define S_036100_DB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 10)
+#define G_036100_DB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 10) & 0x1)
+#define C_036100_DB_CLEAN_USER_DEFINED_MASK 0xFFFFFBFF
+#define S_036100_CB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 11)
+#define G_036100_CB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 11) & 0x1)
+#define C_036100_CB_CLEAN_USER_DEFINED_MASK 0xFFFFF7FF
+#define S_036100_VGT_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 12)
+#define G_036100_VGT_BUSY_USER_DEFINED_MASK(x) (((x) >> 12) & 0x1)
+#define C_036100_VGT_BUSY_USER_DEFINED_MASK 0xFFFFEFFF
+#define S_036100_TA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 13)
+#define G_036100_TA_BUSY_USER_DEFINED_MASK(x) (((x) >> 13) & 0x1)
+#define C_036100_TA_BUSY_USER_DEFINED_MASK 0xFFFFDFFF
+#define S_036100_SX_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 14)
+#define G_036100_SX_BUSY_USER_DEFINED_MASK(x) (((x) >> 14) & 0x1)
+#define C_036100_SX_BUSY_USER_DEFINED_MASK 0xFFFFBFFF
+#define S_036100_SPI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 16)
+#define G_036100_SPI_BUSY_USER_DEFINED_MASK(x) (((x) >> 16) & 0x1)
+#define C_036100_SPI_BUSY_USER_DEFINED_MASK 0xFFFEFFFF
+#define S_036100_SC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 17)
+#define G_036100_SC_BUSY_USER_DEFINED_MASK(x) (((x) >> 17) & 0x1)
+#define C_036100_SC_BUSY_USER_DEFINED_MASK 0xFFFDFFFF
+#define S_036100_PA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 18)
+#define G_036100_PA_BUSY_USER_DEFINED_MASK(x) (((x) >> 18) & 0x1)
+#define C_036100_PA_BUSY_USER_DEFINED_MASK 0xFFFBFFFF
+#define S_036100_GRBM_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 19)
+#define G_036100_GRBM_BUSY_USER_DEFINED_MASK(x) (((x) >> 19) & 0x1)
+#define C_036100_GRBM_BUSY_USER_DEFINED_MASK 0xFFF7FFFF
+#define S_036100_DB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 20)
+#define G_036100_DB_BUSY_USER_DEFINED_MASK(x) (((x) >> 20) & 0x1)
+#define C_036100_DB_BUSY_USER_DEFINED_MASK 0xFFEFFFFF
+#define S_036100_CB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 21)
+#define G_036100_CB_BUSY_USER_DEFINED_MASK(x) (((x) >> 21) & 0x1)
+#define C_036100_CB_BUSY_USER_DEFINED_MASK 0xFFDFFFFF
+#define S_036100_CP_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 22)
+#define G_036100_CP_BUSY_USER_DEFINED_MASK(x) (((x) >> 22) & 0x1)
+#define C_036100_CP_BUSY_USER_DEFINED_MASK 0xFFBFFFFF
+#define S_036100_IA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 23)
+#define G_036100_IA_BUSY_USER_DEFINED_MASK(x) (((x) >> 23) & 0x1)
+#define C_036100_IA_BUSY_USER_DEFINED_MASK 0xFF7FFFFF
+#define S_036100_GDS_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 24)
+#define G_036100_GDS_BUSY_USER_DEFINED_MASK(x) (((x) >> 24) & 0x1)
+#define C_036100_GDS_BUSY_USER_DEFINED_MASK 0xFEFFFFFF
+#define S_036100_BCI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 25)
+#define G_036100_BCI_BUSY_USER_DEFINED_MASK(x) (((x) >> 25) & 0x1)
+#define C_036100_BCI_BUSY_USER_DEFINED_MASK 0xFDFFFFFF
+#define S_036100_RLC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 26)
+#define G_036100_RLC_BUSY_USER_DEFINED_MASK(x) (((x) >> 26) & 0x1)
+#define C_036100_RLC_BUSY_USER_DEFINED_MASK 0xFBFFFFFF
+#define S_036100_TC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 27)
+#define G_036100_TC_BUSY_USER_DEFINED_MASK(x) (((x) >> 27) & 0x1)
+#define C_036100_TC_BUSY_USER_DEFINED_MASK 0xF7FFFFFF
+#define S_036100_WD_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 28)
+#define G_036100_WD_BUSY_USER_DEFINED_MASK(x) (((x) >> 28) & 0x1)
+#define C_036100_WD_BUSY_USER_DEFINED_MASK 0xEFFFFFFF
+#define S_036100_UTCL2_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 29)
+#define G_036100_UTCL2_BUSY_USER_DEFINED_MASK(x) (((x) >> 29) & 0x1)
+#define C_036100_UTCL2_BUSY_USER_DEFINED_MASK 0xDFFFFFFF
+#define S_036100_EA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 30)
+#define G_036100_EA_BUSY_USER_DEFINED_MASK(x) (((x) >> 30) & 0x1)
+#define C_036100_EA_BUSY_USER_DEFINED_MASK 0xBFFFFFFF
+#define S_036100_RMI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 31)
+#define G_036100_RMI_BUSY_USER_DEFINED_MASK(x) (((x) >> 31) & 0x1)
+#define C_036100_RMI_BUSY_USER_DEFINED_MASK 0x7FFFFFFF
+#define R_036104_GRBM_PERFCOUNTER1_SELECT 0x036104
+#define R_036108_GRBM_SE0_PERFCOUNTER_SELECT 0x036108
+#define S_036108_PERF_SEL(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_036108_PERF_SEL(x) (((x) >> 0) & 0x3F)
+#define C_036108_PERF_SEL 0xFFFFFFC0
+#define S_036108_DB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 10)
+#define G_036108_DB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 10) & 0x1)
+#define C_036108_DB_CLEAN_USER_DEFINED_MASK 0xFFFFFBFF
+#define S_036108_CB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 11)
+#define G_036108_CB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 11) & 0x1)
+#define C_036108_CB_CLEAN_USER_DEFINED_MASK 0xFFFFF7FF
+#define S_036108_TA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 12)
+#define G_036108_TA_BUSY_USER_DEFINED_MASK(x) (((x) >> 12) & 0x1)
+#define C_036108_TA_BUSY_USER_DEFINED_MASK 0xFFFFEFFF
+#define S_036108_SX_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 13)
+#define G_036108_SX_BUSY_USER_DEFINED_MASK(x) (((x) >> 13) & 0x1)
+#define C_036108_SX_BUSY_USER_DEFINED_MASK 0xFFFFDFFF
+#define S_036108_SPI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 15)
+#define G_036108_SPI_BUSY_USER_DEFINED_MASK(x) (((x) >> 15) & 0x1)
+#define C_036108_SPI_BUSY_USER_DEFINED_MASK 0xFFFF7FFF
+#define S_036108_SC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 16)
+#define G_036108_SC_BUSY_USER_DEFINED_MASK(x) (((x) >> 16) & 0x1)
+#define C_036108_SC_BUSY_USER_DEFINED_MASK 0xFFFEFFFF
+#define S_036108_DB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 17)
+#define G_036108_DB_BUSY_USER_DEFINED_MASK(x) (((x) >> 17) & 0x1)
+#define C_036108_DB_BUSY_USER_DEFINED_MASK 0xFFFDFFFF
+#define S_036108_CB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 18)
+#define G_036108_CB_BUSY_USER_DEFINED_MASK(x) (((x) >> 18) & 0x1)
+#define C_036108_CB_BUSY_USER_DEFINED_MASK 0xFFFBFFFF
+#define S_036108_VGT_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 19)
+#define G_036108_VGT_BUSY_USER_DEFINED_MASK(x) (((x) >> 19) & 0x1)
+#define C_036108_VGT_BUSY_USER_DEFINED_MASK 0xFFF7FFFF
+#define S_036108_PA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 20)
+#define G_036108_PA_BUSY_USER_DEFINED_MASK(x) (((x) >> 20) & 0x1)
+#define C_036108_PA_BUSY_USER_DEFINED_MASK 0xFFEFFFFF
+#define S_036108_BCI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 21)
+#define G_036108_BCI_BUSY_USER_DEFINED_MASK(x) (((x) >> 21) & 0x1)
+#define C_036108_BCI_BUSY_USER_DEFINED_MASK 0xFFDFFFFF
+#define S_036108_RMI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 22)
+#define G_036108_RMI_BUSY_USER_DEFINED_MASK(x) (((x) >> 22) & 0x1)
+#define C_036108_RMI_BUSY_USER_DEFINED_MASK 0xFFBFFFFF
+#define R_03610C_GRBM_SE1_PERFCOUNTER_SELECT 0x03610C
+#define S_03610C_PERF_SEL(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_03610C_PERF_SEL(x) (((x) >> 0) & 0x3F)
+#define C_03610C_PERF_SEL 0xFFFFFFC0
+#define S_03610C_DB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 10)
+#define G_03610C_DB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 10) & 0x1)
+#define C_03610C_DB_CLEAN_USER_DEFINED_MASK 0xFFFFFBFF
+#define S_03610C_CB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 11)
+#define G_03610C_CB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 11) & 0x1)
+#define C_03610C_CB_CLEAN_USER_DEFINED_MASK 0xFFFFF7FF
+#define S_03610C_TA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 12)
+#define G_03610C_TA_BUSY_USER_DEFINED_MASK(x) (((x) >> 12) & 0x1)
+#define C_03610C_TA_BUSY_USER_DEFINED_MASK 0xFFFFEFFF
+#define S_03610C_SX_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 13)
+#define G_03610C_SX_BUSY_USER_DEFINED_MASK(x) (((x) >> 13) & 0x1)
+#define C_03610C_SX_BUSY_USER_DEFINED_MASK 0xFFFFDFFF
+#define S_03610C_SPI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 15)
+#define G_03610C_SPI_BUSY_USER_DEFINED_MASK(x) (((x) >> 15) & 0x1)
+#define C_03610C_SPI_BUSY_USER_DEFINED_MASK 0xFFFF7FFF
+#define S_03610C_SC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 16)
+#define G_03610C_SC_BUSY_USER_DEFINED_MASK(x) (((x) >> 16) & 0x1)
+#define C_03610C_SC_BUSY_USER_DEFINED_MASK 0xFFFEFFFF
+#define S_03610C_DB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 17)
+#define G_03610C_DB_BUSY_USER_DEFINED_MASK(x) (((x) >> 17) & 0x1)
+#define C_03610C_DB_BUSY_USER_DEFINED_MASK 0xFFFDFFFF
+#define S_03610C_CB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 18)
+#define G_03610C_CB_BUSY_USER_DEFINED_MASK(x) (((x) >> 18) & 0x1)
+#define C_03610C_CB_BUSY_USER_DEFINED_MASK 0xFFFBFFFF
+#define S_03610C_VGT_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 19)
+#define G_03610C_VGT_BUSY_USER_DEFINED_MASK(x) (((x) >> 19) & 0x1)
+#define C_03610C_VGT_BUSY_USER_DEFINED_MASK 0xFFF7FFFF
+#define S_03610C_PA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 20)
+#define G_03610C_PA_BUSY_USER_DEFINED_MASK(x) (((x) >> 20) & 0x1)
+#define C_03610C_PA_BUSY_USER_DEFINED_MASK 0xFFEFFFFF
+#define S_03610C_BCI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 21)
+#define G_03610C_BCI_BUSY_USER_DEFINED_MASK(x) (((x) >> 21) & 0x1)
+#define C_03610C_BCI_BUSY_USER_DEFINED_MASK 0xFFDFFFFF
+#define S_03610C_RMI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 22)
+#define G_03610C_RMI_BUSY_USER_DEFINED_MASK(x) (((x) >> 22) & 0x1)
+#define C_03610C_RMI_BUSY_USER_DEFINED_MASK 0xFFBFFFFF
+#define R_036110_GRBM_SE2_PERFCOUNTER_SELECT 0x036110
+#define S_036110_PERF_SEL(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_036110_PERF_SEL(x) (((x) >> 0) & 0x3F)
+#define C_036110_PERF_SEL 0xFFFFFFC0
+#define S_036110_DB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 10)
+#define G_036110_DB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 10) & 0x1)
+#define C_036110_DB_CLEAN_USER_DEFINED_MASK 0xFFFFFBFF
+#define S_036110_CB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 11)
+#define G_036110_CB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 11) & 0x1)
+#define C_036110_CB_CLEAN_USER_DEFINED_MASK 0xFFFFF7FF
+#define S_036110_TA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 12)
+#define G_036110_TA_BUSY_USER_DEFINED_MASK(x) (((x) >> 12) & 0x1)
+#define C_036110_TA_BUSY_USER_DEFINED_MASK 0xFFFFEFFF
+#define S_036110_SX_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 13)
+#define G_036110_SX_BUSY_USER_DEFINED_MASK(x) (((x) >> 13) & 0x1)
+#define C_036110_SX_BUSY_USER_DEFINED_MASK 0xFFFFDFFF
+#define S_036110_SPI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 15)
+#define G_036110_SPI_BUSY_USER_DEFINED_MASK(x) (((x) >> 15) & 0x1)
+#define C_036110_SPI_BUSY_USER_DEFINED_MASK 0xFFFF7FFF
+#define S_036110_SC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 16)
+#define G_036110_SC_BUSY_USER_DEFINED_MASK(x) (((x) >> 16) & 0x1)
+#define C_036110_SC_BUSY_USER_DEFINED_MASK 0xFFFEFFFF
+#define S_036110_DB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 17)
+#define G_036110_DB_BUSY_USER_DEFINED_MASK(x) (((x) >> 17) & 0x1)
+#define C_036110_DB_BUSY_USER_DEFINED_MASK 0xFFFDFFFF
+#define S_036110_CB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 18)
+#define G_036110_CB_BUSY_USER_DEFINED_MASK(x) (((x) >> 18) & 0x1)
+#define C_036110_CB_BUSY_USER_DEFINED_MASK 0xFFFBFFFF
+#define S_036110_VGT_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 19)
+#define G_036110_VGT_BUSY_USER_DEFINED_MASK(x) (((x) >> 19) & 0x1)
+#define C_036110_VGT_BUSY_USER_DEFINED_MASK 0xFFF7FFFF
+#define S_036110_PA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 20)
+#define G_036110_PA_BUSY_USER_DEFINED_MASK(x) (((x) >> 20) & 0x1)
+#define C_036110_PA_BUSY_USER_DEFINED_MASK 0xFFEFFFFF
+#define S_036110_BCI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 21)
+#define G_036110_BCI_BUSY_USER_DEFINED_MASK(x) (((x) >> 21) & 0x1)
+#define C_036110_BCI_BUSY_USER_DEFINED_MASK 0xFFDFFFFF
+#define S_036110_RMI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 22)
+#define G_036110_RMI_BUSY_USER_DEFINED_MASK(x) (((x) >> 22) & 0x1)
+#define C_036110_RMI_BUSY_USER_DEFINED_MASK 0xFFBFFFFF
+#define R_036114_GRBM_SE3_PERFCOUNTER_SELECT 0x036114
+#define S_036114_PERF_SEL(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_036114_PERF_SEL(x) (((x) >> 0) & 0x3F)
+#define C_036114_PERF_SEL 0xFFFFFFC0
+#define S_036114_DB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 10)
+#define G_036114_DB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 10) & 0x1)
+#define C_036114_DB_CLEAN_USER_DEFINED_MASK 0xFFFFFBFF
+#define S_036114_CB_CLEAN_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 11)
+#define G_036114_CB_CLEAN_USER_DEFINED_MASK(x) (((x) >> 11) & 0x1)
+#define C_036114_CB_CLEAN_USER_DEFINED_MASK 0xFFFFF7FF
+#define S_036114_TA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 12)
+#define G_036114_TA_BUSY_USER_DEFINED_MASK(x) (((x) >> 12) & 0x1)
+#define C_036114_TA_BUSY_USER_DEFINED_MASK 0xFFFFEFFF
+#define S_036114_SX_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 13)
+#define G_036114_SX_BUSY_USER_DEFINED_MASK(x) (((x) >> 13) & 0x1)
+#define C_036114_SX_BUSY_USER_DEFINED_MASK 0xFFFFDFFF
+#define S_036114_SPI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 15)
+#define G_036114_SPI_BUSY_USER_DEFINED_MASK(x) (((x) >> 15) & 0x1)
+#define C_036114_SPI_BUSY_USER_DEFINED_MASK 0xFFFF7FFF
+#define S_036114_SC_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 16)
+#define G_036114_SC_BUSY_USER_DEFINED_MASK(x) (((x) >> 16) & 0x1)
+#define C_036114_SC_BUSY_USER_DEFINED_MASK 0xFFFEFFFF
+#define S_036114_DB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 17)
+#define G_036114_DB_BUSY_USER_DEFINED_MASK(x) (((x) >> 17) & 0x1)
+#define C_036114_DB_BUSY_USER_DEFINED_MASK 0xFFFDFFFF
+#define S_036114_CB_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 18)
+#define G_036114_CB_BUSY_USER_DEFINED_MASK(x) (((x) >> 18) & 0x1)
+#define C_036114_CB_BUSY_USER_DEFINED_MASK 0xFFFBFFFF
+#define S_036114_VGT_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 19)
+#define G_036114_VGT_BUSY_USER_DEFINED_MASK(x) (((x) >> 19) & 0x1)
+#define C_036114_VGT_BUSY_USER_DEFINED_MASK 0xFFF7FFFF
+#define S_036114_PA_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 20)
+#define G_036114_PA_BUSY_USER_DEFINED_MASK(x) (((x) >> 20) & 0x1)
+#define C_036114_PA_BUSY_USER_DEFINED_MASK 0xFFEFFFFF
+#define S_036114_BCI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 21)
+#define G_036114_BCI_BUSY_USER_DEFINED_MASK(x) (((x) >> 21) & 0x1)
+#define C_036114_BCI_BUSY_USER_DEFINED_MASK 0xFFDFFFFF
+#define S_036114_RMI_BUSY_USER_DEFINED_MASK(x) (((unsigned)(x) & 0x1) << 22)
+#define G_036114_RMI_BUSY_USER_DEFINED_MASK(x) (((x) >> 22) & 0x1)
+#define C_036114_RMI_BUSY_USER_DEFINED_MASK 0xFFBFFFFF
+#define R_036200_WD_PERFCOUNTER0_SELECT 0x036200
+#define S_036200_PERF_SEL(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036200_PERF_SEL(x) (((x) >> 0) & 0xFF)
+#define C_036200_PERF_SEL 0xFFFFFF00
+#define S_036200_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036200_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036200_PERF_MODE 0x0FFFFFFF
+#define R_036204_WD_PERFCOUNTER1_SELECT 0x036204
+#define R_036208_WD_PERFCOUNTER2_SELECT 0x036208
+#define R_03620C_WD_PERFCOUNTER3_SELECT 0x03620C
+#define R_036210_IA_PERFCOUNTER0_SELECT 0x036210
+#define S_036210_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036210_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036210_PERF_SEL 0xFFFFFC00
+#define S_036210_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036210_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036210_PERF_SEL1 0xFFF003FF
+#define S_036210_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036210_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036210_CNTR_MODE 0xFF0FFFFF
+#define S_036210_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036210_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036210_PERF_MODE1 0xF0FFFFFF
+#define S_036210_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036210_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036210_PERF_MODE 0x0FFFFFFF
+#define R_036214_IA_PERFCOUNTER1_SELECT 0x036214
+#define R_036218_IA_PERFCOUNTER2_SELECT 0x036218
+#define R_03621C_IA_PERFCOUNTER3_SELECT 0x03621C
+#define R_036220_IA_PERFCOUNTER0_SELECT1 0x036220
+#define S_036220_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036220_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036220_PERF_SEL2 0xFFFFFC00
+#define S_036220_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036220_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036220_PERF_SEL3 0xFFF003FF
+#define S_036220_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036220_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036220_PERF_MODE3 0xF0FFFFFF
+#define S_036220_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036220_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036220_PERF_MODE2 0x0FFFFFFF
+#define R_036230_VGT_PERFCOUNTER0_SELECT 0x036230
+#define S_036230_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036230_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036230_PERF_SEL 0xFFFFFC00
+#define S_036230_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036230_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036230_PERF_SEL1 0xFFF003FF
+#define S_036230_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036230_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036230_CNTR_MODE 0xFF0FFFFF
+#define S_036230_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036230_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036230_PERF_MODE1 0xF0FFFFFF
+#define S_036230_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036230_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036230_PERF_MODE 0x0FFFFFFF
+#define R_036234_VGT_PERFCOUNTER1_SELECT 0x036234
+#define R_036238_VGT_PERFCOUNTER2_SELECT 0x036238
+#define R_03623C_VGT_PERFCOUNTER3_SELECT 0x03623C
+#define R_036240_VGT_PERFCOUNTER0_SELECT1 0x036240
+#define S_036240_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036240_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036240_PERF_SEL2 0xFFFFFC00
+#define S_036240_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036240_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036240_PERF_SEL3 0xFFF003FF
+#define S_036240_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036240_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036240_PERF_MODE3 0xF0FFFFFF
+#define S_036240_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036240_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036240_PERF_MODE2 0x0FFFFFFF
+#define R_036244_VGT_PERFCOUNTER1_SELECT1 0x036244
+#define R_036250_VGT_PERFCOUNTER_SEID_MASK 0x036250
+#define S_036250_PERF_SEID_IGNORE_MASK(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036250_PERF_SEID_IGNORE_MASK(x) (((x) >> 0) & 0xFF)
+#define C_036250_PERF_SEID_IGNORE_MASK 0xFFFFFF00
+#define R_036400_PA_SU_PERFCOUNTER0_SELECT 0x036400
+#define S_036400_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036400_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036400_PERF_SEL 0xFFFFFC00
+#define S_036400_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036400_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036400_PERF_SEL1 0xFFF003FF
+#define S_036400_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036400_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036400_CNTR_MODE 0xFF0FFFFF
+#define R_036404_PA_SU_PERFCOUNTER0_SELECT1 0x036404
+#define S_036404_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036404_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036404_PERF_SEL2 0xFFFFFC00
+#define S_036404_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036404_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036404_PERF_SEL3 0xFFF003FF
+#define R_036408_PA_SU_PERFCOUNTER1_SELECT 0x036408
+#define R_03640C_PA_SU_PERFCOUNTER1_SELECT1 0x03640C
+#define R_036410_PA_SU_PERFCOUNTER2_SELECT 0x036410
+#define R_036414_PA_SU_PERFCOUNTER3_SELECT 0x036414
+#define R_036500_PA_SC_PERFCOUNTER0_SELECT 0x036500
+#define S_036500_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036500_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036500_PERF_SEL 0xFFFFFC00
+#define S_036500_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036500_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036500_PERF_SEL1 0xFFF003FF
+#define S_036500_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036500_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036500_CNTR_MODE 0xFF0FFFFF
+#define R_036504_PA_SC_PERFCOUNTER0_SELECT1 0x036504
+#define S_036504_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036504_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036504_PERF_SEL2 0xFFFFFC00
+#define S_036504_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036504_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036504_PERF_SEL3 0xFFF003FF
+#define R_036508_PA_SC_PERFCOUNTER1_SELECT 0x036508
+#define R_03650C_PA_SC_PERFCOUNTER2_SELECT 0x03650C
+#define R_036510_PA_SC_PERFCOUNTER3_SELECT 0x036510
+#define R_036514_PA_SC_PERFCOUNTER4_SELECT 0x036514
+#define R_036518_PA_SC_PERFCOUNTER5_SELECT 0x036518
+#define R_03651C_PA_SC_PERFCOUNTER6_SELECT 0x03651C
+#define R_036520_PA_SC_PERFCOUNTER7_SELECT 0x036520
+#define R_036600_SPI_PERFCOUNTER0_SELECT 0x036600
+#define S_036600_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036600_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036600_PERF_SEL 0xFFFFFC00
+#define S_036600_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036600_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036600_PERF_SEL1 0xFFF003FF
+#define S_036600_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036600_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036600_CNTR_MODE 0xFF0FFFFF
+#define S_036600_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036600_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036600_PERF_MODE1 0xF0FFFFFF
+#define S_036600_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036600_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036600_PERF_MODE 0x0FFFFFFF
+#define R_036604_SPI_PERFCOUNTER1_SELECT 0x036604
+#define R_036608_SPI_PERFCOUNTER2_SELECT 0x036608
+#define R_03660C_SPI_PERFCOUNTER3_SELECT 0x03660C
+#define R_036610_SPI_PERFCOUNTER0_SELECT1 0x036610
+#define S_036610_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036610_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036610_PERF_SEL2 0xFFFFFC00
+#define S_036610_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036610_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036610_PERF_SEL3 0xFFF003FF
+#define S_036610_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036610_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036610_PERF_MODE3 0xF0FFFFFF
+#define S_036610_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036610_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036610_PERF_MODE2 0x0FFFFFFF
+#define R_036614_SPI_PERFCOUNTER1_SELECT1 0x036614
+#define R_036618_SPI_PERFCOUNTER2_SELECT1 0x036618
+#define R_03661C_SPI_PERFCOUNTER3_SELECT1 0x03661C
+#define R_036620_SPI_PERFCOUNTER4_SELECT 0x036620
+#define R_036624_SPI_PERFCOUNTER5_SELECT 0x036624
+#define R_036628_SPI_PERFCOUNTER_BINS 0x036628
+#define S_036628_BIN0_MIN(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_036628_BIN0_MIN(x) (((x) >> 0) & 0x0F)
+#define C_036628_BIN0_MIN 0xFFFFFFF0
+#define S_036628_BIN0_MAX(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_036628_BIN0_MAX(x) (((x) >> 4) & 0x0F)
+#define C_036628_BIN0_MAX 0xFFFFFF0F
+#define S_036628_BIN1_MIN(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_036628_BIN1_MIN(x) (((x) >> 8) & 0x0F)
+#define C_036628_BIN1_MIN 0xFFFFF0FF
+#define S_036628_BIN1_MAX(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_036628_BIN1_MAX(x) (((x) >> 12) & 0x0F)
+#define C_036628_BIN1_MAX 0xFFFF0FFF
+#define S_036628_BIN2_MIN(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_036628_BIN2_MIN(x) (((x) >> 16) & 0x0F)
+#define C_036628_BIN2_MIN 0xFFF0FFFF
+#define S_036628_BIN2_MAX(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036628_BIN2_MAX(x) (((x) >> 20) & 0x0F)
+#define C_036628_BIN2_MAX 0xFF0FFFFF
+#define S_036628_BIN3_MIN(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036628_BIN3_MIN(x) (((x) >> 24) & 0x0F)
+#define C_036628_BIN3_MIN 0xF0FFFFFF
+#define S_036628_BIN3_MAX(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036628_BIN3_MAX(x) (((x) >> 28) & 0x0F)
+#define C_036628_BIN3_MAX 0x0FFFFFFF
+#define R_036700_SQ_PERFCOUNTER0_SELECT 0x036700
+#define S_036700_PERF_SEL(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_036700_PERF_SEL(x) (((x) >> 0) & 0x1FF)
+#define C_036700_PERF_SEL 0xFFFFFE00
+#define S_036700_SQC_BANK_MASK(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_036700_SQC_BANK_MASK(x) (((x) >> 12) & 0x0F)
+#define C_036700_SQC_BANK_MASK 0xFFFF0FFF
+#define S_036700_SQC_CLIENT_MASK(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_036700_SQC_CLIENT_MASK(x) (((x) >> 16) & 0x0F)
+#define C_036700_SQC_CLIENT_MASK 0xFFF0FFFF
+#define S_036700_SPM_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036700_SPM_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036700_SPM_MODE 0xFF0FFFFF
+#define S_036700_SIMD_MASK(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036700_SIMD_MASK(x) (((x) >> 24) & 0x0F)
+#define C_036700_SIMD_MASK 0xF0FFFFFF
+#define S_036700_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036700_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036700_PERF_MODE 0x0FFFFFFF
+#define R_036704_SQ_PERFCOUNTER1_SELECT 0x036704
+#define R_036708_SQ_PERFCOUNTER2_SELECT 0x036708
+#define R_03670C_SQ_PERFCOUNTER3_SELECT 0x03670C
+#define R_036710_SQ_PERFCOUNTER4_SELECT 0x036710
+#define R_036714_SQ_PERFCOUNTER5_SELECT 0x036714
+#define R_036718_SQ_PERFCOUNTER6_SELECT 0x036718
+#define R_03671C_SQ_PERFCOUNTER7_SELECT 0x03671C
+#define R_036720_SQ_PERFCOUNTER8_SELECT 0x036720
+#define R_036724_SQ_PERFCOUNTER9_SELECT 0x036724
+#define R_036728_SQ_PERFCOUNTER10_SELECT 0x036728
+#define R_03672C_SQ_PERFCOUNTER11_SELECT 0x03672C
+#define R_036730_SQ_PERFCOUNTER12_SELECT 0x036730
+#define R_036734_SQ_PERFCOUNTER13_SELECT 0x036734
+#define R_036738_SQ_PERFCOUNTER14_SELECT 0x036738
+#define R_03673C_SQ_PERFCOUNTER15_SELECT 0x03673C
+#define R_036780_SQ_PERFCOUNTER_CTRL 0x036780
+#define S_036780_PS_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_036780_PS_EN(x) (((x) >> 0) & 0x1)
+#define C_036780_PS_EN 0xFFFFFFFE
+#define S_036780_VS_EN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_036780_VS_EN(x) (((x) >> 1) & 0x1)
+#define C_036780_VS_EN 0xFFFFFFFD
+#define S_036780_GS_EN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_036780_GS_EN(x) (((x) >> 2) & 0x1)
+#define C_036780_GS_EN 0xFFFFFFFB
+#define S_036780_ES_EN(x) (((unsigned)(x) & 0x1) << 3)
+#define G_036780_ES_EN(x) (((x) >> 3) & 0x1)
+#define C_036780_ES_EN 0xFFFFFFF7
+#define S_036780_HS_EN(x) (((unsigned)(x) & 0x1) << 4)
+#define G_036780_HS_EN(x) (((x) >> 4) & 0x1)
+#define C_036780_HS_EN 0xFFFFFFEF
+#define S_036780_LS_EN(x) (((unsigned)(x) & 0x1) << 5)
+#define G_036780_LS_EN(x) (((x) >> 5) & 0x1)
+#define C_036780_LS_EN 0xFFFFFFDF
+#define S_036780_CS_EN(x) (((unsigned)(x) & 0x1) << 6)
+#define G_036780_CS_EN(x) (((x) >> 6) & 0x1)
+#define C_036780_CS_EN 0xFFFFFFBF
+#define S_036780_CNTR_RATE(x) (((unsigned)(x) & 0x1F) << 8)
+#define G_036780_CNTR_RATE(x) (((x) >> 8) & 0x1F)
+#define C_036780_CNTR_RATE 0xFFFFE0FF
+#define S_036780_DISABLE_FLUSH(x) (((unsigned)(x) & 0x1) << 13)
+#define G_036780_DISABLE_FLUSH(x) (((x) >> 13) & 0x1)
+#define C_036780_DISABLE_FLUSH 0xFFFFDFFF
+#define R_036784_SQ_PERFCOUNTER_MASK 0x036784
+#define S_036784_SH0_MASK(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_036784_SH0_MASK(x) (((x) >> 0) & 0xFFFF)
+#define C_036784_SH0_MASK 0xFFFF0000
+#define S_036784_SH1_MASK(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_036784_SH1_MASK(x) (((x) >> 16) & 0xFFFF)
+#define C_036784_SH1_MASK 0x0000FFFF
+#define R_036788_SQ_PERFCOUNTER_CTRL2 0x036788
+#define S_036788_FORCE_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_036788_FORCE_EN(x) (((x) >> 0) & 0x1)
+#define C_036788_FORCE_EN 0xFFFFFFFE
+#define R_036900_SX_PERFCOUNTER0_SELECT 0x036900
+#define S_036900_PERFCOUNTER_SELECT(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036900_PERFCOUNTER_SELECT(x) (((x) >> 0) & 0x3FF)
+#define C_036900_PERFCOUNTER_SELECT 0xFFFFFC00
+#define S_036900_PERFCOUNTER_SELECT1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036900_PERFCOUNTER_SELECT1(x) (((x) >> 10) & 0x3FF)
+#define C_036900_PERFCOUNTER_SELECT1 0xFFF003FF
+#define S_036900_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036900_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036900_CNTR_MODE 0xFF0FFFFF
+#define R_036904_SX_PERFCOUNTER1_SELECT 0x036904
+#define R_036908_SX_PERFCOUNTER2_SELECT 0x036908
+#define R_03690C_SX_PERFCOUNTER3_SELECT 0x03690C
+#define R_036910_SX_PERFCOUNTER0_SELECT1 0x036910
+#define S_036910_PERFCOUNTER_SELECT2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036910_PERFCOUNTER_SELECT2(x) (((x) >> 0) & 0x3FF)
+#define C_036910_PERFCOUNTER_SELECT2 0xFFFFFC00
+#define S_036910_PERFCOUNTER_SELECT3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036910_PERFCOUNTER_SELECT3(x) (((x) >> 10) & 0x3FF)
+#define C_036910_PERFCOUNTER_SELECT3 0xFFF003FF
+#define R_036914_SX_PERFCOUNTER1_SELECT1 0x036914
+#define R_036A00_GDS_PERFCOUNTER0_SELECT 0x036A00
+#define S_036A00_PERFCOUNTER_SELECT(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036A00_PERFCOUNTER_SELECT(x) (((x) >> 0) & 0x3FF)
+#define C_036A00_PERFCOUNTER_SELECT 0xFFFFFC00
+#define S_036A00_PERFCOUNTER_SELECT1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036A00_PERFCOUNTER_SELECT1(x) (((x) >> 10) & 0x3FF)
+#define C_036A00_PERFCOUNTER_SELECT1 0xFFF003FF
+#define S_036A00_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036A00_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036A00_CNTR_MODE 0xFF0FFFFF
+#define R_036A04_GDS_PERFCOUNTER1_SELECT 0x036A04
+#define R_036A08_GDS_PERFCOUNTER2_SELECT 0x036A08
+#define R_036A0C_GDS_PERFCOUNTER3_SELECT 0x036A0C
+#define R_036A10_GDS_PERFCOUNTER0_SELECT1 0x036A10
+#define S_036A10_PERFCOUNTER_SELECT2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036A10_PERFCOUNTER_SELECT2(x) (((x) >> 0) & 0x3FF)
+#define C_036A10_PERFCOUNTER_SELECT2 0xFFFFFC00
+#define S_036A10_PERFCOUNTER_SELECT3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036A10_PERFCOUNTER_SELECT3(x) (((x) >> 10) & 0x3FF)
+#define C_036A10_PERFCOUNTER_SELECT3 0xFFF003FF
+#define R_036B00_TA_PERFCOUNTER0_SELECT 0x036B00
+#define S_036B00_PERF_SEL(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036B00_PERF_SEL(x) (((x) >> 0) & 0xFF)
+#define C_036B00_PERF_SEL 0xFFFFFF00
+#define S_036B00_PERF_SEL1(x) (((unsigned)(x) & 0xFF) << 10)
+#define G_036B00_PERF_SEL1(x) (((x) >> 10) & 0xFF)
+#define C_036B00_PERF_SEL1 0xFFFC03FF
+#define S_036B00_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036B00_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036B00_CNTR_MODE 0xFF0FFFFF
+#define S_036B00_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036B00_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036B00_PERF_MODE1 0xF0FFFFFF
+#define S_036B00_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036B00_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036B00_PERF_MODE 0x0FFFFFFF
+#define R_036B04_TA_PERFCOUNTER0_SELECT1 0x036B04
+#define S_036B04_PERF_SEL2(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036B04_PERF_SEL2(x) (((x) >> 0) & 0xFF)
+#define C_036B04_PERF_SEL2 0xFFFFFF00
+#define S_036B04_PERF_SEL3(x) (((unsigned)(x) & 0xFF) << 10)
+#define G_036B04_PERF_SEL3(x) (((x) >> 10) & 0xFF)
+#define C_036B04_PERF_SEL3 0xFFFC03FF
+#define S_036B04_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036B04_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036B04_PERF_MODE3 0xF0FFFFFF
+#define S_036B04_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036B04_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036B04_PERF_MODE2 0x0FFFFFFF
+#define R_036B08_TA_PERFCOUNTER1_SELECT 0x036B08
+#define R_036C00_TD_PERFCOUNTER0_SELECT 0x036C00
+#define S_036C00_PERF_SEL(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036C00_PERF_SEL(x) (((x) >> 0) & 0xFF)
+#define C_036C00_PERF_SEL 0xFFFFFF00
+#define S_036C00_PERF_SEL1(x) (((unsigned)(x) & 0xFF) << 10)
+#define G_036C00_PERF_SEL1(x) (((x) >> 10) & 0xFF)
+#define C_036C00_PERF_SEL1 0xFFFC03FF
+#define S_036C00_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036C00_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036C00_CNTR_MODE 0xFF0FFFFF
+#define S_036C00_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036C00_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036C00_PERF_MODE1 0xF0FFFFFF
+#define S_036C00_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036C00_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036C00_PERF_MODE 0x0FFFFFFF
+#define R_036C04_TD_PERFCOUNTER0_SELECT1 0x036C04
+#define S_036C04_PERF_SEL2(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_036C04_PERF_SEL2(x) (((x) >> 0) & 0xFF)
+#define C_036C04_PERF_SEL2 0xFFFFFF00
+#define S_036C04_PERF_SEL3(x) (((unsigned)(x) & 0xFF) << 10)
+#define G_036C04_PERF_SEL3(x) (((x) >> 10) & 0xFF)
+#define C_036C04_PERF_SEL3 0xFFFC03FF
+#define S_036C04_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036C04_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036C04_PERF_MODE3 0xF0FFFFFF
+#define S_036C04_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036C04_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036C04_PERF_MODE2 0x0FFFFFFF
+#define R_036C08_TD_PERFCOUNTER1_SELECT 0x036C08
+#define R_036D00_TCP_PERFCOUNTER0_SELECT 0x036D00
+#define S_036D00_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036D00_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036D00_PERF_SEL 0xFFFFFC00
+#define S_036D00_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036D00_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036D00_PERF_SEL1 0xFFF003FF
+#define S_036D00_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036D00_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036D00_CNTR_MODE 0xFF0FFFFF
+#define S_036D00_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036D00_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036D00_PERF_MODE1 0xF0FFFFFF
+#define S_036D00_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036D00_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036D00_PERF_MODE 0x0FFFFFFF
+#define R_036D04_TCP_PERFCOUNTER0_SELECT1 0x036D04
+#define S_036D04_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036D04_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036D04_PERF_SEL2 0xFFFFFC00
+#define S_036D04_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036D04_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036D04_PERF_SEL3 0xFFF003FF
+#define S_036D04_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036D04_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_036D04_PERF_MODE3 0xF0FFFFFF
+#define S_036D04_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036D04_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_036D04_PERF_MODE2 0x0FFFFFFF
+#define R_036D08_TCP_PERFCOUNTER1_SELECT 0x036D08
+#define R_036D0C_TCP_PERFCOUNTER1_SELECT1 0x036D0C
+#define R_036D10_TCP_PERFCOUNTER2_SELECT 0x036D10
+#define R_036D14_TCP_PERFCOUNTER3_SELECT 0x036D14
+#define R_036E00_TCC_PERFCOUNTER0_SELECT 0x036E00
+#define S_036E00_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036E00_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036E00_PERF_SEL 0xFFFFFC00
+#define S_036E00_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036E00_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036E00_PERF_SEL1 0xFFF003FF
+#define S_036E00_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036E00_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036E00_CNTR_MODE 0xFF0FFFFF
+#define S_036E00_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036E00_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036E00_PERF_MODE1 0xF0FFFFFF
+#define S_036E00_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036E00_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036E00_PERF_MODE 0x0FFFFFFF
+#define R_036E04_TCC_PERFCOUNTER0_SELECT1 0x036E04
+#define S_036E04_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036E04_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036E04_PERF_SEL2 0xFFFFFC00
+#define S_036E04_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036E04_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036E04_PERF_SEL3 0xFFF003FF
+#define S_036E04_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036E04_PERF_MODE2(x) (((x) >> 24) & 0x0F)
+#define C_036E04_PERF_MODE2 0xF0FFFFFF
+#define S_036E04_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036E04_PERF_MODE3(x) (((x) >> 28) & 0x0F)
+#define C_036E04_PERF_MODE3 0x0FFFFFFF
+#define R_036E08_TCC_PERFCOUNTER1_SELECT 0x036E08
+#define R_036E0C_TCC_PERFCOUNTER1_SELECT1 0x036E0C
+#define R_036E10_TCC_PERFCOUNTER2_SELECT 0x036E10
+#define R_036E14_TCC_PERFCOUNTER3_SELECT 0x036E14
+#define R_036E40_TCA_PERFCOUNTER0_SELECT 0x036E40
+#define S_036E40_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036E40_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_036E40_PERF_SEL 0xFFFFFC00
+#define S_036E40_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036E40_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_036E40_PERF_SEL1 0xFFF003FF
+#define S_036E40_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_036E40_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_036E40_CNTR_MODE 0xFF0FFFFF
+#define S_036E40_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036E40_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_036E40_PERF_MODE1 0xF0FFFFFF
+#define S_036E40_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036E40_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_036E40_PERF_MODE 0x0FFFFFFF
+#define R_036E44_TCA_PERFCOUNTER0_SELECT1 0x036E44
+#define S_036E44_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_036E44_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_036E44_PERF_SEL2 0xFFFFFC00
+#define S_036E44_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_036E44_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_036E44_PERF_SEL3 0xFFF003FF
+#define S_036E44_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_036E44_PERF_MODE2(x) (((x) >> 24) & 0x0F)
+#define C_036E44_PERF_MODE2 0xF0FFFFFF
+#define S_036E44_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_036E44_PERF_MODE3(x) (((x) >> 28) & 0x0F)
+#define C_036E44_PERF_MODE3 0x0FFFFFFF
+#define R_036E48_TCA_PERFCOUNTER1_SELECT 0x036E48
+#define R_036E4C_TCA_PERFCOUNTER1_SELECT1 0x036E4C
+#define R_036E50_TCA_PERFCOUNTER2_SELECT 0x036E50
+#define R_036E54_TCA_PERFCOUNTER3_SELECT 0x036E54
+#define R_037000_CB_PERFCOUNTER_FILTER 0x037000
+#define S_037000_OP_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_037000_OP_FILTER_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_037000_OP_FILTER_ENABLE 0xFFFFFFFE
+#define S_037000_OP_FILTER_SEL(x) (((unsigned)(x) & 0x07) << 1)
+#define G_037000_OP_FILTER_SEL(x) (((x) >> 1) & 0x07)
+#define C_037000_OP_FILTER_SEL 0xFFFFFFF1
+#define S_037000_FORMAT_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_037000_FORMAT_FILTER_ENABLE(x) (((x) >> 4) & 0x1)
+#define C_037000_FORMAT_FILTER_ENABLE 0xFFFFFFEF
+#define S_037000_FORMAT_FILTER_SEL(x) (((unsigned)(x) & 0x1F) << 5)
+#define G_037000_FORMAT_FILTER_SEL(x) (((x) >> 5) & 0x1F)
+#define C_037000_FORMAT_FILTER_SEL 0xFFFFFC1F
+#define S_037000_CLEAR_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 10)
+#define G_037000_CLEAR_FILTER_ENABLE(x) (((x) >> 10) & 0x1)
+#define C_037000_CLEAR_FILTER_ENABLE 0xFFFFFBFF
+#define S_037000_CLEAR_FILTER_SEL(x) (((unsigned)(x) & 0x1) << 11)
+#define G_037000_CLEAR_FILTER_SEL(x) (((x) >> 11) & 0x1)
+#define C_037000_CLEAR_FILTER_SEL 0xFFFFF7FF
+#define S_037000_MRT_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 12)
+#define G_037000_MRT_FILTER_ENABLE(x) (((x) >> 12) & 0x1)
+#define C_037000_MRT_FILTER_ENABLE 0xFFFFEFFF
+#define S_037000_MRT_FILTER_SEL(x) (((unsigned)(x) & 0x07) << 13)
+#define G_037000_MRT_FILTER_SEL(x) (((x) >> 13) & 0x07)
+#define C_037000_MRT_FILTER_SEL 0xFFFF1FFF
+#define S_037000_NUM_SAMPLES_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 17)
+#define G_037000_NUM_SAMPLES_FILTER_ENABLE(x) (((x) >> 17) & 0x1)
+#define C_037000_NUM_SAMPLES_FILTER_ENABLE 0xFFFDFFFF
+#define S_037000_NUM_SAMPLES_FILTER_SEL(x) (((unsigned)(x) & 0x07) << 18)
+#define G_037000_NUM_SAMPLES_FILTER_SEL(x) (((x) >> 18) & 0x07)
+#define C_037000_NUM_SAMPLES_FILTER_SEL 0xFFE3FFFF
+#define S_037000_NUM_FRAGMENTS_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_037000_NUM_FRAGMENTS_FILTER_ENABLE(x) (((x) >> 21) & 0x1)
+#define C_037000_NUM_FRAGMENTS_FILTER_ENABLE 0xFFDFFFFF
+#define S_037000_NUM_FRAGMENTS_FILTER_SEL(x) (((unsigned)(x) & 0x03) << 22)
+#define G_037000_NUM_FRAGMENTS_FILTER_SEL(x) (((x) >> 22) & 0x03)
+#define C_037000_NUM_FRAGMENTS_FILTER_SEL 0xFF3FFFFF
+#define R_037004_CB_PERFCOUNTER0_SELECT 0x037004
+#define S_037004_PERF_SEL(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_037004_PERF_SEL(x) (((x) >> 0) & 0x1FF)
+#define C_037004_PERF_SEL 0xFFFFFE00
+#define S_037004_PERF_SEL1(x) (((unsigned)(x) & 0x1FF) << 10)
+#define G_037004_PERF_SEL1(x) (((x) >> 10) & 0x1FF)
+#define C_037004_PERF_SEL1 0xFFF803FF
+#define S_037004_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_037004_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_037004_CNTR_MODE 0xFF0FFFFF
+#define S_037004_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_037004_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_037004_PERF_MODE1 0xF0FFFFFF
+#define S_037004_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_037004_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_037004_PERF_MODE 0x0FFFFFFF
+#define R_037008_CB_PERFCOUNTER0_SELECT1 0x037008
+#define S_037008_PERF_SEL2(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_037008_PERF_SEL2(x) (((x) >> 0) & 0x1FF)
+#define C_037008_PERF_SEL2 0xFFFFFE00
+#define S_037008_PERF_SEL3(x) (((unsigned)(x) & 0x1FF) << 10)
+#define G_037008_PERF_SEL3(x) (((x) >> 10) & 0x1FF)
+#define C_037008_PERF_SEL3 0xFFF803FF
+#define S_037008_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_037008_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_037008_PERF_MODE3 0xF0FFFFFF
+#define S_037008_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_037008_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_037008_PERF_MODE2 0x0FFFFFFF
+#define R_03700C_CB_PERFCOUNTER1_SELECT 0x03700C
+#define R_037010_CB_PERFCOUNTER2_SELECT 0x037010
+#define R_037014_CB_PERFCOUNTER3_SELECT 0x037014
+#define R_037100_DB_PERFCOUNTER0_SELECT 0x037100
+#define S_037100_PERF_SEL(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_037100_PERF_SEL(x) (((x) >> 0) & 0x3FF)
+#define C_037100_PERF_SEL 0xFFFFFC00
+#define S_037100_PERF_SEL1(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_037100_PERF_SEL1(x) (((x) >> 10) & 0x3FF)
+#define C_037100_PERF_SEL1 0xFFF003FF
+#define S_037100_CNTR_MODE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_037100_CNTR_MODE(x) (((x) >> 20) & 0x0F)
+#define C_037100_CNTR_MODE 0xFF0FFFFF
+#define S_037100_PERF_MODE1(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_037100_PERF_MODE1(x) (((x) >> 24) & 0x0F)
+#define C_037100_PERF_MODE1 0xF0FFFFFF
+#define S_037100_PERF_MODE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_037100_PERF_MODE(x) (((x) >> 28) & 0x0F)
+#define C_037100_PERF_MODE 0x0FFFFFFF
+#define R_037104_DB_PERFCOUNTER0_SELECT1 0x037104
+#define S_037104_PERF_SEL2(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_037104_PERF_SEL2(x) (((x) >> 0) & 0x3FF)
+#define C_037104_PERF_SEL2 0xFFFFFC00
+#define S_037104_PERF_SEL3(x) (((unsigned)(x) & 0x3FF) << 10)
+#define G_037104_PERF_SEL3(x) (((x) >> 10) & 0x3FF)
+#define C_037104_PERF_SEL3 0xFFF003FF
+#define S_037104_PERF_MODE3(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_037104_PERF_MODE3(x) (((x) >> 24) & 0x0F)
+#define C_037104_PERF_MODE3 0xF0FFFFFF
+#define S_037104_PERF_MODE2(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_037104_PERF_MODE2(x) (((x) >> 28) & 0x0F)
+#define C_037104_PERF_MODE2 0x0FFFFFFF
+#define R_037108_DB_PERFCOUNTER1_SELECT 0x037108
+#define R_03710C_DB_PERFCOUNTER1_SELECT1 0x03710C
+#define R_037110_DB_PERFCOUNTER2_SELECT 0x037110
+#define R_037118_DB_PERFCOUNTER3_SELECT 0x037118
+#define R_028000_DB_RENDER_CONTROL 0x028000
+#define S_028000_DEPTH_CLEAR_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028000_DEPTH_CLEAR_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028000_DEPTH_CLEAR_ENABLE 0xFFFFFFFE
+#define S_028000_STENCIL_CLEAR_ENABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028000_STENCIL_CLEAR_ENABLE(x) (((x) >> 1) & 0x1)
+#define C_028000_STENCIL_CLEAR_ENABLE 0xFFFFFFFD
+#define S_028000_DEPTH_COPY(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028000_DEPTH_COPY(x) (((x) >> 2) & 0x1)
+#define C_028000_DEPTH_COPY 0xFFFFFFFB
+#define S_028000_STENCIL_COPY(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028000_STENCIL_COPY(x) (((x) >> 3) & 0x1)
+#define C_028000_STENCIL_COPY 0xFFFFFFF7
+#define S_028000_RESUMMARIZE_ENABLE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028000_RESUMMARIZE_ENABLE(x) (((x) >> 4) & 0x1)
+#define C_028000_RESUMMARIZE_ENABLE 0xFFFFFFEF
+#define S_028000_STENCIL_COMPRESS_DISABLE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028000_STENCIL_COMPRESS_DISABLE(x) (((x) >> 5) & 0x1)
+#define C_028000_STENCIL_COMPRESS_DISABLE 0xFFFFFFDF
+#define S_028000_DEPTH_COMPRESS_DISABLE(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028000_DEPTH_COMPRESS_DISABLE(x) (((x) >> 6) & 0x1)
+#define C_028000_DEPTH_COMPRESS_DISABLE 0xFFFFFFBF
+#define S_028000_COPY_CENTROID(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028000_COPY_CENTROID(x) (((x) >> 7) & 0x1)
+#define C_028000_COPY_CENTROID 0xFFFFFF7F
+#define S_028000_COPY_SAMPLE(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028000_COPY_SAMPLE(x) (((x) >> 8) & 0x0F)
+#define C_028000_COPY_SAMPLE 0xFFFFF0FF
+#define S_028000_DECOMPRESS_ENABLE(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028000_DECOMPRESS_ENABLE(x) (((x) >> 12) & 0x1)
+#define C_028000_DECOMPRESS_ENABLE 0xFFFFEFFF
+#define R_028004_DB_COUNT_CONTROL 0x028004
+#define S_028004_ZPASS_INCREMENT_DISABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028004_ZPASS_INCREMENT_DISABLE(x) (((x) >> 0) & 0x1)
+#define C_028004_ZPASS_INCREMENT_DISABLE 0xFFFFFFFE
+#define S_028004_PERFECT_ZPASS_COUNTS(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028004_PERFECT_ZPASS_COUNTS(x) (((x) >> 1) & 0x1)
+#define C_028004_PERFECT_ZPASS_COUNTS 0xFFFFFFFD
+#define S_028004_SAMPLE_RATE(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028004_SAMPLE_RATE(x) (((x) >> 4) & 0x07)
+#define C_028004_SAMPLE_RATE 0xFFFFFF8F
+#define S_028004_ZPASS_ENABLE(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028004_ZPASS_ENABLE(x) (((x) >> 8) & 0x0F)
+#define C_028004_ZPASS_ENABLE 0xFFFFF0FF
+#define S_028004_ZFAIL_ENABLE(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028004_ZFAIL_ENABLE(x) (((x) >> 12) & 0x0F)
+#define C_028004_ZFAIL_ENABLE 0xFFFF0FFF
+#define S_028004_SFAIL_ENABLE(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028004_SFAIL_ENABLE(x) (((x) >> 16) & 0x0F)
+#define C_028004_SFAIL_ENABLE 0xFFF0FFFF
+#define S_028004_DBFAIL_ENABLE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028004_DBFAIL_ENABLE(x) (((x) >> 20) & 0x0F)
+#define C_028004_DBFAIL_ENABLE 0xFF0FFFFF
+#define S_028004_SLICE_EVEN_ENABLE(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028004_SLICE_EVEN_ENABLE(x) (((x) >> 24) & 0x0F)
+#define C_028004_SLICE_EVEN_ENABLE 0xF0FFFFFF
+#define S_028004_SLICE_ODD_ENABLE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028004_SLICE_ODD_ENABLE(x) (((x) >> 28) & 0x0F)
+#define C_028004_SLICE_ODD_ENABLE 0x0FFFFFFF
+#define R_028008_DB_DEPTH_VIEW 0x028008
+#define S_028008_SLICE_START(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028008_SLICE_START(x) (((x) >> 0) & 0x7FF)
+#define C_028008_SLICE_START 0xFFFFF800
+#define S_028008_SLICE_MAX(x) (((unsigned)(x) & 0x7FF) << 13)
+#define G_028008_SLICE_MAX(x) (((x) >> 13) & 0x7FF)
+#define C_028008_SLICE_MAX 0xFF001FFF
+#define S_028008_Z_READ_ONLY(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028008_Z_READ_ONLY(x) (((x) >> 24) & 0x1)
+#define C_028008_Z_READ_ONLY 0xFEFFFFFF
+#define S_028008_STENCIL_READ_ONLY(x) (((unsigned)(x) & 0x1) << 25)
+#define G_028008_STENCIL_READ_ONLY(x) (((x) >> 25) & 0x1)
+#define C_028008_STENCIL_READ_ONLY 0xFDFFFFFF
+#define S_028008_MIPID(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_028008_MIPID(x) (((x) >> 26) & 0x0F)
+#define C_028008_MIPID 0xC3FFFFFF
+#define R_02800C_DB_RENDER_OVERRIDE 0x02800C
+#define S_02800C_FORCE_HIZ_ENABLE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_02800C_FORCE_HIZ_ENABLE(x) (((x) >> 0) & 0x03)
+#define C_02800C_FORCE_HIZ_ENABLE 0xFFFFFFFC
+#define S_02800C_FORCE_HIS_ENABLE0(x) (((unsigned)(x) & 0x03) << 2)
+#define G_02800C_FORCE_HIS_ENABLE0(x) (((x) >> 2) & 0x03)
+#define C_02800C_FORCE_HIS_ENABLE0 0xFFFFFFF3
+#define S_02800C_FORCE_HIS_ENABLE1(x) (((unsigned)(x) & 0x03) << 4)
+#define G_02800C_FORCE_HIS_ENABLE1(x) (((x) >> 4) & 0x03)
+#define C_02800C_FORCE_HIS_ENABLE1 0xFFFFFFCF
+#define S_02800C_FORCE_SHADER_Z_ORDER(x) (((unsigned)(x) & 0x1) << 6)
+#define G_02800C_FORCE_SHADER_Z_ORDER(x) (((x) >> 6) & 0x1)
+#define C_02800C_FORCE_SHADER_Z_ORDER 0xFFFFFFBF
+#define S_02800C_FAST_Z_DISABLE(x) (((unsigned)(x) & 0x1) << 7)
+#define G_02800C_FAST_Z_DISABLE(x) (((x) >> 7) & 0x1)
+#define C_02800C_FAST_Z_DISABLE 0xFFFFFF7F
+#define S_02800C_FAST_STENCIL_DISABLE(x) (((unsigned)(x) & 0x1) << 8)
+#define G_02800C_FAST_STENCIL_DISABLE(x) (((x) >> 8) & 0x1)
+#define C_02800C_FAST_STENCIL_DISABLE 0xFFFFFEFF
+#define S_02800C_NOOP_CULL_DISABLE(x) (((unsigned)(x) & 0x1) << 9)
+#define G_02800C_NOOP_CULL_DISABLE(x) (((x) >> 9) & 0x1)
+#define C_02800C_NOOP_CULL_DISABLE 0xFFFFFDFF
+#define S_02800C_FORCE_COLOR_KILL(x) (((unsigned)(x) & 0x1) << 10)
+#define G_02800C_FORCE_COLOR_KILL(x) (((x) >> 10) & 0x1)
+#define C_02800C_FORCE_COLOR_KILL 0xFFFFFBFF
+#define S_02800C_FORCE_Z_READ(x) (((unsigned)(x) & 0x1) << 11)
+#define G_02800C_FORCE_Z_READ(x) (((x) >> 11) & 0x1)
+#define C_02800C_FORCE_Z_READ 0xFFFFF7FF
+#define S_02800C_FORCE_STENCIL_READ(x) (((unsigned)(x) & 0x1) << 12)
+#define G_02800C_FORCE_STENCIL_READ(x) (((x) >> 12) & 0x1)
+#define C_02800C_FORCE_STENCIL_READ 0xFFFFEFFF
+#define S_02800C_FORCE_FULL_Z_RANGE(x) (((unsigned)(x) & 0x03) << 13)
+#define G_02800C_FORCE_FULL_Z_RANGE(x) (((x) >> 13) & 0x03)
+#define C_02800C_FORCE_FULL_Z_RANGE 0xFFFF9FFF
+#define S_02800C_FORCE_QC_SMASK_CONFLICT(x) (((unsigned)(x) & 0x1) << 15)
+#define G_02800C_FORCE_QC_SMASK_CONFLICT(x) (((x) >> 15) & 0x1)
+#define C_02800C_FORCE_QC_SMASK_CONFLICT 0xFFFF7FFF
+#define S_02800C_DISABLE_VIEWPORT_CLAMP(x) (((unsigned)(x) & 0x1) << 16)
+#define G_02800C_DISABLE_VIEWPORT_CLAMP(x) (((x) >> 16) & 0x1)
+#define C_02800C_DISABLE_VIEWPORT_CLAMP 0xFFFEFFFF
+#define S_02800C_IGNORE_SC_ZRANGE(x) (((unsigned)(x) & 0x1) << 17)
+#define G_02800C_IGNORE_SC_ZRANGE(x) (((x) >> 17) & 0x1)
+#define C_02800C_IGNORE_SC_ZRANGE 0xFFFDFFFF
+#define S_02800C_DISABLE_FULLY_COVERED(x) (((unsigned)(x) & 0x1) << 18)
+#define G_02800C_DISABLE_FULLY_COVERED(x) (((x) >> 18) & 0x1)
+#define C_02800C_DISABLE_FULLY_COVERED 0xFFFBFFFF
+#define S_02800C_FORCE_Z_LIMIT_SUMM(x) (((unsigned)(x) & 0x03) << 19)
+#define G_02800C_FORCE_Z_LIMIT_SUMM(x) (((x) >> 19) & 0x03)
+#define C_02800C_FORCE_Z_LIMIT_SUMM 0xFFE7FFFF
+#define S_02800C_MAX_TILES_IN_DTT(x) (((unsigned)(x) & 0x1F) << 21)
+#define G_02800C_MAX_TILES_IN_DTT(x) (((x) >> 21) & 0x1F)
+#define C_02800C_MAX_TILES_IN_DTT 0xFC1FFFFF
+#define S_02800C_DISABLE_TILE_RATE_TILES(x) (((unsigned)(x) & 0x1) << 26)
+#define G_02800C_DISABLE_TILE_RATE_TILES(x) (((x) >> 26) & 0x1)
+#define C_02800C_DISABLE_TILE_RATE_TILES 0xFBFFFFFF
+#define S_02800C_FORCE_Z_DIRTY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_02800C_FORCE_Z_DIRTY(x) (((x) >> 27) & 0x1)
+#define C_02800C_FORCE_Z_DIRTY 0xF7FFFFFF
+#define S_02800C_FORCE_STENCIL_DIRTY(x) (((unsigned)(x) & 0x1) << 28)
+#define G_02800C_FORCE_STENCIL_DIRTY(x) (((x) >> 28) & 0x1)
+#define C_02800C_FORCE_STENCIL_DIRTY 0xEFFFFFFF
+#define S_02800C_FORCE_Z_VALID(x) (((unsigned)(x) & 0x1) << 29)
+#define G_02800C_FORCE_Z_VALID(x) (((x) >> 29) & 0x1)
+#define C_02800C_FORCE_Z_VALID 0xDFFFFFFF
+#define S_02800C_FORCE_STENCIL_VALID(x) (((unsigned)(x) & 0x1) << 30)
+#define G_02800C_FORCE_STENCIL_VALID(x) (((x) >> 30) & 0x1)
+#define C_02800C_FORCE_STENCIL_VALID 0xBFFFFFFF
+#define S_02800C_PRESERVE_COMPRESSION(x) (((unsigned)(x) & 0x1) << 31)
+#define G_02800C_PRESERVE_COMPRESSION(x) (((x) >> 31) & 0x1)
+#define C_02800C_PRESERVE_COMPRESSION 0x7FFFFFFF
+#define R_028010_DB_RENDER_OVERRIDE2 0x028010
+#define S_028010_PARTIAL_SQUAD_LAUNCH_CONTROL(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028010_PARTIAL_SQUAD_LAUNCH_CONTROL(x) (((x) >> 0) & 0x03)
+#define C_028010_PARTIAL_SQUAD_LAUNCH_CONTROL 0xFFFFFFFC
+#define S_028010_PARTIAL_SQUAD_LAUNCH_COUNTDOWN(x) (((unsigned)(x) & 0x07) << 2)
+#define G_028010_PARTIAL_SQUAD_LAUNCH_COUNTDOWN(x) (((x) >> 2) & 0x07)
+#define C_028010_PARTIAL_SQUAD_LAUNCH_COUNTDOWN 0xFFFFFFE3
+#define S_028010_DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028010_DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION(x) (((x) >> 5) & 0x1)
+#define C_028010_DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION 0xFFFFFFDF
+#define S_028010_DISABLE_SMEM_EXPCLEAR_OPTIMIZATION(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028010_DISABLE_SMEM_EXPCLEAR_OPTIMIZATION(x) (((x) >> 6) & 0x1)
+#define C_028010_DISABLE_SMEM_EXPCLEAR_OPTIMIZATION 0xFFFFFFBF
+#define S_028010_DISABLE_COLOR_ON_VALIDATION(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028010_DISABLE_COLOR_ON_VALIDATION(x) (((x) >> 7) & 0x1)
+#define C_028010_DISABLE_COLOR_ON_VALIDATION 0xFFFFFF7F
+#define S_028010_DECOMPRESS_Z_ON_FLUSH(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028010_DECOMPRESS_Z_ON_FLUSH(x) (((x) >> 8) & 0x1)
+#define C_028010_DECOMPRESS_Z_ON_FLUSH 0xFFFFFEFF
+#define S_028010_DISABLE_REG_SNOOP(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028010_DISABLE_REG_SNOOP(x) (((x) >> 9) & 0x1)
+#define C_028010_DISABLE_REG_SNOOP 0xFFFFFDFF
+#define S_028010_DEPTH_BOUNDS_HIER_DEPTH_DISABLE(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028010_DEPTH_BOUNDS_HIER_DEPTH_DISABLE(x) (((x) >> 10) & 0x1)
+#define C_028010_DEPTH_BOUNDS_HIER_DEPTH_DISABLE 0xFFFFFBFF
+#define S_028010_SEPARATE_HIZS_FUNC_ENABLE(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028010_SEPARATE_HIZS_FUNC_ENABLE(x) (((x) >> 11) & 0x1)
+#define C_028010_SEPARATE_HIZS_FUNC_ENABLE 0xFFFFF7FF
+#define S_028010_HIZ_ZFUNC(x) (((unsigned)(x) & 0x07) << 12)
+#define G_028010_HIZ_ZFUNC(x) (((x) >> 12) & 0x07)
+#define C_028010_HIZ_ZFUNC 0xFFFF8FFF
+#define S_028010_HIS_SFUNC_FF(x) (((unsigned)(x) & 0x07) << 15)
+#define G_028010_HIS_SFUNC_FF(x) (((x) >> 15) & 0x07)
+#define C_028010_HIS_SFUNC_FF 0xFFFC7FFF
+#define S_028010_HIS_SFUNC_BF(x) (((unsigned)(x) & 0x07) << 18)
+#define G_028010_HIS_SFUNC_BF(x) (((x) >> 18) & 0x07)
+#define C_028010_HIS_SFUNC_BF 0xFFE3FFFF
+#define S_028010_PRESERVE_ZRANGE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028010_PRESERVE_ZRANGE(x) (((x) >> 21) & 0x1)
+#define C_028010_PRESERVE_ZRANGE 0xFFDFFFFF
+#define S_028010_PRESERVE_SRESULTS(x) (((unsigned)(x) & 0x1) << 22)
+#define G_028010_PRESERVE_SRESULTS(x) (((x) >> 22) & 0x1)
+#define C_028010_PRESERVE_SRESULTS 0xFFBFFFFF
+#define S_028010_DISABLE_FAST_PASS(x) (((unsigned)(x) & 0x1) << 23)
+#define G_028010_DISABLE_FAST_PASS(x) (((x) >> 23) & 0x1)
+#define C_028010_DISABLE_FAST_PASS 0xFF7FFFFF
+#define S_028010_ALLOW_PARTIAL_RES_HIER_KILL(x) (((unsigned)(x) & 0x1) << 25)
+#define G_028010_ALLOW_PARTIAL_RES_HIER_KILL(x) (((x) >> 25) & 0x1)
+#define C_028010_ALLOW_PARTIAL_RES_HIER_KILL 0xFDFFFFFF
+#define R_028014_DB_HTILE_DATA_BASE 0x028014
+#define R_028018_DB_HTILE_DATA_BASE_HI 0x028018
+#define S_028018_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028018_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_028018_BASE_HI 0xFFFFFF00
+#define R_02801C_DB_DEPTH_SIZE 0x02801C
+#define S_02801C_X_MAX(x) (((unsigned)(x) & 0x3FFF) << 0)
+#define G_02801C_X_MAX(x) (((x) >> 0) & 0x3FFF)
+#define C_02801C_X_MAX 0xFFFFC000
+#define S_02801C_Y_MAX(x) (((unsigned)(x) & 0x3FFF) << 16)
+#define G_02801C_Y_MAX(x) (((x) >> 16) & 0x3FFF)
+#define C_02801C_Y_MAX 0xC000FFFF
+#define R_028020_DB_DEPTH_BOUNDS_MIN 0x028020
+#define R_028024_DB_DEPTH_BOUNDS_MAX 0x028024
+#define R_028028_DB_STENCIL_CLEAR 0x028028
+#define S_028028_CLEAR(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028028_CLEAR(x) (((x) >> 0) & 0xFF)
+#define C_028028_CLEAR 0xFFFFFF00
+#define R_02802C_DB_DEPTH_CLEAR 0x02802C
+#define R_028030_PA_SC_SCREEN_SCISSOR_TL 0x028030
+#define S_028030_TL_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028030_TL_X(x) (((x) >> 0) & 0xFFFF)
+#define C_028030_TL_X 0xFFFF0000
+#define S_028030_TL_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028030_TL_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_028030_TL_Y 0x0000FFFF
+#define R_028034_PA_SC_SCREEN_SCISSOR_BR 0x028034
+#define S_028034_BR_X(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028034_BR_X(x) (((x) >> 0) & 0xFFFF)
+#define C_028034_BR_X 0xFFFF0000
+#define S_028034_BR_Y(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028034_BR_Y(x) (((x) >> 16) & 0xFFFF)
+#define C_028034_BR_Y 0x0000FFFF
+#define R_028038_DB_Z_INFO 0x028038
+#define S_028038_FORMAT(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028038_FORMAT(x) (((x) >> 0) & 0x03)
+#define C_028038_FORMAT 0xFFFFFFFC
+#define S_028038_NUM_SAMPLES(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028038_NUM_SAMPLES(x) (((x) >> 2) & 0x03)
+#define C_028038_NUM_SAMPLES 0xFFFFFFF3
+#define S_028038_SW_MODE(x) (((unsigned)(x) & 0x1F) << 4)
+#define G_028038_SW_MODE(x) (((x) >> 4) & 0x1F)
+#define C_028038_SW_MODE 0xFFFFFE0F
+#define S_028038_PARTIALLY_RESIDENT(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028038_PARTIALLY_RESIDENT(x) (((x) >> 12) & 0x1)
+#define C_028038_PARTIALLY_RESIDENT 0xFFFFEFFF
+#define S_028038_FAULT_BEHAVIOR(x) (((unsigned)(x) & 0x03) << 13)
+#define G_028038_FAULT_BEHAVIOR(x) (((x) >> 13) & 0x03)
+#define C_028038_FAULT_BEHAVIOR 0xFFFF9FFF
+#define S_028038_ITERATE_FLUSH(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028038_ITERATE_FLUSH(x) (((x) >> 15) & 0x1)
+#define C_028038_ITERATE_FLUSH 0xFFFF7FFF
+#define S_028038_MAXMIP(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028038_MAXMIP(x) (((x) >> 16) & 0x0F)
+#define C_028038_MAXMIP 0xFFF0FFFF
+#define S_028038_DECOMPRESS_ON_N_ZPLANES(x) (((unsigned)(x) & 0x0F) << 23)
+#define G_028038_DECOMPRESS_ON_N_ZPLANES(x) (((x) >> 23) & 0x0F)
+#define C_028038_DECOMPRESS_ON_N_ZPLANES 0xF87FFFFF
+#define S_028038_ALLOW_EXPCLEAR(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028038_ALLOW_EXPCLEAR(x) (((x) >> 27) & 0x1)
+#define C_028038_ALLOW_EXPCLEAR 0xF7FFFFFF
+#define S_028038_READ_SIZE(x) (((unsigned)(x) & 0x1) << 28)
+#define G_028038_READ_SIZE(x) (((x) >> 28) & 0x1)
+#define C_028038_READ_SIZE 0xEFFFFFFF
+#define S_028038_TILE_SURFACE_ENABLE(x) (((unsigned)(x) & 0x1) << 29)
+#define G_028038_TILE_SURFACE_ENABLE(x) (((x) >> 29) & 0x1)
+#define C_028038_TILE_SURFACE_ENABLE 0xDFFFFFFF
+#define S_028038_CLEAR_DISALLOWED(x) (((unsigned)(x) & 0x1) << 30)
+#define G_028038_CLEAR_DISALLOWED(x) (((x) >> 30) & 0x1)
+#define C_028038_CLEAR_DISALLOWED 0xBFFFFFFF
+#define S_028038_ZRANGE_PRECISION(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028038_ZRANGE_PRECISION(x) (((x) >> 31) & 0x1)
+#define C_028038_ZRANGE_PRECISION 0x7FFFFFFF
+#define R_02803C_DB_STENCIL_INFO 0x02803C
+#define S_02803C_FORMAT(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02803C_FORMAT(x) (((x) >> 0) & 0x1)
+#define C_02803C_FORMAT 0xFFFFFFFE
+#define S_02803C_SW_MODE(x) (((unsigned)(x) & 0x1F) << 4)
+#define G_02803C_SW_MODE(x) (((x) >> 4) & 0x1F)
+#define C_02803C_SW_MODE 0xFFFFFE0F
+#define S_02803C_PARTIALLY_RESIDENT(x) (((unsigned)(x) & 0x1) << 12)
+#define G_02803C_PARTIALLY_RESIDENT(x) (((x) >> 12) & 0x1)
+#define C_02803C_PARTIALLY_RESIDENT 0xFFFFEFFF
+#define S_02803C_FAULT_BEHAVIOR(x) (((unsigned)(x) & 0x03) << 13)
+#define G_02803C_FAULT_BEHAVIOR(x) (((x) >> 13) & 0x03)
+#define C_02803C_FAULT_BEHAVIOR 0xFFFF9FFF
+#define S_02803C_ITERATE_FLUSH(x) (((unsigned)(x) & 0x1) << 15)
+#define G_02803C_ITERATE_FLUSH(x) (((x) >> 15) & 0x1)
+#define C_02803C_ITERATE_FLUSH 0xFFFF7FFF
+#define S_02803C_ALLOW_EXPCLEAR(x) (((unsigned)(x) & 0x1) << 27)
+#define G_02803C_ALLOW_EXPCLEAR(x) (((x) >> 27) & 0x1)
+#define C_02803C_ALLOW_EXPCLEAR 0xF7FFFFFF
+#define S_02803C_TILE_STENCIL_DISABLE(x) (((unsigned)(x) & 0x1) << 29)
+#define G_02803C_TILE_STENCIL_DISABLE(x) (((x) >> 29) & 0x1)
+#define C_02803C_TILE_STENCIL_DISABLE 0xDFFFFFFF
+#define S_02803C_CLEAR_DISALLOWED(x) (((unsigned)(x) & 0x1) << 30)
+#define G_02803C_CLEAR_DISALLOWED(x) (((x) >> 30) & 0x1)
+#define C_02803C_CLEAR_DISALLOWED 0xBFFFFFFF
+#define R_028040_DB_Z_READ_BASE 0x028040
+#define R_028044_DB_Z_READ_BASE_HI 0x028044
+#define S_028044_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028044_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_028044_BASE_HI 0xFFFFFF00
+#define R_028048_DB_STENCIL_READ_BASE 0x028048
+#define R_02804C_DB_STENCIL_READ_BASE_HI 0x02804C
+#define S_02804C_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_02804C_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_02804C_BASE_HI 0xFFFFFF00
+#define R_028050_DB_Z_WRITE_BASE 0x028050
+#define R_028054_DB_Z_WRITE_BASE_HI 0x028054
+#define S_028054_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028054_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_028054_BASE_HI 0xFFFFFF00
+#define R_028058_DB_STENCIL_WRITE_BASE 0x028058
+#define R_02805C_DB_STENCIL_WRITE_BASE_HI 0x02805C
+#define S_02805C_BASE_HI(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_02805C_BASE_HI(x) (((x) >> 0) & 0xFF)
+#define C_02805C_BASE_HI 0xFFFFFF00
+#define R_028060_DB_DFSM_CONTROL 0x028060
+#define S_028060_PUNCHOUT_MODE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028060_PUNCHOUT_MODE(x) (((x) >> 0) & 0x03)
+#define C_028060_PUNCHOUT_MODE 0xFFFFFFFC
+#define V_028060_AUTO 0
+#define V_028060_FORCE_ON 1
+#define V_028060_FORCE_OFF 2
+#define V_028060_RESERVED 3
+#define S_028060_POPS_DRAIN_PS_ON_OVERLAP(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028060_POPS_DRAIN_PS_ON_OVERLAP(x) (((x) >> 2) & 0x1)
+#define C_028060_POPS_DRAIN_PS_ON_OVERLAP 0xFFFFFFFB
+#define S_028060_DISALLOW_OVERFLOW(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028060_DISALLOW_OVERFLOW(x) (((x) >> 3) & 0x1)
+#define C_028060_DISALLOW_OVERFLOW 0xFFFFFFF7
+#define R_028064_DB_RENDER_FILTER 0x028064
+#define S_028064_PS_INVOKE_MASK(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028064_PS_INVOKE_MASK(x) (((x) >> 0) & 0xFFFF)
+#define C_028064_PS_INVOKE_MASK 0xFFFF0000
+#define R_028068_DB_Z_INFO2 0x028068
+#define S_028068_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028068_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_028068_EPITCH 0xFFFF0000
+#define R_02806C_DB_STENCIL_INFO2 0x02806C
+#define S_02806C_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_02806C_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_02806C_EPITCH 0xFFFF0000
+#define R_028080_TA_BC_BASE_ADDR 0x028080
+#define R_028084_TA_BC_BASE_ADDR_HI 0x028084
+#define S_028084_ADDRESS(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028084_ADDRESS(x) (((x) >> 0) & 0xFF)
+#define C_028084_ADDRESS 0xFFFFFF00
+#define R_0281E8_COHER_DEST_BASE_HI_0 0x0281E8
+#define S_0281E8_DEST_BASE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0281E8_DEST_BASE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_0281E8_DEST_BASE_HI_256B 0xFFFFFF00
+#define R_0281EC_COHER_DEST_BASE_HI_1 0x0281EC
+#define S_0281EC_DEST_BASE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0281EC_DEST_BASE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_0281EC_DEST_BASE_HI_256B 0xFFFFFF00
+#define R_0281F0_COHER_DEST_BASE_HI_2 0x0281F0
+#define S_0281F0_DEST_BASE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0281F0_DEST_BASE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_0281F0_DEST_BASE_HI_256B 0xFFFFFF00
+#define R_0281F4_COHER_DEST_BASE_HI_3 0x0281F4
+#define S_0281F4_DEST_BASE_HI_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0281F4_DEST_BASE_HI_256B(x) (((x) >> 0) & 0xFF)
+#define C_0281F4_DEST_BASE_HI_256B 0xFFFFFF00
+#define R_0281F8_COHER_DEST_BASE_2 0x0281F8
+#define R_0281FC_COHER_DEST_BASE_3 0x0281FC
+#define R_028200_PA_SC_WINDOW_OFFSET 0x028200
+#define S_028200_WINDOW_X_OFFSET(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028200_WINDOW_X_OFFSET(x) (((x) >> 0) & 0xFFFF)
+#define C_028200_WINDOW_X_OFFSET 0xFFFF0000
+#define S_028200_WINDOW_Y_OFFSET(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028200_WINDOW_Y_OFFSET(x) (((x) >> 16) & 0xFFFF)
+#define C_028200_WINDOW_Y_OFFSET 0x0000FFFF
+#define R_028204_PA_SC_WINDOW_SCISSOR_TL 0x028204
+#define S_028204_TL_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028204_TL_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028204_TL_X 0xFFFF8000
+#define S_028204_TL_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028204_TL_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028204_TL_Y 0x8000FFFF
+#define S_028204_WINDOW_OFFSET_DISABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028204_WINDOW_OFFSET_DISABLE(x) (((x) >> 31) & 0x1)
+#define C_028204_WINDOW_OFFSET_DISABLE 0x7FFFFFFF
+#define R_028208_PA_SC_WINDOW_SCISSOR_BR 0x028208
+#define S_028208_BR_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028208_BR_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028208_BR_X 0xFFFF8000
+#define S_028208_BR_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028208_BR_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028208_BR_Y 0x8000FFFF
+#define R_02820C_PA_SC_CLIPRECT_RULE 0x02820C
+#define S_02820C_CLIP_RULE(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_02820C_CLIP_RULE(x) (((x) >> 0) & 0xFFFF)
+#define C_02820C_CLIP_RULE 0xFFFF0000
+#define R_028210_PA_SC_CLIPRECT_0_TL 0x028210
+#define S_028210_TL_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028210_TL_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028210_TL_X 0xFFFF8000
+#define S_028210_TL_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028210_TL_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028210_TL_Y 0x8000FFFF
+#define R_028214_PA_SC_CLIPRECT_0_BR 0x028214
+#define S_028214_BR_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028214_BR_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028214_BR_X 0xFFFF8000
+#define S_028214_BR_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028214_BR_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028214_BR_Y 0x8000FFFF
+#define R_028218_PA_SC_CLIPRECT_1_TL 0x028218
+#define R_02821C_PA_SC_CLIPRECT_1_BR 0x02821C
+#define R_028220_PA_SC_CLIPRECT_2_TL 0x028220
+#define R_028224_PA_SC_CLIPRECT_2_BR 0x028224
+#define R_028228_PA_SC_CLIPRECT_3_TL 0x028228
+#define R_02822C_PA_SC_CLIPRECT_3_BR 0x02822C
+#define R_028230_PA_SC_EDGERULE 0x028230
+#define S_028230_ER_TRI(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028230_ER_TRI(x) (((x) >> 0) & 0x0F)
+#define C_028230_ER_TRI 0xFFFFFFF0
+#define S_028230_ER_POINT(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028230_ER_POINT(x) (((x) >> 4) & 0x0F)
+#define C_028230_ER_POINT 0xFFFFFF0F
+#define S_028230_ER_RECT(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028230_ER_RECT(x) (((x) >> 8) & 0x0F)
+#define C_028230_ER_RECT 0xFFFFF0FF
+#define S_028230_ER_LINE_LR(x) (((unsigned)(x) & 0x3F) << 12)
+#define G_028230_ER_LINE_LR(x) (((x) >> 12) & 0x3F)
+#define C_028230_ER_LINE_LR 0xFFFC0FFF
+#define S_028230_ER_LINE_RL(x) (((unsigned)(x) & 0x3F) << 18)
+#define G_028230_ER_LINE_RL(x) (((x) >> 18) & 0x3F)
+#define C_028230_ER_LINE_RL 0xFF03FFFF
+#define S_028230_ER_LINE_TB(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028230_ER_LINE_TB(x) (((x) >> 24) & 0x0F)
+#define C_028230_ER_LINE_TB 0xF0FFFFFF
+#define S_028230_ER_LINE_BT(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028230_ER_LINE_BT(x) (((x) >> 28) & 0x0F)
+#define C_028230_ER_LINE_BT 0x0FFFFFFF
+#define R_028234_PA_SU_HARDWARE_SCREEN_OFFSET 0x028234
+#define S_028234_HW_SCREEN_OFFSET_X(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_028234_HW_SCREEN_OFFSET_X(x) (((x) >> 0) & 0x1FF)
+#define C_028234_HW_SCREEN_OFFSET_X 0xFFFFFE00
+#define S_028234_HW_SCREEN_OFFSET_Y(x) (((unsigned)(x) & 0x1FF) << 16)
+#define G_028234_HW_SCREEN_OFFSET_Y(x) (((x) >> 16) & 0x1FF)
+#define C_028234_HW_SCREEN_OFFSET_Y 0xFE00FFFF
+#define R_028238_CB_TARGET_MASK 0x028238
+#define S_028238_TARGET0_ENABLE(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028238_TARGET0_ENABLE(x) (((x) >> 0) & 0x0F)
+#define C_028238_TARGET0_ENABLE 0xFFFFFFF0
+#define S_028238_TARGET1_ENABLE(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028238_TARGET1_ENABLE(x) (((x) >> 4) & 0x0F)
+#define C_028238_TARGET1_ENABLE 0xFFFFFF0F
+#define S_028238_TARGET2_ENABLE(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028238_TARGET2_ENABLE(x) (((x) >> 8) & 0x0F)
+#define C_028238_TARGET2_ENABLE 0xFFFFF0FF
+#define S_028238_TARGET3_ENABLE(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028238_TARGET3_ENABLE(x) (((x) >> 12) & 0x0F)
+#define C_028238_TARGET3_ENABLE 0xFFFF0FFF
+#define S_028238_TARGET4_ENABLE(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028238_TARGET4_ENABLE(x) (((x) >> 16) & 0x0F)
+#define C_028238_TARGET4_ENABLE 0xFFF0FFFF
+#define S_028238_TARGET5_ENABLE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028238_TARGET5_ENABLE(x) (((x) >> 20) & 0x0F)
+#define C_028238_TARGET5_ENABLE 0xFF0FFFFF
+#define S_028238_TARGET6_ENABLE(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028238_TARGET6_ENABLE(x) (((x) >> 24) & 0x0F)
+#define C_028238_TARGET6_ENABLE 0xF0FFFFFF
+#define S_028238_TARGET7_ENABLE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028238_TARGET7_ENABLE(x) (((x) >> 28) & 0x0F)
+#define C_028238_TARGET7_ENABLE 0x0FFFFFFF
+#define R_02823C_CB_SHADER_MASK 0x02823C
+#define S_02823C_OUTPUT0_ENABLE(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_02823C_OUTPUT0_ENABLE(x) (((x) >> 0) & 0x0F)
+#define C_02823C_OUTPUT0_ENABLE 0xFFFFFFF0
+#define S_02823C_OUTPUT1_ENABLE(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_02823C_OUTPUT1_ENABLE(x) (((x) >> 4) & 0x0F)
+#define C_02823C_OUTPUT1_ENABLE 0xFFFFFF0F
+#define S_02823C_OUTPUT2_ENABLE(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_02823C_OUTPUT2_ENABLE(x) (((x) >> 8) & 0x0F)
+#define C_02823C_OUTPUT2_ENABLE 0xFFFFF0FF
+#define S_02823C_OUTPUT3_ENABLE(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_02823C_OUTPUT3_ENABLE(x) (((x) >> 12) & 0x0F)
+#define C_02823C_OUTPUT3_ENABLE 0xFFFF0FFF
+#define S_02823C_OUTPUT4_ENABLE(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_02823C_OUTPUT4_ENABLE(x) (((x) >> 16) & 0x0F)
+#define C_02823C_OUTPUT4_ENABLE 0xFFF0FFFF
+#define S_02823C_OUTPUT5_ENABLE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_02823C_OUTPUT5_ENABLE(x) (((x) >> 20) & 0x0F)
+#define C_02823C_OUTPUT5_ENABLE 0xFF0FFFFF
+#define S_02823C_OUTPUT6_ENABLE(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_02823C_OUTPUT6_ENABLE(x) (((x) >> 24) & 0x0F)
+#define C_02823C_OUTPUT6_ENABLE 0xF0FFFFFF
+#define S_02823C_OUTPUT7_ENABLE(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_02823C_OUTPUT7_ENABLE(x) (((x) >> 28) & 0x0F)
+#define C_02823C_OUTPUT7_ENABLE 0x0FFFFFFF
+#define R_028240_PA_SC_GENERIC_SCISSOR_TL 0x028240
+#define S_028240_TL_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028240_TL_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028240_TL_X 0xFFFF8000
+#define S_028240_TL_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028240_TL_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028240_TL_Y 0x8000FFFF
+#define S_028240_WINDOW_OFFSET_DISABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028240_WINDOW_OFFSET_DISABLE(x) (((x) >> 31) & 0x1)
+#define C_028240_WINDOW_OFFSET_DISABLE 0x7FFFFFFF
+#define R_028244_PA_SC_GENERIC_SCISSOR_BR 0x028244
+#define S_028244_BR_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028244_BR_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028244_BR_X 0xFFFF8000
+#define S_028244_BR_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028244_BR_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028244_BR_Y 0x8000FFFF
+#define R_028248_COHER_DEST_BASE_0 0x028248
+#define R_02824C_COHER_DEST_BASE_1 0x02824C
+#define R_028250_PA_SC_VPORT_SCISSOR_0_TL 0x028250
+#define S_028250_TL_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028250_TL_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028250_TL_X 0xFFFF8000
+#define S_028250_TL_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028250_TL_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028250_TL_Y 0x8000FFFF
+#define S_028250_WINDOW_OFFSET_DISABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028250_WINDOW_OFFSET_DISABLE(x) (((x) >> 31) & 0x1)
+#define C_028250_WINDOW_OFFSET_DISABLE 0x7FFFFFFF
+#define R_028254_PA_SC_VPORT_SCISSOR_0_BR 0x028254
+#define S_028254_BR_X(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028254_BR_X(x) (((x) >> 0) & 0x7FFF)
+#define C_028254_BR_X 0xFFFF8000
+#define S_028254_BR_Y(x) (((unsigned)(x) & 0x7FFF) << 16)
+#define G_028254_BR_Y(x) (((x) >> 16) & 0x7FFF)
+#define C_028254_BR_Y 0x8000FFFF
+#define R_028258_PA_SC_VPORT_SCISSOR_1_TL 0x028258
+#define R_02825C_PA_SC_VPORT_SCISSOR_1_BR 0x02825C
+#define R_028260_PA_SC_VPORT_SCISSOR_2_TL 0x028260
+#define R_028264_PA_SC_VPORT_SCISSOR_2_BR 0x028264
+#define R_028268_PA_SC_VPORT_SCISSOR_3_TL 0x028268
+#define R_02826C_PA_SC_VPORT_SCISSOR_3_BR 0x02826C
+#define R_028270_PA_SC_VPORT_SCISSOR_4_TL 0x028270
+#define R_028274_PA_SC_VPORT_SCISSOR_4_BR 0x028274
+#define R_028278_PA_SC_VPORT_SCISSOR_5_TL 0x028278
+#define R_02827C_PA_SC_VPORT_SCISSOR_5_BR 0x02827C
+#define R_028280_PA_SC_VPORT_SCISSOR_6_TL 0x028280
+#define R_028284_PA_SC_VPORT_SCISSOR_6_BR 0x028284
+#define R_028288_PA_SC_VPORT_SCISSOR_7_TL 0x028288
+#define R_02828C_PA_SC_VPORT_SCISSOR_7_BR 0x02828C
+#define R_028290_PA_SC_VPORT_SCISSOR_8_TL 0x028290
+#define R_028294_PA_SC_VPORT_SCISSOR_8_BR 0x028294
+#define R_028298_PA_SC_VPORT_SCISSOR_9_TL 0x028298
+#define R_02829C_PA_SC_VPORT_SCISSOR_9_BR 0x02829C
+#define R_0282A0_PA_SC_VPORT_SCISSOR_10_TL 0x0282A0
+#define R_0282A4_PA_SC_VPORT_SCISSOR_10_BR 0x0282A4
+#define R_0282A8_PA_SC_VPORT_SCISSOR_11_TL 0x0282A8
+#define R_0282AC_PA_SC_VPORT_SCISSOR_11_BR 0x0282AC
+#define R_0282B0_PA_SC_VPORT_SCISSOR_12_TL 0x0282B0
+#define R_0282B4_PA_SC_VPORT_SCISSOR_12_BR 0x0282B4
+#define R_0282B8_PA_SC_VPORT_SCISSOR_13_TL 0x0282B8
+#define R_0282BC_PA_SC_VPORT_SCISSOR_13_BR 0x0282BC
+#define R_0282C0_PA_SC_VPORT_SCISSOR_14_TL 0x0282C0
+#define R_0282C4_PA_SC_VPORT_SCISSOR_14_BR 0x0282C4
+#define R_0282C8_PA_SC_VPORT_SCISSOR_15_TL 0x0282C8
+#define R_0282CC_PA_SC_VPORT_SCISSOR_15_BR 0x0282CC
+#define R_0282D0_PA_SC_VPORT_ZMIN_0 0x0282D0
+#define R_0282D4_PA_SC_VPORT_ZMAX_0 0x0282D4
+#define R_0282D8_PA_SC_VPORT_ZMIN_1 0x0282D8
+#define R_0282DC_PA_SC_VPORT_ZMAX_1 0x0282DC
+#define R_0282E0_PA_SC_VPORT_ZMIN_2 0x0282E0
+#define R_0282E4_PA_SC_VPORT_ZMAX_2 0x0282E4
+#define R_0282E8_PA_SC_VPORT_ZMIN_3 0x0282E8
+#define R_0282EC_PA_SC_VPORT_ZMAX_3 0x0282EC
+#define R_0282F0_PA_SC_VPORT_ZMIN_4 0x0282F0
+#define R_0282F4_PA_SC_VPORT_ZMAX_4 0x0282F4
+#define R_0282F8_PA_SC_VPORT_ZMIN_5 0x0282F8
+#define R_0282FC_PA_SC_VPORT_ZMAX_5 0x0282FC
+#define R_028300_PA_SC_VPORT_ZMIN_6 0x028300
+#define R_028304_PA_SC_VPORT_ZMAX_6 0x028304
+#define R_028308_PA_SC_VPORT_ZMIN_7 0x028308
+#define R_02830C_PA_SC_VPORT_ZMAX_7 0x02830C
+#define R_028310_PA_SC_VPORT_ZMIN_8 0x028310
+#define R_028314_PA_SC_VPORT_ZMAX_8 0x028314
+#define R_028318_PA_SC_VPORT_ZMIN_9 0x028318
+#define R_02831C_PA_SC_VPORT_ZMAX_9 0x02831C
+#define R_028320_PA_SC_VPORT_ZMIN_10 0x028320
+#define R_028324_PA_SC_VPORT_ZMAX_10 0x028324
+#define R_028328_PA_SC_VPORT_ZMIN_11 0x028328
+#define R_02832C_PA_SC_VPORT_ZMAX_11 0x02832C
+#define R_028330_PA_SC_VPORT_ZMIN_12 0x028330
+#define R_028334_PA_SC_VPORT_ZMAX_12 0x028334
+#define R_028338_PA_SC_VPORT_ZMIN_13 0x028338
+#define R_02833C_PA_SC_VPORT_ZMAX_13 0x02833C
+#define R_028340_PA_SC_VPORT_ZMIN_14 0x028340
+#define R_028344_PA_SC_VPORT_ZMAX_14 0x028344
+#define R_028348_PA_SC_VPORT_ZMIN_15 0x028348
+#define R_02834C_PA_SC_VPORT_ZMAX_15 0x02834C
+#define R_028350_PA_SC_RASTER_CONFIG 0x028350
+#define S_028350_RB_MAP_PKR0(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028350_RB_MAP_PKR0(x) (((x) >> 0) & 0x03)
+#define C_028350_RB_MAP_PKR0 0xFFFFFFFC
+#define S_028350_RB_MAP_PKR1(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028350_RB_MAP_PKR1(x) (((x) >> 2) & 0x03)
+#define C_028350_RB_MAP_PKR1 0xFFFFFFF3
+#define S_028350_RB_XSEL2(x) (((unsigned)(x) & 0x03) << 4)
+#define G_028350_RB_XSEL2(x) (((x) >> 4) & 0x03)
+#define C_028350_RB_XSEL2 0xFFFFFFCF
+#define S_028350_RB_XSEL(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028350_RB_XSEL(x) (((x) >> 6) & 0x1)
+#define C_028350_RB_XSEL 0xFFFFFFBF
+#define S_028350_RB_YSEL(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028350_RB_YSEL(x) (((x) >> 7) & 0x1)
+#define C_028350_RB_YSEL 0xFFFFFF7F
+#define S_028350_PKR_MAP(x) (((unsigned)(x) & 0x03) << 8)
+#define G_028350_PKR_MAP(x) (((x) >> 8) & 0x03)
+#define C_028350_PKR_MAP 0xFFFFFCFF
+#define S_028350_PKR_XSEL(x) (((unsigned)(x) & 0x03) << 10)
+#define G_028350_PKR_XSEL(x) (((x) >> 10) & 0x03)
+#define C_028350_PKR_XSEL 0xFFFFF3FF
+#define S_028350_PKR_YSEL(x) (((unsigned)(x) & 0x03) << 12)
+#define G_028350_PKR_YSEL(x) (((x) >> 12) & 0x03)
+#define C_028350_PKR_YSEL 0xFFFFCFFF
+#define S_028350_PKR_XSEL2(x) (((unsigned)(x) & 0x03) << 14)
+#define G_028350_PKR_XSEL2(x) (((x) >> 14) & 0x03)
+#define C_028350_PKR_XSEL2 0xFFFF3FFF
+#define S_028350_SC_MAP(x) (((unsigned)(x) & 0x03) << 16)
+#define G_028350_SC_MAP(x) (((x) >> 16) & 0x03)
+#define C_028350_SC_MAP 0xFFFCFFFF
+#define S_028350_SC_XSEL(x) (((unsigned)(x) & 0x03) << 18)
+#define G_028350_SC_XSEL(x) (((x) >> 18) & 0x03)
+#define C_028350_SC_XSEL 0xFFF3FFFF
+#define S_028350_SC_YSEL(x) (((unsigned)(x) & 0x03) << 20)
+#define G_028350_SC_YSEL(x) (((x) >> 20) & 0x03)
+#define C_028350_SC_YSEL 0xFFCFFFFF
+#define S_028350_SE_MAP(x) (((unsigned)(x) & 0x03) << 24)
+#define G_028350_SE_MAP(x) (((x) >> 24) & 0x03)
+#define C_028350_SE_MAP 0xFCFFFFFF
+#define S_028350_SE_XSEL_GFX9(x) (((unsigned)(x) & 0x07) << 26)
+#define G_028350_SE_XSEL_GFX9(x) (((x) >> 26) & 0x07)
+#define C_028350_SE_XSEL_GFX9 0xE3FFFFFF
+#define S_028350_SE_YSEL_GFX9(x) (((unsigned)(x) & 0x07) << 29)
+#define G_028350_SE_YSEL_GFX9(x) (((x) >> 29) & 0x07)
+#define C_028350_SE_YSEL_GFX9 0x1FFFFFFF
+#define R_028354_PA_SC_RASTER_CONFIG_1 0x028354
+#define S_028354_SE_PAIR_MAP(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028354_SE_PAIR_MAP(x) (((x) >> 0) & 0x03)
+#define C_028354_SE_PAIR_MAP 0xFFFFFFFC
+#define S_028354_SE_PAIR_XSEL_GFX9(x) (((unsigned)(x) & 0x07) << 2)
+#define G_028354_SE_PAIR_XSEL_GFX9(x) (((x) >> 2) & 0x07)
+#define C_028354_SE_PAIR_XSEL_GFX9 0xFFFFFFE3
+#define S_028354_SE_PAIR_YSEL_GFX9(x) (((unsigned)(x) & 0x07) << 5)
+#define G_028354_SE_PAIR_YSEL_GFX9(x) (((x) >> 5) & 0x07)
+#define C_028354_SE_PAIR_YSEL_GFX9 0xFFFFFF1F
+#define R_028358_PA_SC_SCREEN_EXTENT_CONTROL 0x028358
+#define S_028358_SLICE_EVEN_ENABLE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028358_SLICE_EVEN_ENABLE(x) (((x) >> 0) & 0x03)
+#define C_028358_SLICE_EVEN_ENABLE 0xFFFFFFFC
+#define S_028358_SLICE_ODD_ENABLE(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028358_SLICE_ODD_ENABLE(x) (((x) >> 2) & 0x03)
+#define C_028358_SLICE_ODD_ENABLE 0xFFFFFFF3
+#define R_02835C_PA_SC_TILE_STEERING_OVERRIDE 0x02835C
+#define S_02835C_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02835C_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_02835C_ENABLE 0xFFFFFFFE
+#define S_02835C_NUM_SE(x) (((unsigned)(x) & 0x03) << 1)
+#define G_02835C_NUM_SE(x) (((x) >> 1) & 0x03)
+#define C_02835C_NUM_SE 0xFFFFFFF9
+#define S_02835C_NUM_RB_PER_SE(x) (((unsigned)(x) & 0x03) << 5)
+#define G_02835C_NUM_RB_PER_SE(x) (((x) >> 5) & 0x03)
+#define C_02835C_NUM_RB_PER_SE 0xFFFFFF9F
+#define S_02835C_DISABLE_SRBSL_DB_OPTIMIZED_PACKING(x) (((unsigned)(x) & 0x1) << 8)
+#define G_02835C_DISABLE_SRBSL_DB_OPTIMIZED_PACKING(x) (((x) >> 8) & 0x1)
+#define C_02835C_DISABLE_SRBSL_DB_OPTIMIZED_PACKING 0xFFFFFEFF
+#define R_028360_CP_PERFMON_CNTX_CNTL 0x028360
+#define S_028360_PERFMON_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028360_PERFMON_ENABLE(x) (((x) >> 31) & 0x1)
+#define C_028360_PERFMON_ENABLE 0x7FFFFFFF
+#define R_0283A0_PA_SC_RIGHT_VERT_GRID 0x0283A0
+#define S_0283A0_LEFT_QTR(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0283A0_LEFT_QTR(x) (((x) >> 0) & 0xFF)
+#define C_0283A0_LEFT_QTR 0xFFFFFF00
+#define S_0283A0_LEFT_HALF(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_0283A0_LEFT_HALF(x) (((x) >> 8) & 0xFF)
+#define C_0283A0_LEFT_HALF 0xFFFF00FF
+#define S_0283A0_RIGHT_HALF(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_0283A0_RIGHT_HALF(x) (((x) >> 16) & 0xFF)
+#define C_0283A0_RIGHT_HALF 0xFF00FFFF
+#define S_0283A0_RIGHT_QTR(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_0283A0_RIGHT_QTR(x) (((x) >> 24) & 0xFF)
+#define C_0283A0_RIGHT_QTR 0x00FFFFFF
+#define R_0283A4_PA_SC_LEFT_VERT_GRID 0x0283A4
+#define S_0283A4_LEFT_QTR(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0283A4_LEFT_QTR(x) (((x) >> 0) & 0xFF)
+#define C_0283A4_LEFT_QTR 0xFFFFFF00
+#define S_0283A4_LEFT_HALF(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_0283A4_LEFT_HALF(x) (((x) >> 8) & 0xFF)
+#define C_0283A4_LEFT_HALF 0xFFFF00FF
+#define S_0283A4_RIGHT_HALF(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_0283A4_RIGHT_HALF(x) (((x) >> 16) & 0xFF)
+#define C_0283A4_RIGHT_HALF 0xFF00FFFF
+#define S_0283A4_RIGHT_QTR(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_0283A4_RIGHT_QTR(x) (((x) >> 24) & 0xFF)
+#define C_0283A4_RIGHT_QTR 0x00FFFFFF
+#define R_0283A8_PA_SC_HORIZ_GRID 0x0283A8
+#define S_0283A8_TOP_QTR(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0283A8_TOP_QTR(x) (((x) >> 0) & 0xFF)
+#define C_0283A8_TOP_QTR 0xFFFFFF00
+#define S_0283A8_TOP_HALF(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_0283A8_TOP_HALF(x) (((x) >> 8) & 0xFF)
+#define C_0283A8_TOP_HALF 0xFFFF00FF
+#define S_0283A8_BOT_HALF(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_0283A8_BOT_HALF(x) (((x) >> 16) & 0xFF)
+#define C_0283A8_BOT_HALF 0xFF00FFFF
+#define S_0283A8_BOT_QTR(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_0283A8_BOT_QTR(x) (((x) >> 24) & 0xFF)
+#define C_0283A8_BOT_QTR 0x00FFFFFF
+#define R_0283AC_PA_SC_FOV_WINDOW_LR 0x0283AC
+#define S_0283AC_LEFT_EYE_FOV_LEFT(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0283AC_LEFT_EYE_FOV_LEFT(x) (((x) >> 0) & 0xFF)
+#define C_0283AC_LEFT_EYE_FOV_LEFT 0xFFFFFF00
+#define S_0283AC_LEFT_EYE_FOV_RIGHT(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_0283AC_LEFT_EYE_FOV_RIGHT(x) (((x) >> 8) & 0xFF)
+#define C_0283AC_LEFT_EYE_FOV_RIGHT 0xFFFF00FF
+#define S_0283AC_RIGHT_EYE_FOV_LEFT(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_0283AC_RIGHT_EYE_FOV_LEFT(x) (((x) >> 16) & 0xFF)
+#define C_0283AC_RIGHT_EYE_FOV_LEFT 0xFF00FFFF
+#define S_0283AC_RIGHT_EYE_FOV_RIGHT(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_0283AC_RIGHT_EYE_FOV_RIGHT(x) (((x) >> 24) & 0xFF)
+#define C_0283AC_RIGHT_EYE_FOV_RIGHT 0x00FFFFFF
+#define R_0283B0_PA_SC_FOV_WINDOW_TB 0x0283B0
+#define S_0283B0_FOV_TOP(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0283B0_FOV_TOP(x) (((x) >> 0) & 0xFF)
+#define C_0283B0_FOV_TOP 0xFFFFFF00
+#define S_0283B0_FOV_BOT(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_0283B0_FOV_BOT(x) (((x) >> 8) & 0xFF)
+#define C_0283B0_FOV_BOT 0xFFFF00FF
+#define R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX 0x02840C
+#define R_028414_CB_BLEND_RED 0x028414
+#define R_028418_CB_BLEND_GREEN 0x028418
+#define R_02841C_CB_BLEND_BLUE 0x02841C
+#define R_028420_CB_BLEND_ALPHA 0x028420
+#define R_028424_CB_DCC_CONTROL 0x028424
+#define S_028424_OVERWRITE_COMBINER_DISABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028424_OVERWRITE_COMBINER_DISABLE(x) (((x) >> 0) & 0x1)
+#define C_028424_OVERWRITE_COMBINER_DISABLE 0xFFFFFFFE
+#define S_028424_OVERWRITE_COMBINER_MRT_SHARING_DISABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028424_OVERWRITE_COMBINER_MRT_SHARING_DISABLE(x) (((x) >> 1) & 0x1)
+#define C_028424_OVERWRITE_COMBINER_MRT_SHARING_DISABLE 0xFFFFFFFD
+#define S_028424_OVERWRITE_COMBINER_WATERMARK(x) (((unsigned)(x) & 0x1F) << 2)
+#define G_028424_OVERWRITE_COMBINER_WATERMARK(x) (((x) >> 2) & 0x1F)
+#define C_028424_OVERWRITE_COMBINER_WATERMARK 0xFFFFFF83
+#define R_02842C_DB_STENCIL_CONTROL 0x02842C
+#define S_02842C_STENCILFAIL(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_02842C_STENCILFAIL(x) (((x) >> 0) & 0x0F)
+#define C_02842C_STENCILFAIL 0xFFFFFFF0
+#define S_02842C_STENCILZPASS(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_02842C_STENCILZPASS(x) (((x) >> 4) & 0x0F)
+#define C_02842C_STENCILZPASS 0xFFFFFF0F
+#define S_02842C_STENCILZFAIL(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_02842C_STENCILZFAIL(x) (((x) >> 8) & 0x0F)
+#define C_02842C_STENCILZFAIL 0xFFFFF0FF
+#define S_02842C_STENCILFAIL_BF(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_02842C_STENCILFAIL_BF(x) (((x) >> 12) & 0x0F)
+#define C_02842C_STENCILFAIL_BF 0xFFFF0FFF
+#define S_02842C_STENCILZPASS_BF(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_02842C_STENCILZPASS_BF(x) (((x) >> 16) & 0x0F)
+#define C_02842C_STENCILZPASS_BF 0xFFF0FFFF
+#define S_02842C_STENCILZFAIL_BF(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_02842C_STENCILZFAIL_BF(x) (((x) >> 20) & 0x0F)
+#define C_02842C_STENCILZFAIL_BF 0xFF0FFFFF
+#define R_028430_DB_STENCILREFMASK 0x028430
+#define S_028430_STENCILTESTVAL(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028430_STENCILTESTVAL(x) (((x) >> 0) & 0xFF)
+#define C_028430_STENCILTESTVAL 0xFFFFFF00
+#define S_028430_STENCILMASK(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028430_STENCILMASK(x) (((x) >> 8) & 0xFF)
+#define C_028430_STENCILMASK 0xFFFF00FF
+#define S_028430_STENCILWRITEMASK(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028430_STENCILWRITEMASK(x) (((x) >> 16) & 0xFF)
+#define C_028430_STENCILWRITEMASK 0xFF00FFFF
+#define S_028430_STENCILOPVAL(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_028430_STENCILOPVAL(x) (((x) >> 24) & 0xFF)
+#define C_028430_STENCILOPVAL 0x00FFFFFF
+#define R_028434_DB_STENCILREFMASK_BF 0x028434
+#define S_028434_STENCILTESTVAL_BF(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028434_STENCILTESTVAL_BF(x) (((x) >> 0) & 0xFF)
+#define C_028434_STENCILTESTVAL_BF 0xFFFFFF00
+#define S_028434_STENCILMASK_BF(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028434_STENCILMASK_BF(x) (((x) >> 8) & 0xFF)
+#define C_028434_STENCILMASK_BF 0xFFFF00FF
+#define S_028434_STENCILWRITEMASK_BF(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028434_STENCILWRITEMASK_BF(x) (((x) >> 16) & 0xFF)
+#define C_028434_STENCILWRITEMASK_BF 0xFF00FFFF
+#define S_028434_STENCILOPVAL_BF(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_028434_STENCILOPVAL_BF(x) (((x) >> 24) & 0xFF)
+#define C_028434_STENCILOPVAL_BF 0x00FFFFFF
+#define R_02843C_PA_CL_VPORT_XSCALE 0x02843C
+#define R_028440_PA_CL_VPORT_XOFFSET 0x028440
+#define R_028444_PA_CL_VPORT_YSCALE 0x028444
+#define R_028448_PA_CL_VPORT_YOFFSET 0x028448
+#define R_02844C_PA_CL_VPORT_ZSCALE 0x02844C
+#define R_028450_PA_CL_VPORT_ZOFFSET 0x028450
+#define R_028454_PA_CL_VPORT_XSCALE_1 0x028454
+#define R_028458_PA_CL_VPORT_XOFFSET_1 0x028458
+#define R_02845C_PA_CL_VPORT_YSCALE_1 0x02845C
+#define R_028460_PA_CL_VPORT_YOFFSET_1 0x028460
+#define R_028464_PA_CL_VPORT_ZSCALE_1 0x028464
+#define R_028468_PA_CL_VPORT_ZOFFSET_1 0x028468
+#define R_02846C_PA_CL_VPORT_XSCALE_2 0x02846C
+#define R_028470_PA_CL_VPORT_XOFFSET_2 0x028470
+#define R_028474_PA_CL_VPORT_YSCALE_2 0x028474
+#define R_028478_PA_CL_VPORT_YOFFSET_2 0x028478
+#define R_02847C_PA_CL_VPORT_ZSCALE_2 0x02847C
+#define R_028480_PA_CL_VPORT_ZOFFSET_2 0x028480
+#define R_028484_PA_CL_VPORT_XSCALE_3 0x028484
+#define R_028488_PA_CL_VPORT_XOFFSET_3 0x028488
+#define R_02848C_PA_CL_VPORT_YSCALE_3 0x02848C
+#define R_028490_PA_CL_VPORT_YOFFSET_3 0x028490
+#define R_028494_PA_CL_VPORT_ZSCALE_3 0x028494
+#define R_028498_PA_CL_VPORT_ZOFFSET_3 0x028498
+#define R_02849C_PA_CL_VPORT_XSCALE_4 0x02849C
+#define R_0284A0_PA_CL_VPORT_XOFFSET_4 0x0284A0
+#define R_0284A4_PA_CL_VPORT_YSCALE_4 0x0284A4
+#define R_0284A8_PA_CL_VPORT_YOFFSET_4 0x0284A8
+#define R_0284AC_PA_CL_VPORT_ZSCALE_4 0x0284AC
+#define R_0284B0_PA_CL_VPORT_ZOFFSET_4 0x0284B0
+#define R_0284B4_PA_CL_VPORT_XSCALE_5 0x0284B4
+#define R_0284B8_PA_CL_VPORT_XOFFSET_5 0x0284B8
+#define R_0284BC_PA_CL_VPORT_YSCALE_5 0x0284BC
+#define R_0284C0_PA_CL_VPORT_YOFFSET_5 0x0284C0
+#define R_0284C4_PA_CL_VPORT_ZSCALE_5 0x0284C4
+#define R_0284C8_PA_CL_VPORT_ZOFFSET_5 0x0284C8
+#define R_0284CC_PA_CL_VPORT_XSCALE_6 0x0284CC
+#define R_0284D0_PA_CL_VPORT_XOFFSET_6 0x0284D0
+#define R_0284D4_PA_CL_VPORT_YSCALE_6 0x0284D4
+#define R_0284D8_PA_CL_VPORT_YOFFSET_6 0x0284D8
+#define R_0284DC_PA_CL_VPORT_ZSCALE_6 0x0284DC
+#define R_0284E0_PA_CL_VPORT_ZOFFSET_6 0x0284E0
+#define R_0284E4_PA_CL_VPORT_XSCALE_7 0x0284E4
+#define R_0284E8_PA_CL_VPORT_XOFFSET_7 0x0284E8
+#define R_0284EC_PA_CL_VPORT_YSCALE_7 0x0284EC
+#define R_0284F0_PA_CL_VPORT_YOFFSET_7 0x0284F0
+#define R_0284F4_PA_CL_VPORT_ZSCALE_7 0x0284F4
+#define R_0284F8_PA_CL_VPORT_ZOFFSET_7 0x0284F8
+#define R_0284FC_PA_CL_VPORT_XSCALE_8 0x0284FC
+#define R_028500_PA_CL_VPORT_XOFFSET_8 0x028500
+#define R_028504_PA_CL_VPORT_YSCALE_8 0x028504
+#define R_028508_PA_CL_VPORT_YOFFSET_8 0x028508
+#define R_02850C_PA_CL_VPORT_ZSCALE_8 0x02850C
+#define R_028510_PA_CL_VPORT_ZOFFSET_8 0x028510
+#define R_028514_PA_CL_VPORT_XSCALE_9 0x028514
+#define R_028518_PA_CL_VPORT_XOFFSET_9 0x028518
+#define R_02851C_PA_CL_VPORT_YSCALE_9 0x02851C
+#define R_028520_PA_CL_VPORT_YOFFSET_9 0x028520
+#define R_028524_PA_CL_VPORT_ZSCALE_9 0x028524
+#define R_028528_PA_CL_VPORT_ZOFFSET_9 0x028528
+#define R_02852C_PA_CL_VPORT_XSCALE_10 0x02852C
+#define R_028530_PA_CL_VPORT_XOFFSET_10 0x028530
+#define R_028534_PA_CL_VPORT_YSCALE_10 0x028534
+#define R_028538_PA_CL_VPORT_YOFFSET_10 0x028538
+#define R_02853C_PA_CL_VPORT_ZSCALE_10 0x02853C
+#define R_028540_PA_CL_VPORT_ZOFFSET_10 0x028540
+#define R_028544_PA_CL_VPORT_XSCALE_11 0x028544
+#define R_028548_PA_CL_VPORT_XOFFSET_11 0x028548
+#define R_02854C_PA_CL_VPORT_YSCALE_11 0x02854C
+#define R_028550_PA_CL_VPORT_YOFFSET_11 0x028550
+#define R_028554_PA_CL_VPORT_ZSCALE_11 0x028554
+#define R_028558_PA_CL_VPORT_ZOFFSET_11 0x028558
+#define R_02855C_PA_CL_VPORT_XSCALE_12 0x02855C
+#define R_028560_PA_CL_VPORT_XOFFSET_12 0x028560
+#define R_028564_PA_CL_VPORT_YSCALE_12 0x028564
+#define R_028568_PA_CL_VPORT_YOFFSET_12 0x028568
+#define R_02856C_PA_CL_VPORT_ZSCALE_12 0x02856C
+#define R_028570_PA_CL_VPORT_ZOFFSET_12 0x028570
+#define R_028574_PA_CL_VPORT_XSCALE_13 0x028574
+#define R_028578_PA_CL_VPORT_XOFFSET_13 0x028578
+#define R_02857C_PA_CL_VPORT_YSCALE_13 0x02857C
+#define R_028580_PA_CL_VPORT_YOFFSET_13 0x028580
+#define R_028584_PA_CL_VPORT_ZSCALE_13 0x028584
+#define R_028588_PA_CL_VPORT_ZOFFSET_13 0x028588
+#define R_02858C_PA_CL_VPORT_XSCALE_14 0x02858C
+#define R_028590_PA_CL_VPORT_XOFFSET_14 0x028590
+#define R_028594_PA_CL_VPORT_YSCALE_14 0x028594
+#define R_028598_PA_CL_VPORT_YOFFSET_14 0x028598
+#define R_02859C_PA_CL_VPORT_ZSCALE_14 0x02859C
+#define R_0285A0_PA_CL_VPORT_ZOFFSET_14 0x0285A0
+#define R_0285A4_PA_CL_VPORT_XSCALE_15 0x0285A4
+#define R_0285A8_PA_CL_VPORT_XOFFSET_15 0x0285A8
+#define R_0285AC_PA_CL_VPORT_YSCALE_15 0x0285AC
+#define R_0285B0_PA_CL_VPORT_YOFFSET_15 0x0285B0
+#define R_0285B4_PA_CL_VPORT_ZSCALE_15 0x0285B4
+#define R_0285B8_PA_CL_VPORT_ZOFFSET_15 0x0285B8
+#define R_0285BC_PA_CL_UCP_0_X 0x0285BC
+#define R_0285C0_PA_CL_UCP_0_Y 0x0285C0
+#define R_0285C4_PA_CL_UCP_0_Z 0x0285C4
+#define R_0285C8_PA_CL_UCP_0_W 0x0285C8
+#define R_0285CC_PA_CL_UCP_1_X 0x0285CC
+#define R_0285D0_PA_CL_UCP_1_Y 0x0285D0
+#define R_0285D4_PA_CL_UCP_1_Z 0x0285D4
+#define R_0285D8_PA_CL_UCP_1_W 0x0285D8
+#define R_0285DC_PA_CL_UCP_2_X 0x0285DC
+#define R_0285E0_PA_CL_UCP_2_Y 0x0285E0
+#define R_0285E4_PA_CL_UCP_2_Z 0x0285E4
+#define R_0285E8_PA_CL_UCP_2_W 0x0285E8
+#define R_0285EC_PA_CL_UCP_3_X 0x0285EC
+#define R_0285F0_PA_CL_UCP_3_Y 0x0285F0
+#define R_0285F4_PA_CL_UCP_3_Z 0x0285F4
+#define R_0285F8_PA_CL_UCP_3_W 0x0285F8
+#define R_0285FC_PA_CL_UCP_4_X 0x0285FC
+#define R_028600_PA_CL_UCP_4_Y 0x028600
+#define R_028604_PA_CL_UCP_4_Z 0x028604
+#define R_028608_PA_CL_UCP_4_W 0x028608
+#define R_02860C_PA_CL_UCP_5_X 0x02860C
+#define R_028610_PA_CL_UCP_5_Y 0x028610
+#define R_028614_PA_CL_UCP_5_Z 0x028614
+#define R_028618_PA_CL_UCP_5_W 0x028618
+#define R_028644_SPI_PS_INPUT_CNTL_0 0x028644
+#define S_028644_OFFSET(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_028644_OFFSET(x) (((x) >> 0) & 0x3F)
+#define C_028644_OFFSET 0xFFFFFFC0
+#define S_028644_DEFAULT_VAL(x) (((unsigned)(x) & 0x03) << 8)
+#define G_028644_DEFAULT_VAL(x) (((x) >> 8) & 0x03)
+#define C_028644_DEFAULT_VAL 0xFFFFFCFF
+#define S_028644_FLAT_SHADE(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028644_FLAT_SHADE(x) (((x) >> 10) & 0x1)
+#define C_028644_FLAT_SHADE 0xFFFFFBFF
+#define S_028644_CYL_WRAP(x) (((unsigned)(x) & 0x0F) << 13)
+#define G_028644_CYL_WRAP(x) (((x) >> 13) & 0x0F)
+#define C_028644_CYL_WRAP 0xFFFE1FFF
+#define S_028644_PT_SPRITE_TEX(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028644_PT_SPRITE_TEX(x) (((x) >> 17) & 0x1)
+#define C_028644_PT_SPRITE_TEX 0xFFFDFFFF
+#define S_028644_DUP(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028644_DUP(x) (((x) >> 18) & 0x1)
+#define C_028644_DUP 0xFFFBFFFF
+#define S_028644_FP16_INTERP_MODE(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028644_FP16_INTERP_MODE(x) (((x) >> 19) & 0x1)
+#define C_028644_FP16_INTERP_MODE 0xFFF7FFFF
+#define S_028644_USE_DEFAULT_ATTR1(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028644_USE_DEFAULT_ATTR1(x) (((x) >> 20) & 0x1)
+#define C_028644_USE_DEFAULT_ATTR1 0xFFEFFFFF
+#define S_028644_DEFAULT_VAL_ATTR1(x) (((unsigned)(x) & 0x03) << 21)
+#define G_028644_DEFAULT_VAL_ATTR1(x) (((x) >> 21) & 0x03)
+#define C_028644_DEFAULT_VAL_ATTR1 0xFF9FFFFF
+#define S_028644_PT_SPRITE_TEX_ATTR1(x) (((unsigned)(x) & 0x1) << 23)
+#define G_028644_PT_SPRITE_TEX_ATTR1(x) (((x) >> 23) & 0x1)
+#define C_028644_PT_SPRITE_TEX_ATTR1 0xFF7FFFFF
+#define S_028644_ATTR0_VALID(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028644_ATTR0_VALID(x) (((x) >> 24) & 0x1)
+#define C_028644_ATTR0_VALID 0xFEFFFFFF
+#define S_028644_ATTR1_VALID(x) (((unsigned)(x) & 0x1) << 25)
+#define G_028644_ATTR1_VALID(x) (((x) >> 25) & 0x1)
+#define C_028644_ATTR1_VALID 0xFDFFFFFF
+#define R_028648_SPI_PS_INPUT_CNTL_1 0x028648
+#define R_02864C_SPI_PS_INPUT_CNTL_2 0x02864C
+#define R_028650_SPI_PS_INPUT_CNTL_3 0x028650
+#define R_028654_SPI_PS_INPUT_CNTL_4 0x028654
+#define R_028658_SPI_PS_INPUT_CNTL_5 0x028658
+#define R_02865C_SPI_PS_INPUT_CNTL_6 0x02865C
+#define R_028660_SPI_PS_INPUT_CNTL_7 0x028660
+#define R_028664_SPI_PS_INPUT_CNTL_8 0x028664
+#define R_028668_SPI_PS_INPUT_CNTL_9 0x028668
+#define R_02866C_SPI_PS_INPUT_CNTL_10 0x02866C
+#define R_028670_SPI_PS_INPUT_CNTL_11 0x028670
+#define R_028674_SPI_PS_INPUT_CNTL_12 0x028674
+#define R_028678_SPI_PS_INPUT_CNTL_13 0x028678
+#define R_02867C_SPI_PS_INPUT_CNTL_14 0x02867C
+#define R_028680_SPI_PS_INPUT_CNTL_15 0x028680
+#define R_028684_SPI_PS_INPUT_CNTL_16 0x028684
+#define R_028688_SPI_PS_INPUT_CNTL_17 0x028688
+#define R_02868C_SPI_PS_INPUT_CNTL_18 0x02868C
+#define R_028690_SPI_PS_INPUT_CNTL_19 0x028690
+#define R_028694_SPI_PS_INPUT_CNTL_20 0x028694
+#define R_028698_SPI_PS_INPUT_CNTL_21 0x028698
+#define R_02869C_SPI_PS_INPUT_CNTL_22 0x02869C
+#define R_0286A0_SPI_PS_INPUT_CNTL_23 0x0286A0
+#define R_0286A4_SPI_PS_INPUT_CNTL_24 0x0286A4
+#define R_0286A8_SPI_PS_INPUT_CNTL_25 0x0286A8
+#define R_0286AC_SPI_PS_INPUT_CNTL_26 0x0286AC
+#define R_0286B0_SPI_PS_INPUT_CNTL_27 0x0286B0
+#define R_0286B4_SPI_PS_INPUT_CNTL_28 0x0286B4
+#define R_0286B8_SPI_PS_INPUT_CNTL_29 0x0286B8
+#define R_0286BC_SPI_PS_INPUT_CNTL_30 0x0286BC
+#define R_0286C0_SPI_PS_INPUT_CNTL_31 0x0286C0
+#define R_0286C4_SPI_VS_OUT_CONFIG 0x0286C4
+#define S_0286C4_VS_EXPORT_COUNT(x) (((unsigned)(x) & 0x1F) << 1)
+#define G_0286C4_VS_EXPORT_COUNT(x) (((x) >> 1) & 0x1F)
+#define C_0286C4_VS_EXPORT_COUNT 0xFFFFFFC1
+#define S_0286C4_VS_HALF_PACK(x) (((unsigned)(x) & 0x1) << 6)
+#define G_0286C4_VS_HALF_PACK(x) (((x) >> 6) & 0x1)
+#define C_0286C4_VS_HALF_PACK 0xFFFFFFBF
+#define R_0286CC_SPI_PS_INPUT_ENA 0x0286CC
+#define S_0286CC_PERSP_SAMPLE_ENA(x) (((unsigned)(x) & 0x1) << 0)
+#define G_0286CC_PERSP_SAMPLE_ENA(x) (((x) >> 0) & 0x1)
+#define C_0286CC_PERSP_SAMPLE_ENA 0xFFFFFFFE
+#define S_0286CC_PERSP_CENTER_ENA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_0286CC_PERSP_CENTER_ENA(x) (((x) >> 1) & 0x1)
+#define C_0286CC_PERSP_CENTER_ENA 0xFFFFFFFD
+#define S_0286CC_PERSP_CENTROID_ENA(x) (((unsigned)(x) & 0x1) << 2)
+#define G_0286CC_PERSP_CENTROID_ENA(x) (((x) >> 2) & 0x1)
+#define C_0286CC_PERSP_CENTROID_ENA 0xFFFFFFFB
+#define S_0286CC_PERSP_PULL_MODEL_ENA(x) (((unsigned)(x) & 0x1) << 3)
+#define G_0286CC_PERSP_PULL_MODEL_ENA(x) (((x) >> 3) & 0x1)
+#define C_0286CC_PERSP_PULL_MODEL_ENA 0xFFFFFFF7
+#define S_0286CC_LINEAR_SAMPLE_ENA(x) (((unsigned)(x) & 0x1) << 4)
+#define G_0286CC_LINEAR_SAMPLE_ENA(x) (((x) >> 4) & 0x1)
+#define C_0286CC_LINEAR_SAMPLE_ENA 0xFFFFFFEF
+#define S_0286CC_LINEAR_CENTER_ENA(x) (((unsigned)(x) & 0x1) << 5)
+#define G_0286CC_LINEAR_CENTER_ENA(x) (((x) >> 5) & 0x1)
+#define C_0286CC_LINEAR_CENTER_ENA 0xFFFFFFDF
+#define S_0286CC_LINEAR_CENTROID_ENA(x) (((unsigned)(x) & 0x1) << 6)
+#define G_0286CC_LINEAR_CENTROID_ENA(x) (((x) >> 6) & 0x1)
+#define C_0286CC_LINEAR_CENTROID_ENA 0xFFFFFFBF
+#define S_0286CC_LINE_STIPPLE_TEX_ENA(x) (((unsigned)(x) & 0x1) << 7)
+#define G_0286CC_LINE_STIPPLE_TEX_ENA(x) (((x) >> 7) & 0x1)
+#define C_0286CC_LINE_STIPPLE_TEX_ENA 0xFFFFFF7F
+#define S_0286CC_POS_X_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 8)
+#define G_0286CC_POS_X_FLOAT_ENA(x) (((x) >> 8) & 0x1)
+#define C_0286CC_POS_X_FLOAT_ENA 0xFFFFFEFF
+#define S_0286CC_POS_Y_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 9)
+#define G_0286CC_POS_Y_FLOAT_ENA(x) (((x) >> 9) & 0x1)
+#define C_0286CC_POS_Y_FLOAT_ENA 0xFFFFFDFF
+#define S_0286CC_POS_Z_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 10)
+#define G_0286CC_POS_Z_FLOAT_ENA(x) (((x) >> 10) & 0x1)
+#define C_0286CC_POS_Z_FLOAT_ENA 0xFFFFFBFF
+#define S_0286CC_POS_W_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 11)
+#define G_0286CC_POS_W_FLOAT_ENA(x) (((x) >> 11) & 0x1)
+#define C_0286CC_POS_W_FLOAT_ENA 0xFFFFF7FF
+#define S_0286CC_FRONT_FACE_ENA(x) (((unsigned)(x) & 0x1) << 12)
+#define G_0286CC_FRONT_FACE_ENA(x) (((x) >> 12) & 0x1)
+#define C_0286CC_FRONT_FACE_ENA 0xFFFFEFFF
+#define S_0286CC_ANCILLARY_ENA(x) (((unsigned)(x) & 0x1) << 13)
+#define G_0286CC_ANCILLARY_ENA(x) (((x) >> 13) & 0x1)
+#define C_0286CC_ANCILLARY_ENA 0xFFFFDFFF
+#define S_0286CC_SAMPLE_COVERAGE_ENA(x) (((unsigned)(x) & 0x1) << 14)
+#define G_0286CC_SAMPLE_COVERAGE_ENA(x) (((x) >> 14) & 0x1)
+#define C_0286CC_SAMPLE_COVERAGE_ENA 0xFFFFBFFF
+#define S_0286CC_POS_FIXED_PT_ENA(x) (((unsigned)(x) & 0x1) << 15)
+#define G_0286CC_POS_FIXED_PT_ENA(x) (((x) >> 15) & 0x1)
+#define C_0286CC_POS_FIXED_PT_ENA 0xFFFF7FFF
+#define R_0286D0_SPI_PS_INPUT_ADDR 0x0286D0
+#define S_0286D0_PERSP_SAMPLE_ENA(x) (((unsigned)(x) & 0x1) << 0)
+#define G_0286D0_PERSP_SAMPLE_ENA(x) (((x) >> 0) & 0x1)
+#define C_0286D0_PERSP_SAMPLE_ENA 0xFFFFFFFE
+#define S_0286D0_PERSP_CENTER_ENA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_0286D0_PERSP_CENTER_ENA(x) (((x) >> 1) & 0x1)
+#define C_0286D0_PERSP_CENTER_ENA 0xFFFFFFFD
+#define S_0286D0_PERSP_CENTROID_ENA(x) (((unsigned)(x) & 0x1) << 2)
+#define G_0286D0_PERSP_CENTROID_ENA(x) (((x) >> 2) & 0x1)
+#define C_0286D0_PERSP_CENTROID_ENA 0xFFFFFFFB
+#define S_0286D0_PERSP_PULL_MODEL_ENA(x) (((unsigned)(x) & 0x1) << 3)
+#define G_0286D0_PERSP_PULL_MODEL_ENA(x) (((x) >> 3) & 0x1)
+#define C_0286D0_PERSP_PULL_MODEL_ENA 0xFFFFFFF7
+#define S_0286D0_LINEAR_SAMPLE_ENA(x) (((unsigned)(x) & 0x1) << 4)
+#define G_0286D0_LINEAR_SAMPLE_ENA(x) (((x) >> 4) & 0x1)
+#define C_0286D0_LINEAR_SAMPLE_ENA 0xFFFFFFEF
+#define S_0286D0_LINEAR_CENTER_ENA(x) (((unsigned)(x) & 0x1) << 5)
+#define G_0286D0_LINEAR_CENTER_ENA(x) (((x) >> 5) & 0x1)
+#define C_0286D0_LINEAR_CENTER_ENA 0xFFFFFFDF
+#define S_0286D0_LINEAR_CENTROID_ENA(x) (((unsigned)(x) & 0x1) << 6)
+#define G_0286D0_LINEAR_CENTROID_ENA(x) (((x) >> 6) & 0x1)
+#define C_0286D0_LINEAR_CENTROID_ENA 0xFFFFFFBF
+#define S_0286D0_LINE_STIPPLE_TEX_ENA(x) (((unsigned)(x) & 0x1) << 7)
+#define G_0286D0_LINE_STIPPLE_TEX_ENA(x) (((x) >> 7) & 0x1)
+#define C_0286D0_LINE_STIPPLE_TEX_ENA 0xFFFFFF7F
+#define S_0286D0_POS_X_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 8)
+#define G_0286D0_POS_X_FLOAT_ENA(x) (((x) >> 8) & 0x1)
+#define C_0286D0_POS_X_FLOAT_ENA 0xFFFFFEFF
+#define S_0286D0_POS_Y_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 9)
+#define G_0286D0_POS_Y_FLOAT_ENA(x) (((x) >> 9) & 0x1)
+#define C_0286D0_POS_Y_FLOAT_ENA 0xFFFFFDFF
+#define S_0286D0_POS_Z_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 10)
+#define G_0286D0_POS_Z_FLOAT_ENA(x) (((x) >> 10) & 0x1)
+#define C_0286D0_POS_Z_FLOAT_ENA 0xFFFFFBFF
+#define S_0286D0_POS_W_FLOAT_ENA(x) (((unsigned)(x) & 0x1) << 11)
+#define G_0286D0_POS_W_FLOAT_ENA(x) (((x) >> 11) & 0x1)
+#define C_0286D0_POS_W_FLOAT_ENA 0xFFFFF7FF
+#define S_0286D0_FRONT_FACE_ENA(x) (((unsigned)(x) & 0x1) << 12)
+#define G_0286D0_FRONT_FACE_ENA(x) (((x) >> 12) & 0x1)
+#define C_0286D0_FRONT_FACE_ENA 0xFFFFEFFF
+#define S_0286D0_ANCILLARY_ENA(x) (((unsigned)(x) & 0x1) << 13)
+#define G_0286D0_ANCILLARY_ENA(x) (((x) >> 13) & 0x1)
+#define C_0286D0_ANCILLARY_ENA 0xFFFFDFFF
+#define S_0286D0_SAMPLE_COVERAGE_ENA(x) (((unsigned)(x) & 0x1) << 14)
+#define G_0286D0_SAMPLE_COVERAGE_ENA(x) (((x) >> 14) & 0x1)
+#define C_0286D0_SAMPLE_COVERAGE_ENA 0xFFFFBFFF
+#define S_0286D0_POS_FIXED_PT_ENA(x) (((unsigned)(x) & 0x1) << 15)
+#define G_0286D0_POS_FIXED_PT_ENA(x) (((x) >> 15) & 0x1)
+#define C_0286D0_POS_FIXED_PT_ENA 0xFFFF7FFF
+#define R_0286D4_SPI_INTERP_CONTROL_0 0x0286D4
+#define S_0286D4_FLAT_SHADE_ENA(x) (((unsigned)(x) & 0x1) << 0)
+#define G_0286D4_FLAT_SHADE_ENA(x) (((x) >> 0) & 0x1)
+#define C_0286D4_FLAT_SHADE_ENA 0xFFFFFFFE
+#define S_0286D4_PNT_SPRITE_ENA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_0286D4_PNT_SPRITE_ENA(x) (((x) >> 1) & 0x1)
+#define C_0286D4_PNT_SPRITE_ENA 0xFFFFFFFD
+#define S_0286D4_PNT_SPRITE_OVRD_X(x) (((unsigned)(x) & 0x07) << 2)
+#define G_0286D4_PNT_SPRITE_OVRD_X(x) (((x) >> 2) & 0x07)
+#define C_0286D4_PNT_SPRITE_OVRD_X 0xFFFFFFE3
+#define S_0286D4_PNT_SPRITE_OVRD_Y(x) (((unsigned)(x) & 0x07) << 5)
+#define G_0286D4_PNT_SPRITE_OVRD_Y(x) (((x) >> 5) & 0x07)
+#define C_0286D4_PNT_SPRITE_OVRD_Y 0xFFFFFF1F
+#define S_0286D4_PNT_SPRITE_OVRD_Z(x) (((unsigned)(x) & 0x07) << 8)
+#define G_0286D4_PNT_SPRITE_OVRD_Z(x) (((x) >> 8) & 0x07)
+#define C_0286D4_PNT_SPRITE_OVRD_Z 0xFFFFF8FF
+#define S_0286D4_PNT_SPRITE_OVRD_W(x) (((unsigned)(x) & 0x07) << 11)
+#define G_0286D4_PNT_SPRITE_OVRD_W(x) (((x) >> 11) & 0x07)
+#define C_0286D4_PNT_SPRITE_OVRD_W 0xFFFFC7FF
+#define S_0286D4_PNT_SPRITE_TOP_1(x) (((unsigned)(x) & 0x1) << 14)
+#define G_0286D4_PNT_SPRITE_TOP_1(x) (((x) >> 14) & 0x1)
+#define C_0286D4_PNT_SPRITE_TOP_1 0xFFFFBFFF
+#define R_0286D8_SPI_PS_IN_CONTROL 0x0286D8
+#define S_0286D8_NUM_INTERP(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_0286D8_NUM_INTERP(x) (((x) >> 0) & 0x3F)
+#define C_0286D8_NUM_INTERP 0xFFFFFFC0
+#define S_0286D8_PARAM_GEN(x) (((unsigned)(x) & 0x1) << 6)
+#define G_0286D8_PARAM_GEN(x) (((x) >> 6) & 0x1)
+#define C_0286D8_PARAM_GEN 0xFFFFFFBF
+#define S_0286D8_OFFCHIP_PARAM_EN(x) (((unsigned)(x) & 0x1) << 7)
+#define G_0286D8_OFFCHIP_PARAM_EN(x) (((x) >> 7) & 0x1)
+#define C_0286D8_OFFCHIP_PARAM_EN 0xFFFFFF7F
+#define S_0286D8_LATE_PC_DEALLOC(x) (((unsigned)(x) & 0x1) << 8)
+#define G_0286D8_LATE_PC_DEALLOC(x) (((x) >> 8) & 0x1)
+#define C_0286D8_LATE_PC_DEALLOC 0xFFFFFEFF
+#define S_0286D8_BC_OPTIMIZE_DISABLE(x) (((unsigned)(x) & 0x1) << 14)
+#define G_0286D8_BC_OPTIMIZE_DISABLE(x) (((x) >> 14) & 0x1)
+#define C_0286D8_BC_OPTIMIZE_DISABLE 0xFFFFBFFF
+#define R_0286E0_SPI_BARYC_CNTL 0x0286E0
+#define S_0286E0_PERSP_CENTER_CNTL(x) (((unsigned)(x) & 0x1) << 0)
+#define G_0286E0_PERSP_CENTER_CNTL(x) (((x) >> 0) & 0x1)
+#define C_0286E0_PERSP_CENTER_CNTL 0xFFFFFFFE
+#define S_0286E0_PERSP_CENTROID_CNTL(x) (((unsigned)(x) & 0x1) << 4)
+#define G_0286E0_PERSP_CENTROID_CNTL(x) (((x) >> 4) & 0x1)
+#define C_0286E0_PERSP_CENTROID_CNTL 0xFFFFFFEF
+#define S_0286E0_LINEAR_CENTER_CNTL(x) (((unsigned)(x) & 0x1) << 8)
+#define G_0286E0_LINEAR_CENTER_CNTL(x) (((x) >> 8) & 0x1)
+#define C_0286E0_LINEAR_CENTER_CNTL 0xFFFFFEFF
+#define S_0286E0_LINEAR_CENTROID_CNTL(x) (((unsigned)(x) & 0x1) << 12)
+#define G_0286E0_LINEAR_CENTROID_CNTL(x) (((x) >> 12) & 0x1)
+#define C_0286E0_LINEAR_CENTROID_CNTL 0xFFFFEFFF
+#define S_0286E0_POS_FLOAT_LOCATION(x) (((unsigned)(x) & 0x03) << 16)
+#define G_0286E0_POS_FLOAT_LOCATION(x) (((x) >> 16) & 0x03)
+#define C_0286E0_POS_FLOAT_LOCATION 0xFFFCFFFF
+#define S_0286E0_POS_FLOAT_ULC(x) (((unsigned)(x) & 0x1) << 20)
+#define G_0286E0_POS_FLOAT_ULC(x) (((x) >> 20) & 0x1)
+#define C_0286E0_POS_FLOAT_ULC 0xFFEFFFFF
+#define S_0286E0_FRONT_FACE_ALL_BITS(x) (((unsigned)(x) & 0x1) << 24)
+#define G_0286E0_FRONT_FACE_ALL_BITS(x) (((x) >> 24) & 0x1)
+#define C_0286E0_FRONT_FACE_ALL_BITS 0xFEFFFFFF
+#define R_0286E8_SPI_TMPRING_SIZE 0x0286E8
+#define S_0286E8_WAVES(x) (((unsigned)(x) & 0xFFF) << 0)
+#define G_0286E8_WAVES(x) (((x) >> 0) & 0xFFF)
+#define C_0286E8_WAVES 0xFFFFF000
+#define S_0286E8_WAVESIZE(x) (((unsigned)(x) & 0x1FFF) << 12)
+#define G_0286E8_WAVESIZE(x) (((x) >> 12) & 0x1FFF)
+#define C_0286E8_WAVESIZE 0xFE000FFF
+#define R_02870C_SPI_SHADER_POS_FORMAT 0x02870C
+#define S_02870C_POS0_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_02870C_POS0_EXPORT_FORMAT(x) (((x) >> 0) & 0x0F)
+#define C_02870C_POS0_EXPORT_FORMAT 0xFFFFFFF0
+#define S_02870C_POS1_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_02870C_POS1_EXPORT_FORMAT(x) (((x) >> 4) & 0x0F)
+#define C_02870C_POS1_EXPORT_FORMAT 0xFFFFFF0F
+#define S_02870C_POS2_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_02870C_POS2_EXPORT_FORMAT(x) (((x) >> 8) & 0x0F)
+#define C_02870C_POS2_EXPORT_FORMAT 0xFFFFF0FF
+#define S_02870C_POS3_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_02870C_POS3_EXPORT_FORMAT(x) (((x) >> 12) & 0x0F)
+#define C_02870C_POS3_EXPORT_FORMAT 0xFFFF0FFF
+#define R_028710_SPI_SHADER_Z_FORMAT 0x028710
+#define S_028710_Z_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028710_Z_EXPORT_FORMAT(x) (((x) >> 0) & 0x0F)
+#define C_028710_Z_EXPORT_FORMAT 0xFFFFFFF0
+#define R_028714_SPI_SHADER_COL_FORMAT 0x028714
+#define S_028714_COL0_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028714_COL0_EXPORT_FORMAT(x) (((x) >> 0) & 0x0F)
+#define C_028714_COL0_EXPORT_FORMAT 0xFFFFFFF0
+#define S_028714_COL1_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028714_COL1_EXPORT_FORMAT(x) (((x) >> 4) & 0x0F)
+#define C_028714_COL1_EXPORT_FORMAT 0xFFFFFF0F
+#define S_028714_COL2_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028714_COL2_EXPORT_FORMAT(x) (((x) >> 8) & 0x0F)
+#define C_028714_COL2_EXPORT_FORMAT 0xFFFFF0FF
+#define S_028714_COL3_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028714_COL3_EXPORT_FORMAT(x) (((x) >> 12) & 0x0F)
+#define C_028714_COL3_EXPORT_FORMAT 0xFFFF0FFF
+#define S_028714_COL4_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028714_COL4_EXPORT_FORMAT(x) (((x) >> 16) & 0x0F)
+#define C_028714_COL4_EXPORT_FORMAT 0xFFF0FFFF
+#define S_028714_COL5_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028714_COL5_EXPORT_FORMAT(x) (((x) >> 20) & 0x0F)
+#define C_028714_COL5_EXPORT_FORMAT 0xFF0FFFFF
+#define S_028714_COL6_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028714_COL6_EXPORT_FORMAT(x) (((x) >> 24) & 0x0F)
+#define C_028714_COL6_EXPORT_FORMAT 0xF0FFFFFF
+#define S_028714_COL7_EXPORT_FORMAT(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028714_COL7_EXPORT_FORMAT(x) (((x) >> 28) & 0x0F)
+#define C_028714_COL7_EXPORT_FORMAT 0x0FFFFFFF
+#define R_028754_SX_PS_DOWNCONVERT 0x028754
+#define S_028754_MRT0(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028754_MRT0(x) (((x) >> 0) & 0x0F)
+#define C_028754_MRT0 0xFFFFFFF0
+#define S_028754_MRT1(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028754_MRT1(x) (((x) >> 4) & 0x0F)
+#define C_028754_MRT1 0xFFFFFF0F
+#define S_028754_MRT2(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028754_MRT2(x) (((x) >> 8) & 0x0F)
+#define C_028754_MRT2 0xFFFFF0FF
+#define S_028754_MRT3(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028754_MRT3(x) (((x) >> 12) & 0x0F)
+#define C_028754_MRT3 0xFFFF0FFF
+#define S_028754_MRT4(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028754_MRT4(x) (((x) >> 16) & 0x0F)
+#define C_028754_MRT4 0xFFF0FFFF
+#define S_028754_MRT5(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028754_MRT5(x) (((x) >> 20) & 0x0F)
+#define C_028754_MRT5 0xFF0FFFFF
+#define S_028754_MRT6(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028754_MRT6(x) (((x) >> 24) & 0x0F)
+#define C_028754_MRT6 0xF0FFFFFF
+#define S_028754_MRT7(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028754_MRT7(x) (((x) >> 28) & 0x0F)
+#define C_028754_MRT7 0x0FFFFFFF
+#define R_028758_SX_BLEND_OPT_EPSILON 0x028758
+#define S_028758_MRT0_EPSILON(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028758_MRT0_EPSILON(x) (((x) >> 0) & 0x0F)
+#define C_028758_MRT0_EPSILON 0xFFFFFFF0
+#define S_028758_MRT1_EPSILON(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028758_MRT1_EPSILON(x) (((x) >> 4) & 0x0F)
+#define C_028758_MRT1_EPSILON 0xFFFFFF0F
+#define S_028758_MRT2_EPSILON(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028758_MRT2_EPSILON(x) (((x) >> 8) & 0x0F)
+#define C_028758_MRT2_EPSILON 0xFFFFF0FF
+#define S_028758_MRT3_EPSILON(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028758_MRT3_EPSILON(x) (((x) >> 12) & 0x0F)
+#define C_028758_MRT3_EPSILON 0xFFFF0FFF
+#define S_028758_MRT4_EPSILON(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028758_MRT4_EPSILON(x) (((x) >> 16) & 0x0F)
+#define C_028758_MRT4_EPSILON 0xFFF0FFFF
+#define S_028758_MRT5_EPSILON(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028758_MRT5_EPSILON(x) (((x) >> 20) & 0x0F)
+#define C_028758_MRT5_EPSILON 0xFF0FFFFF
+#define S_028758_MRT6_EPSILON(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028758_MRT6_EPSILON(x) (((x) >> 24) & 0x0F)
+#define C_028758_MRT6_EPSILON 0xF0FFFFFF
+#define S_028758_MRT7_EPSILON(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028758_MRT7_EPSILON(x) (((x) >> 28) & 0x0F)
+#define C_028758_MRT7_EPSILON 0x0FFFFFFF
+#define R_02875C_SX_BLEND_OPT_CONTROL 0x02875C
+#define S_02875C_MRT0_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02875C_MRT0_COLOR_OPT_DISABLE(x) (((x) >> 0) & 0x1)
+#define C_02875C_MRT0_COLOR_OPT_DISABLE 0xFFFFFFFE
+#define S_02875C_MRT0_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_02875C_MRT0_ALPHA_OPT_DISABLE(x) (((x) >> 1) & 0x1)
+#define C_02875C_MRT0_ALPHA_OPT_DISABLE 0xFFFFFFFD
+#define S_02875C_MRT1_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_02875C_MRT1_COLOR_OPT_DISABLE(x) (((x) >> 4) & 0x1)
+#define C_02875C_MRT1_COLOR_OPT_DISABLE 0xFFFFFFEF
+#define S_02875C_MRT1_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_02875C_MRT1_ALPHA_OPT_DISABLE(x) (((x) >> 5) & 0x1)
+#define C_02875C_MRT1_ALPHA_OPT_DISABLE 0xFFFFFFDF
+#define S_02875C_MRT2_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 8)
+#define G_02875C_MRT2_COLOR_OPT_DISABLE(x) (((x) >> 8) & 0x1)
+#define C_02875C_MRT2_COLOR_OPT_DISABLE 0xFFFFFEFF
+#define S_02875C_MRT2_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 9)
+#define G_02875C_MRT2_ALPHA_OPT_DISABLE(x) (((x) >> 9) & 0x1)
+#define C_02875C_MRT2_ALPHA_OPT_DISABLE 0xFFFFFDFF
+#define S_02875C_MRT3_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 12)
+#define G_02875C_MRT3_COLOR_OPT_DISABLE(x) (((x) >> 12) & 0x1)
+#define C_02875C_MRT3_COLOR_OPT_DISABLE 0xFFFFEFFF
+#define S_02875C_MRT3_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 13)
+#define G_02875C_MRT3_ALPHA_OPT_DISABLE(x) (((x) >> 13) & 0x1)
+#define C_02875C_MRT3_ALPHA_OPT_DISABLE 0xFFFFDFFF
+#define S_02875C_MRT4_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_02875C_MRT4_COLOR_OPT_DISABLE(x) (((x) >> 16) & 0x1)
+#define C_02875C_MRT4_COLOR_OPT_DISABLE 0xFFFEFFFF
+#define S_02875C_MRT4_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 17)
+#define G_02875C_MRT4_ALPHA_OPT_DISABLE(x) (((x) >> 17) & 0x1)
+#define C_02875C_MRT4_ALPHA_OPT_DISABLE 0xFFFDFFFF
+#define S_02875C_MRT5_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 20)
+#define G_02875C_MRT5_COLOR_OPT_DISABLE(x) (((x) >> 20) & 0x1)
+#define C_02875C_MRT5_COLOR_OPT_DISABLE 0xFFEFFFFF
+#define S_02875C_MRT5_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_02875C_MRT5_ALPHA_OPT_DISABLE(x) (((x) >> 21) & 0x1)
+#define C_02875C_MRT5_ALPHA_OPT_DISABLE 0xFFDFFFFF
+#define S_02875C_MRT6_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_02875C_MRT6_COLOR_OPT_DISABLE(x) (((x) >> 24) & 0x1)
+#define C_02875C_MRT6_COLOR_OPT_DISABLE 0xFEFFFFFF
+#define S_02875C_MRT6_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 25)
+#define G_02875C_MRT6_ALPHA_OPT_DISABLE(x) (((x) >> 25) & 0x1)
+#define C_02875C_MRT6_ALPHA_OPT_DISABLE 0xFDFFFFFF
+#define S_02875C_MRT7_COLOR_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 28)
+#define G_02875C_MRT7_COLOR_OPT_DISABLE(x) (((x) >> 28) & 0x1)
+#define C_02875C_MRT7_COLOR_OPT_DISABLE 0xEFFFFFFF
+#define S_02875C_MRT7_ALPHA_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 29)
+#define G_02875C_MRT7_ALPHA_OPT_DISABLE(x) (((x) >> 29) & 0x1)
+#define C_02875C_MRT7_ALPHA_OPT_DISABLE 0xDFFFFFFF
+#define S_02875C_PIXEN_ZERO_OPT_DISABLE(x) (((unsigned)(x) & 0x1) << 31)
+#define G_02875C_PIXEN_ZERO_OPT_DISABLE(x) (((x) >> 31) & 0x1)
+#define C_02875C_PIXEN_ZERO_OPT_DISABLE 0x7FFFFFFF
+#define R_028760_SX_MRT0_BLEND_OPT 0x028760
+#define S_028760_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028760_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028760_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028760_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028760_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028760_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028760_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028760_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028760_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028760_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028760_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028760_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028760_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028760_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028760_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028760_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028760_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028760_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028764_SX_MRT1_BLEND_OPT 0x028764
+#define S_028764_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028764_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028764_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028764_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028764_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028764_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028764_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028764_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028764_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028764_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028764_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028764_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028764_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028764_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028764_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028764_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028764_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028764_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028768_SX_MRT2_BLEND_OPT 0x028768
+#define S_028768_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028768_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028768_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028768_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028768_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028768_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028768_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028768_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028768_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028768_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028768_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028768_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028768_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028768_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028768_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028768_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028768_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028768_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_02876C_SX_MRT3_BLEND_OPT 0x02876C
+#define S_02876C_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_02876C_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_02876C_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_02876C_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_02876C_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_02876C_COLOR_DST_OPT 0xFFFFFF8F
+#define S_02876C_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_02876C_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_02876C_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_02876C_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_02876C_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_02876C_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_02876C_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_02876C_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_02876C_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_02876C_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_02876C_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_02876C_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028770_SX_MRT4_BLEND_OPT 0x028770
+#define S_028770_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028770_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028770_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028770_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028770_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028770_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028770_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028770_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028770_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028770_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028770_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028770_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028770_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028770_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028770_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028770_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028770_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028770_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028774_SX_MRT5_BLEND_OPT 0x028774
+#define S_028774_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028774_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028774_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028774_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028774_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028774_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028774_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028774_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028774_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028774_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028774_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028774_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028774_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028774_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028774_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028774_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028774_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028774_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028778_SX_MRT6_BLEND_OPT 0x028778
+#define S_028778_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028778_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_028778_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_028778_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028778_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_028778_COLOR_DST_OPT 0xFFFFFF8F
+#define S_028778_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028778_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_028778_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_028778_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028778_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_028778_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_028778_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028778_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_028778_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_028778_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028778_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_028778_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_02877C_SX_MRT7_BLEND_OPT 0x02877C
+#define S_02877C_COLOR_SRC_OPT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_02877C_COLOR_SRC_OPT(x) (((x) >> 0) & 0x07)
+#define C_02877C_COLOR_SRC_OPT 0xFFFFFFF8
+#define S_02877C_COLOR_DST_OPT(x) (((unsigned)(x) & 0x07) << 4)
+#define G_02877C_COLOR_DST_OPT(x) (((x) >> 4) & 0x07)
+#define C_02877C_COLOR_DST_OPT 0xFFFFFF8F
+#define S_02877C_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 8)
+#define G_02877C_COLOR_COMB_FCN(x) (((x) >> 8) & 0x07)
+#define C_02877C_COLOR_COMB_FCN 0xFFFFF8FF
+#define S_02877C_ALPHA_SRC_OPT(x) (((unsigned)(x) & 0x07) << 16)
+#define G_02877C_ALPHA_SRC_OPT(x) (((x) >> 16) & 0x07)
+#define C_02877C_ALPHA_SRC_OPT 0xFFF8FFFF
+#define S_02877C_ALPHA_DST_OPT(x) (((unsigned)(x) & 0x07) << 20)
+#define G_02877C_ALPHA_DST_OPT(x) (((x) >> 20) & 0x07)
+#define C_02877C_ALPHA_DST_OPT 0xFF8FFFFF
+#define S_02877C_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 24)
+#define G_02877C_ALPHA_COMB_FCN(x) (((x) >> 24) & 0x07)
+#define C_02877C_ALPHA_COMB_FCN 0xF8FFFFFF
+#define R_028780_CB_BLEND0_CONTROL 0x028780
+#define S_028780_COLOR_SRCBLEND(x) (((unsigned)(x) & 0x1F) << 0)
+#define G_028780_COLOR_SRCBLEND(x) (((x) >> 0) & 0x1F)
+#define C_028780_COLOR_SRCBLEND 0xFFFFFFE0
+#define S_028780_COLOR_COMB_FCN(x) (((unsigned)(x) & 0x07) << 5)
+#define G_028780_COLOR_COMB_FCN(x) (((x) >> 5) & 0x07)
+#define C_028780_COLOR_COMB_FCN 0xFFFFFF1F
+#define S_028780_COLOR_DESTBLEND(x) (((unsigned)(x) & 0x1F) << 8)
+#define G_028780_COLOR_DESTBLEND(x) (((x) >> 8) & 0x1F)
+#define C_028780_COLOR_DESTBLEND 0xFFFFE0FF
+#define S_028780_ALPHA_SRCBLEND(x) (((unsigned)(x) & 0x1F) << 16)
+#define G_028780_ALPHA_SRCBLEND(x) (((x) >> 16) & 0x1F)
+#define C_028780_ALPHA_SRCBLEND 0xFFE0FFFF
+#define S_028780_ALPHA_COMB_FCN(x) (((unsigned)(x) & 0x07) << 21)
+#define G_028780_ALPHA_COMB_FCN(x) (((x) >> 21) & 0x07)
+#define C_028780_ALPHA_COMB_FCN 0xFF1FFFFF
+#define S_028780_ALPHA_DESTBLEND(x) (((unsigned)(x) & 0x1F) << 24)
+#define G_028780_ALPHA_DESTBLEND(x) (((x) >> 24) & 0x1F)
+#define C_028780_ALPHA_DESTBLEND 0xE0FFFFFF
+#define S_028780_SEPARATE_ALPHA_BLEND(x) (((unsigned)(x) & 0x1) << 29)
+#define G_028780_SEPARATE_ALPHA_BLEND(x) (((x) >> 29) & 0x1)
+#define C_028780_SEPARATE_ALPHA_BLEND 0xDFFFFFFF
+#define S_028780_ENABLE(x) (((unsigned)(x) & 0x1) << 30)
+#define G_028780_ENABLE(x) (((x) >> 30) & 0x1)
+#define C_028780_ENABLE 0xBFFFFFFF
+#define S_028780_DISABLE_ROP3(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028780_DISABLE_ROP3(x) (((x) >> 31) & 0x1)
+#define C_028780_DISABLE_ROP3 0x7FFFFFFF
+#define R_028784_CB_BLEND1_CONTROL 0x028784
+#define R_028788_CB_BLEND2_CONTROL 0x028788
+#define R_02878C_CB_BLEND3_CONTROL 0x02878C
+#define R_028790_CB_BLEND4_CONTROL 0x028790
+#define R_028794_CB_BLEND5_CONTROL 0x028794
+#define R_028798_CB_BLEND6_CONTROL 0x028798
+#define R_02879C_CB_BLEND7_CONTROL 0x02879C
+#define R_0287A0_CB_MRT0_EPITCH 0x0287A0
+#define S_0287A0_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287A0_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287A0_EPITCH 0xFFFF0000
+#define R_0287A4_CB_MRT1_EPITCH 0x0287A4
+#define S_0287A4_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287A4_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287A4_EPITCH 0xFFFF0000
+#define R_0287A8_CB_MRT2_EPITCH 0x0287A8
+#define S_0287A8_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287A8_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287A8_EPITCH 0xFFFF0000
+#define R_0287AC_CB_MRT3_EPITCH 0x0287AC
+#define S_0287AC_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287AC_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287AC_EPITCH 0xFFFF0000
+#define R_0287B0_CB_MRT4_EPITCH 0x0287B0
+#define S_0287B0_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287B0_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287B0_EPITCH 0xFFFF0000
+#define R_0287B4_CB_MRT5_EPITCH 0x0287B4
+#define S_0287B4_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287B4_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287B4_EPITCH 0xFFFF0000
+#define R_0287B8_CB_MRT6_EPITCH 0x0287B8
+#define S_0287B8_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287B8_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287B8_EPITCH 0xFFFF0000
+#define R_0287BC_CB_MRT7_EPITCH 0x0287BC
+#define S_0287BC_EPITCH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287BC_EPITCH(x) (((x) >> 0) & 0xFFFF)
+#define C_0287BC_EPITCH 0xFFFF0000
+#define R_0287CC_CS_COPY_STATE 0x0287CC
+#define S_0287CC_SRC_STATE_ID(x) (((unsigned)(x) & 0x07) << 0)
+#define G_0287CC_SRC_STATE_ID(x) (((x) >> 0) & 0x07)
+#define C_0287CC_SRC_STATE_ID 0xFFFFFFF8
+#define R_0287D4_PA_CL_POINT_X_RAD 0x0287D4
+#define R_0287D8_PA_CL_POINT_Y_RAD 0x0287D8
+#define R_0287DC_PA_CL_POINT_SIZE 0x0287DC
+#define R_0287E0_PA_CL_POINT_CULL_RAD 0x0287E0
+#define R_0287E4_VGT_DMA_BASE_HI 0x0287E4
+#define S_0287E4_BASE_ADDR_GFX9(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_0287E4_BASE_ADDR_GFX9(x) (((x) >> 0) & 0xFFFF)
+#define C_0287E4_BASE_ADDR_GFX9 0xFFFF0000
+#define R_0287E8_VGT_DMA_BASE 0x0287E8
+#define R_0287F0_VGT_DRAW_INITIATOR 0x0287F0
+#define S_0287F0_SOURCE_SELECT(x) (((unsigned)(x) & 0x03) << 0)
+#define G_0287F0_SOURCE_SELECT(x) (((x) >> 0) & 0x03)
+#define C_0287F0_SOURCE_SELECT 0xFFFFFFFC
+#define S_0287F0_MAJOR_MODE(x) (((unsigned)(x) & 0x03) << 2)
+#define G_0287F0_MAJOR_MODE(x) (((x) >> 2) & 0x03)
+#define C_0287F0_MAJOR_MODE 0xFFFFFFF3
+#define S_0287F0_SPRITE_EN_R6XX(x) (((unsigned)(x) & 0x1) << 4)
+#define G_0287F0_SPRITE_EN_R6XX(x) (((x) >> 4) & 0x1)
+#define C_0287F0_SPRITE_EN_R6XX 0xFFFFFFEF
+#define S_0287F0_NOT_EOP(x) (((unsigned)(x) & 0x1) << 5)
+#define G_0287F0_NOT_EOP(x) (((x) >> 5) & 0x1)
+#define C_0287F0_NOT_EOP 0xFFFFFFDF
+#define S_0287F0_USE_OPAQUE(x) (((unsigned)(x) & 0x1) << 6)
+#define G_0287F0_USE_OPAQUE(x) (((x) >> 6) & 0x1)
+#define C_0287F0_USE_OPAQUE 0xFFFFFFBF
+#define S_0287F0_UNROLLED_INST(x) (((unsigned)(x) & 0x1) << 7)
+#define G_0287F0_UNROLLED_INST(x) (((x) >> 7) & 0x1)
+#define C_0287F0_UNROLLED_INST 0xFFFFFF7F
+#define S_0287F0_GRBM_SKEW_NO_DEC(x) (((unsigned)(x) & 0x1) << 8)
+#define G_0287F0_GRBM_SKEW_NO_DEC(x) (((x) >> 8) & 0x1)
+#define C_0287F0_GRBM_SKEW_NO_DEC 0xFFFFFEFF
+#define S_0287F0_REG_RT_INDEX(x) (((unsigned)(x) & 0x07) << 29)
+#define G_0287F0_REG_RT_INDEX(x) (((x) >> 29) & 0x07)
+#define C_0287F0_REG_RT_INDEX 0x1FFFFFFF
+#define R_0287F4_VGT_IMMED_DATA 0x0287F4
+#define R_0287F8_VGT_EVENT_ADDRESS_REG 0x0287F8
+#define S_0287F8_ADDRESS_LOW(x) (((unsigned)(x) & 0xFFFFFFF) << 0)
+#define G_0287F8_ADDRESS_LOW(x) (((x) >> 0) & 0xFFFFFFF)
+#define C_0287F8_ADDRESS_LOW 0xF0000000
+#define R_028800_DB_DEPTH_CONTROL 0x028800
+#define S_028800_STENCIL_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028800_STENCIL_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028800_STENCIL_ENABLE 0xFFFFFFFE
+#define S_028800_Z_ENABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028800_Z_ENABLE(x) (((x) >> 1) & 0x1)
+#define C_028800_Z_ENABLE 0xFFFFFFFD
+#define S_028800_Z_WRITE_ENABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028800_Z_WRITE_ENABLE(x) (((x) >> 2) & 0x1)
+#define C_028800_Z_WRITE_ENABLE 0xFFFFFFFB
+#define S_028800_DEPTH_BOUNDS_ENABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028800_DEPTH_BOUNDS_ENABLE(x) (((x) >> 3) & 0x1)
+#define C_028800_DEPTH_BOUNDS_ENABLE 0xFFFFFFF7
+#define S_028800_ZFUNC(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028800_ZFUNC(x) (((x) >> 4) & 0x07)
+#define C_028800_ZFUNC 0xFFFFFF8F
+#define S_028800_BACKFACE_ENABLE(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028800_BACKFACE_ENABLE(x) (((x) >> 7) & 0x1)
+#define C_028800_BACKFACE_ENABLE 0xFFFFFF7F
+#define S_028800_STENCILFUNC(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028800_STENCILFUNC(x) (((x) >> 8) & 0x07)
+#define C_028800_STENCILFUNC 0xFFFFF8FF
+#define S_028800_STENCILFUNC_BF(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028800_STENCILFUNC_BF(x) (((x) >> 20) & 0x07)
+#define C_028800_STENCILFUNC_BF 0xFF8FFFFF
+#define S_028800_ENABLE_COLOR_WRITES_ON_DEPTH_FAIL(x) (((unsigned)(x) & 0x1) << 30)
+#define G_028800_ENABLE_COLOR_WRITES_ON_DEPTH_FAIL(x) (((x) >> 30) & 0x1)
+#define C_028800_ENABLE_COLOR_WRITES_ON_DEPTH_FAIL 0xBFFFFFFF
+#define S_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS(x) (((x) >> 31) & 0x1)
+#define C_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS 0x7FFFFFFF
+#define R_028804_DB_EQAA 0x028804
+#define S_028804_MAX_ANCHOR_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028804_MAX_ANCHOR_SAMPLES(x) (((x) >> 0) & 0x07)
+#define C_028804_MAX_ANCHOR_SAMPLES 0xFFFFFFF8
+#define S_028804_PS_ITER_SAMPLES(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028804_PS_ITER_SAMPLES(x) (((x) >> 4) & 0x07)
+#define C_028804_PS_ITER_SAMPLES 0xFFFFFF8F
+#define S_028804_MASK_EXPORT_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028804_MASK_EXPORT_NUM_SAMPLES(x) (((x) >> 8) & 0x07)
+#define C_028804_MASK_EXPORT_NUM_SAMPLES 0xFFFFF8FF
+#define S_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 12)
+#define G_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((x) >> 12) & 0x07)
+#define C_028804_ALPHA_TO_MASK_NUM_SAMPLES 0xFFFF8FFF
+#define S_028804_HIGH_QUALITY_INTERSECTIONS(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028804_HIGH_QUALITY_INTERSECTIONS(x) (((x) >> 16) & 0x1)
+#define C_028804_HIGH_QUALITY_INTERSECTIONS 0xFFFEFFFF
+#define S_028804_INCOHERENT_EQAA_READS(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028804_INCOHERENT_EQAA_READS(x) (((x) >> 17) & 0x1)
+#define C_028804_INCOHERENT_EQAA_READS 0xFFFDFFFF
+#define S_028804_INTERPOLATE_COMP_Z(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028804_INTERPOLATE_COMP_Z(x) (((x) >> 18) & 0x1)
+#define C_028804_INTERPOLATE_COMP_Z 0xFFFBFFFF
+#define S_028804_INTERPOLATE_SRC_Z(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028804_INTERPOLATE_SRC_Z(x) (((x) >> 19) & 0x1)
+#define C_028804_INTERPOLATE_SRC_Z 0xFFF7FFFF
+#define S_028804_STATIC_ANCHOR_ASSOCIATIONS(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028804_STATIC_ANCHOR_ASSOCIATIONS(x) (((x) >> 20) & 0x1)
+#define C_028804_STATIC_ANCHOR_ASSOCIATIONS 0xFFEFFFFF
+#define S_028804_ALPHA_TO_MASK_EQAA_DISABLE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028804_ALPHA_TO_MASK_EQAA_DISABLE(x) (((x) >> 21) & 0x1)
+#define C_028804_ALPHA_TO_MASK_EQAA_DISABLE 0xFFDFFFFF
+#define S_028804_OVERRASTERIZATION_AMOUNT(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028804_OVERRASTERIZATION_AMOUNT(x) (((x) >> 24) & 0x07)
+#define C_028804_OVERRASTERIZATION_AMOUNT 0xF8FFFFFF
+#define S_028804_ENABLE_POSTZ_OVERRASTERIZATION(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028804_ENABLE_POSTZ_OVERRASTERIZATION(x) (((x) >> 27) & 0x1)
+#define C_028804_ENABLE_POSTZ_OVERRASTERIZATION 0xF7FFFFFF
+#define R_028808_CB_COLOR_CONTROL 0x028808
+#define S_028808_DISABLE_DUAL_QUAD(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028808_DISABLE_DUAL_QUAD(x) (((x) >> 0) & 0x1)
+#define C_028808_DISABLE_DUAL_QUAD 0xFFFFFFFE
+#define S_028808_DEGAMMA_ENABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028808_DEGAMMA_ENABLE(x) (((x) >> 3) & 0x1)
+#define C_028808_DEGAMMA_ENABLE 0xFFFFFFF7
+#define S_028808_MODE(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028808_MODE(x) (((x) >> 4) & 0x07)
+#define C_028808_MODE 0xFFFFFF8F
+#define S_028808_ROP3(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028808_ROP3(x) (((x) >> 16) & 0xFF)
+#define C_028808_ROP3 0xFF00FFFF
+#define R_02880C_DB_SHADER_CONTROL 0x02880C
+#define S_02880C_Z_EXPORT_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02880C_Z_EXPORT_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_02880C_Z_EXPORT_ENABLE 0xFFFFFFFE
+#define S_02880C_STENCIL_TEST_VAL_EXPORT_ENABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_02880C_STENCIL_TEST_VAL_EXPORT_ENABLE(x) (((x) >> 1) & 0x1)
+#define C_02880C_STENCIL_TEST_VAL_EXPORT_ENABLE 0xFFFFFFFD
+#define S_02880C_STENCIL_OP_VAL_EXPORT_ENABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_02880C_STENCIL_OP_VAL_EXPORT_ENABLE(x) (((x) >> 2) & 0x1)
+#define C_02880C_STENCIL_OP_VAL_EXPORT_ENABLE 0xFFFFFFFB
+#define S_02880C_Z_ORDER(x) (((unsigned)(x) & 0x03) << 4)
+#define G_02880C_Z_ORDER(x) (((x) >> 4) & 0x03)
+#define C_02880C_Z_ORDER 0xFFFFFFCF
+#define S_02880C_KILL_ENABLE(x) (((unsigned)(x) & 0x1) << 6)
+#define G_02880C_KILL_ENABLE(x) (((x) >> 6) & 0x1)
+#define C_02880C_KILL_ENABLE 0xFFFFFFBF
+#define S_02880C_COVERAGE_TO_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 7)
+#define G_02880C_COVERAGE_TO_MASK_ENABLE(x) (((x) >> 7) & 0x1)
+#define C_02880C_COVERAGE_TO_MASK_ENABLE 0xFFFFFF7F
+#define S_02880C_MASK_EXPORT_ENABLE(x) (((unsigned)(x) & 0x1) << 8)
+#define G_02880C_MASK_EXPORT_ENABLE(x) (((x) >> 8) & 0x1)
+#define C_02880C_MASK_EXPORT_ENABLE 0xFFFFFEFF
+#define S_02880C_EXEC_ON_HIER_FAIL(x) (((unsigned)(x) & 0x1) << 9)
+#define G_02880C_EXEC_ON_HIER_FAIL(x) (((x) >> 9) & 0x1)
+#define C_02880C_EXEC_ON_HIER_FAIL 0xFFFFFDFF
+#define S_02880C_EXEC_ON_NOOP(x) (((unsigned)(x) & 0x1) << 10)
+#define G_02880C_EXEC_ON_NOOP(x) (((x) >> 10) & 0x1)
+#define C_02880C_EXEC_ON_NOOP 0xFFFFFBFF
+#define S_02880C_ALPHA_TO_MASK_DISABLE(x) (((unsigned)(x) & 0x1) << 11)
+#define G_02880C_ALPHA_TO_MASK_DISABLE(x) (((x) >> 11) & 0x1)
+#define C_02880C_ALPHA_TO_MASK_DISABLE 0xFFFFF7FF
+#define S_02880C_DEPTH_BEFORE_SHADER(x) (((unsigned)(x) & 0x1) << 12)
+#define G_02880C_DEPTH_BEFORE_SHADER(x) (((x) >> 12) & 0x1)
+#define C_02880C_DEPTH_BEFORE_SHADER 0xFFFFEFFF
+#define S_02880C_CONSERVATIVE_Z_EXPORT(x) (((unsigned)(x) & 0x03) << 13)
+#define G_02880C_CONSERVATIVE_Z_EXPORT(x) (((x) >> 13) & 0x03)
+#define C_02880C_CONSERVATIVE_Z_EXPORT 0xFFFF9FFF
+#define S_02880C_DUAL_QUAD_DISABLE(x) (((unsigned)(x) & 0x1) << 15)
+#define G_02880C_DUAL_QUAD_DISABLE(x) (((x) >> 15) & 0x1)
+#define C_02880C_DUAL_QUAD_DISABLE 0xFFFF7FFF
+#define S_02880C_PRIMITIVE_ORDERED_PIXEL_SHADER(x) (((unsigned)(x) & 0x1) << 16)
+#define G_02880C_PRIMITIVE_ORDERED_PIXEL_SHADER(x) (((x) >> 16) & 0x1)
+#define C_02880C_PRIMITIVE_ORDERED_PIXEL_SHADER 0xFFFEFFFF
+#define S_02880C_EXEC_IF_OVERLAPPED(x) (((unsigned)(x) & 0x1) << 17)
+#define G_02880C_EXEC_IF_OVERLAPPED(x) (((x) >> 17) & 0x1)
+#define C_02880C_EXEC_IF_OVERLAPPED 0xFFFDFFFF
+#define S_02880C_POPS_OVERLAP_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 20)
+#define G_02880C_POPS_OVERLAP_NUM_SAMPLES(x) (((x) >> 20) & 0x07)
+#define C_02880C_POPS_OVERLAP_NUM_SAMPLES 0xFF8FFFFF
+#define R_028810_PA_CL_CLIP_CNTL 0x028810
+#define S_028810_UCP_ENA_0(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028810_UCP_ENA_0(x) (((x) >> 0) & 0x1)
+#define C_028810_UCP_ENA_0 0xFFFFFFFE
+#define S_028810_UCP_ENA_1(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028810_UCP_ENA_1(x) (((x) >> 1) & 0x1)
+#define C_028810_UCP_ENA_1 0xFFFFFFFD
+#define S_028810_UCP_ENA_2(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028810_UCP_ENA_2(x) (((x) >> 2) & 0x1)
+#define C_028810_UCP_ENA_2 0xFFFFFFFB
+#define S_028810_UCP_ENA_3(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028810_UCP_ENA_3(x) (((x) >> 3) & 0x1)
+#define C_028810_UCP_ENA_3 0xFFFFFFF7
+#define S_028810_UCP_ENA_4(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028810_UCP_ENA_4(x) (((x) >> 4) & 0x1)
+#define C_028810_UCP_ENA_4 0xFFFFFFEF
+#define S_028810_UCP_ENA_5(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028810_UCP_ENA_5(x) (((x) >> 5) & 0x1)
+#define C_028810_UCP_ENA_5 0xFFFFFFDF
+#define S_028810_PS_UCP_Y_SCALE_NEG(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028810_PS_UCP_Y_SCALE_NEG(x) (((x) >> 13) & 0x1)
+#define C_028810_PS_UCP_Y_SCALE_NEG 0xFFFFDFFF
+#define S_028810_PS_UCP_MODE(x) (((unsigned)(x) & 0x03) << 14)
+#define G_028810_PS_UCP_MODE(x) (((x) >> 14) & 0x03)
+#define C_028810_PS_UCP_MODE 0xFFFF3FFF
+#define S_028810_CLIP_DISABLE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028810_CLIP_DISABLE(x) (((x) >> 16) & 0x1)
+#define C_028810_CLIP_DISABLE 0xFFFEFFFF
+#define S_028810_UCP_CULL_ONLY_ENA(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028810_UCP_CULL_ONLY_ENA(x) (((x) >> 17) & 0x1)
+#define C_028810_UCP_CULL_ONLY_ENA 0xFFFDFFFF
+#define S_028810_BOUNDARY_EDGE_FLAG_ENA(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028810_BOUNDARY_EDGE_FLAG_ENA(x) (((x) >> 18) & 0x1)
+#define C_028810_BOUNDARY_EDGE_FLAG_ENA 0xFFFBFFFF
+#define S_028810_DX_CLIP_SPACE_DEF(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028810_DX_CLIP_SPACE_DEF(x) (((x) >> 19) & 0x1)
+#define C_028810_DX_CLIP_SPACE_DEF 0xFFF7FFFF
+#define S_028810_DIS_CLIP_ERR_DETECT(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028810_DIS_CLIP_ERR_DETECT(x) (((x) >> 20) & 0x1)
+#define C_028810_DIS_CLIP_ERR_DETECT 0xFFEFFFFF
+#define S_028810_VTX_KILL_OR(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028810_VTX_KILL_OR(x) (((x) >> 21) & 0x1)
+#define C_028810_VTX_KILL_OR 0xFFDFFFFF
+#define S_028810_DX_RASTERIZATION_KILL(x) (((unsigned)(x) & 0x1) << 22)
+#define G_028810_DX_RASTERIZATION_KILL(x) (((x) >> 22) & 0x1)
+#define C_028810_DX_RASTERIZATION_KILL 0xFFBFFFFF
+#define S_028810_DX_LINEAR_ATTR_CLIP_ENA(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028810_DX_LINEAR_ATTR_CLIP_ENA(x) (((x) >> 24) & 0x1)
+#define C_028810_DX_LINEAR_ATTR_CLIP_ENA 0xFEFFFFFF
+#define S_028810_VTE_VPORT_PROVOKE_DISABLE(x) (((unsigned)(x) & 0x1) << 25)
+#define G_028810_VTE_VPORT_PROVOKE_DISABLE(x) (((x) >> 25) & 0x1)
+#define C_028810_VTE_VPORT_PROVOKE_DISABLE 0xFDFFFFFF
+#define S_028810_ZCLIP_NEAR_DISABLE(x) (((unsigned)(x) & 0x1) << 26)
+#define G_028810_ZCLIP_NEAR_DISABLE(x) (((x) >> 26) & 0x1)
+#define C_028810_ZCLIP_NEAR_DISABLE 0xFBFFFFFF
+#define S_028810_ZCLIP_FAR_DISABLE(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028810_ZCLIP_FAR_DISABLE(x) (((x) >> 27) & 0x1)
+#define C_028810_ZCLIP_FAR_DISABLE 0xF7FFFFFF
+#define R_028814_PA_SU_SC_MODE_CNTL 0x028814
+#define S_028814_CULL_FRONT(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028814_CULL_FRONT(x) (((x) >> 0) & 0x1)
+#define C_028814_CULL_FRONT 0xFFFFFFFE
+#define S_028814_CULL_BACK(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028814_CULL_BACK(x) (((x) >> 1) & 0x1)
+#define C_028814_CULL_BACK 0xFFFFFFFD
+#define S_028814_FACE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028814_FACE(x) (((x) >> 2) & 0x1)
+#define C_028814_FACE 0xFFFFFFFB
+#define S_028814_POLY_MODE(x) (((unsigned)(x) & 0x03) << 3)
+#define G_028814_POLY_MODE(x) (((x) >> 3) & 0x03)
+#define C_028814_POLY_MODE 0xFFFFFFE7
+#define S_028814_POLYMODE_FRONT_PTYPE(x) (((unsigned)(x) & 0x07) << 5)
+#define G_028814_POLYMODE_FRONT_PTYPE(x) (((x) >> 5) & 0x07)
+#define C_028814_POLYMODE_FRONT_PTYPE 0xFFFFFF1F
+#define S_028814_POLYMODE_BACK_PTYPE(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028814_POLYMODE_BACK_PTYPE(x) (((x) >> 8) & 0x07)
+#define C_028814_POLYMODE_BACK_PTYPE 0xFFFFF8FF
+#define S_028814_POLY_OFFSET_FRONT_ENABLE(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028814_POLY_OFFSET_FRONT_ENABLE(x) (((x) >> 11) & 0x1)
+#define C_028814_POLY_OFFSET_FRONT_ENABLE 0xFFFFF7FF
+#define S_028814_POLY_OFFSET_BACK_ENABLE(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028814_POLY_OFFSET_BACK_ENABLE(x) (((x) >> 12) & 0x1)
+#define C_028814_POLY_OFFSET_BACK_ENABLE 0xFFFFEFFF
+#define S_028814_POLY_OFFSET_PARA_ENABLE(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028814_POLY_OFFSET_PARA_ENABLE(x) (((x) >> 13) & 0x1)
+#define C_028814_POLY_OFFSET_PARA_ENABLE 0xFFFFDFFF
+#define S_028814_VTX_WINDOW_OFFSET_ENABLE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028814_VTX_WINDOW_OFFSET_ENABLE(x) (((x) >> 16) & 0x1)
+#define C_028814_VTX_WINDOW_OFFSET_ENABLE 0xFFFEFFFF
+#define S_028814_PROVOKING_VTX_LAST(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028814_PROVOKING_VTX_LAST(x) (((x) >> 19) & 0x1)
+#define C_028814_PROVOKING_VTX_LAST 0xFFF7FFFF
+#define S_028814_PERSP_CORR_DIS(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028814_PERSP_CORR_DIS(x) (((x) >> 20) & 0x1)
+#define C_028814_PERSP_CORR_DIS 0xFFEFFFFF
+#define S_028814_MULTI_PRIM_IB_ENA(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028814_MULTI_PRIM_IB_ENA(x) (((x) >> 21) & 0x1)
+#define C_028814_MULTI_PRIM_IB_ENA 0xFFDFFFFF
+#define S_028814_RIGHT_TRIANGLE_ALTERNATE_GRADIENT_REF(x) (((unsigned)(x) & 0x1) << 22)
+#define G_028814_RIGHT_TRIANGLE_ALTERNATE_GRADIENT_REF(x) (((x) >> 22) & 0x1)
+#define C_028814_RIGHT_TRIANGLE_ALTERNATE_GRADIENT_REF 0xFFBFFFFF
+#define S_028814_NEW_QUAD_DECOMPOSITION(x) (((unsigned)(x) & 0x1) << 23)
+#define G_028814_NEW_QUAD_DECOMPOSITION(x) (((x) >> 23) & 0x1)
+#define C_028814_NEW_QUAD_DECOMPOSITION 0xFF7FFFFF
+#define R_028818_PA_CL_VTE_CNTL 0x028818
+#define S_028818_VPORT_X_SCALE_ENA(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028818_VPORT_X_SCALE_ENA(x) (((x) >> 0) & 0x1)
+#define C_028818_VPORT_X_SCALE_ENA 0xFFFFFFFE
+#define S_028818_VPORT_X_OFFSET_ENA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028818_VPORT_X_OFFSET_ENA(x) (((x) >> 1) & 0x1)
+#define C_028818_VPORT_X_OFFSET_ENA 0xFFFFFFFD
+#define S_028818_VPORT_Y_SCALE_ENA(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028818_VPORT_Y_SCALE_ENA(x) (((x) >> 2) & 0x1)
+#define C_028818_VPORT_Y_SCALE_ENA 0xFFFFFFFB
+#define S_028818_VPORT_Y_OFFSET_ENA(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028818_VPORT_Y_OFFSET_ENA(x) (((x) >> 3) & 0x1)
+#define C_028818_VPORT_Y_OFFSET_ENA 0xFFFFFFF7
+#define S_028818_VPORT_Z_SCALE_ENA(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028818_VPORT_Z_SCALE_ENA(x) (((x) >> 4) & 0x1)
+#define C_028818_VPORT_Z_SCALE_ENA 0xFFFFFFEF
+#define S_028818_VPORT_Z_OFFSET_ENA(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028818_VPORT_Z_OFFSET_ENA(x) (((x) >> 5) & 0x1)
+#define C_028818_VPORT_Z_OFFSET_ENA 0xFFFFFFDF
+#define S_028818_VTX_XY_FMT(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028818_VTX_XY_FMT(x) (((x) >> 8) & 0x1)
+#define C_028818_VTX_XY_FMT 0xFFFFFEFF
+#define S_028818_VTX_Z_FMT(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028818_VTX_Z_FMT(x) (((x) >> 9) & 0x1)
+#define C_028818_VTX_Z_FMT 0xFFFFFDFF
+#define S_028818_VTX_W0_FMT(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028818_VTX_W0_FMT(x) (((x) >> 10) & 0x1)
+#define C_028818_VTX_W0_FMT 0xFFFFFBFF
+#define S_028818_PERFCOUNTER_REF(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028818_PERFCOUNTER_REF(x) (((x) >> 11) & 0x1)
+#define C_028818_PERFCOUNTER_REF 0xFFFFF7FF
+#define R_02881C_PA_CL_VS_OUT_CNTL 0x02881C
+#define S_02881C_CLIP_DIST_ENA_0(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02881C_CLIP_DIST_ENA_0(x) (((x) >> 0) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_0 0xFFFFFFFE
+#define S_02881C_CLIP_DIST_ENA_1(x) (((unsigned)(x) & 0x1) << 1)
+#define G_02881C_CLIP_DIST_ENA_1(x) (((x) >> 1) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_1 0xFFFFFFFD
+#define S_02881C_CLIP_DIST_ENA_2(x) (((unsigned)(x) & 0x1) << 2)
+#define G_02881C_CLIP_DIST_ENA_2(x) (((x) >> 2) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_2 0xFFFFFFFB
+#define S_02881C_CLIP_DIST_ENA_3(x) (((unsigned)(x) & 0x1) << 3)
+#define G_02881C_CLIP_DIST_ENA_3(x) (((x) >> 3) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_3 0xFFFFFFF7
+#define S_02881C_CLIP_DIST_ENA_4(x) (((unsigned)(x) & 0x1) << 4)
+#define G_02881C_CLIP_DIST_ENA_4(x) (((x) >> 4) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_4 0xFFFFFFEF
+#define S_02881C_CLIP_DIST_ENA_5(x) (((unsigned)(x) & 0x1) << 5)
+#define G_02881C_CLIP_DIST_ENA_5(x) (((x) >> 5) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_5 0xFFFFFFDF
+#define S_02881C_CLIP_DIST_ENA_6(x) (((unsigned)(x) & 0x1) << 6)
+#define G_02881C_CLIP_DIST_ENA_6(x) (((x) >> 6) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_6 0xFFFFFFBF
+#define S_02881C_CLIP_DIST_ENA_7(x) (((unsigned)(x) & 0x1) << 7)
+#define G_02881C_CLIP_DIST_ENA_7(x) (((x) >> 7) & 0x1)
+#define C_02881C_CLIP_DIST_ENA_7 0xFFFFFF7F
+#define S_02881C_CULL_DIST_ENA_0(x) (((unsigned)(x) & 0x1) << 8)
+#define G_02881C_CULL_DIST_ENA_0(x) (((x) >> 8) & 0x1)
+#define C_02881C_CULL_DIST_ENA_0 0xFFFFFEFF
+#define S_02881C_CULL_DIST_ENA_1(x) (((unsigned)(x) & 0x1) << 9)
+#define G_02881C_CULL_DIST_ENA_1(x) (((x) >> 9) & 0x1)
+#define C_02881C_CULL_DIST_ENA_1 0xFFFFFDFF
+#define S_02881C_CULL_DIST_ENA_2(x) (((unsigned)(x) & 0x1) << 10)
+#define G_02881C_CULL_DIST_ENA_2(x) (((x) >> 10) & 0x1)
+#define C_02881C_CULL_DIST_ENA_2 0xFFFFFBFF
+#define S_02881C_CULL_DIST_ENA_3(x) (((unsigned)(x) & 0x1) << 11)
+#define G_02881C_CULL_DIST_ENA_3(x) (((x) >> 11) & 0x1)
+#define C_02881C_CULL_DIST_ENA_3 0xFFFFF7FF
+#define S_02881C_CULL_DIST_ENA_4(x) (((unsigned)(x) & 0x1) << 12)
+#define G_02881C_CULL_DIST_ENA_4(x) (((x) >> 12) & 0x1)
+#define C_02881C_CULL_DIST_ENA_4 0xFFFFEFFF
+#define S_02881C_CULL_DIST_ENA_5(x) (((unsigned)(x) & 0x1) << 13)
+#define G_02881C_CULL_DIST_ENA_5(x) (((x) >> 13) & 0x1)
+#define C_02881C_CULL_DIST_ENA_5 0xFFFFDFFF
+#define S_02881C_CULL_DIST_ENA_6(x) (((unsigned)(x) & 0x1) << 14)
+#define G_02881C_CULL_DIST_ENA_6(x) (((x) >> 14) & 0x1)
+#define C_02881C_CULL_DIST_ENA_6 0xFFFFBFFF
+#define S_02881C_CULL_DIST_ENA_7(x) (((unsigned)(x) & 0x1) << 15)
+#define G_02881C_CULL_DIST_ENA_7(x) (((x) >> 15) & 0x1)
+#define C_02881C_CULL_DIST_ENA_7 0xFFFF7FFF
+#define S_02881C_USE_VTX_POINT_SIZE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_02881C_USE_VTX_POINT_SIZE(x) (((x) >> 16) & 0x1)
+#define C_02881C_USE_VTX_POINT_SIZE 0xFFFEFFFF
+#define S_02881C_USE_VTX_EDGE_FLAG(x) (((unsigned)(x) & 0x1) << 17)
+#define G_02881C_USE_VTX_EDGE_FLAG(x) (((x) >> 17) & 0x1)
+#define C_02881C_USE_VTX_EDGE_FLAG 0xFFFDFFFF
+#define S_02881C_USE_VTX_RENDER_TARGET_INDX(x) (((unsigned)(x) & 0x1) << 18)
+#define G_02881C_USE_VTX_RENDER_TARGET_INDX(x) (((x) >> 18) & 0x1)
+#define C_02881C_USE_VTX_RENDER_TARGET_INDX 0xFFFBFFFF
+#define S_02881C_USE_VTX_VIEWPORT_INDX(x) (((unsigned)(x) & 0x1) << 19)
+#define G_02881C_USE_VTX_VIEWPORT_INDX(x) (((x) >> 19) & 0x1)
+#define C_02881C_USE_VTX_VIEWPORT_INDX 0xFFF7FFFF
+#define S_02881C_USE_VTX_KILL_FLAG(x) (((unsigned)(x) & 0x1) << 20)
+#define G_02881C_USE_VTX_KILL_FLAG(x) (((x) >> 20) & 0x1)
+#define C_02881C_USE_VTX_KILL_FLAG 0xFFEFFFFF
+#define S_02881C_VS_OUT_MISC_VEC_ENA(x) (((unsigned)(x) & 0x1) << 21)
+#define G_02881C_VS_OUT_MISC_VEC_ENA(x) (((x) >> 21) & 0x1)
+#define C_02881C_VS_OUT_MISC_VEC_ENA 0xFFDFFFFF
+#define S_02881C_VS_OUT_CCDIST0_VEC_ENA(x) (((unsigned)(x) & 0x1) << 22)
+#define G_02881C_VS_OUT_CCDIST0_VEC_ENA(x) (((x) >> 22) & 0x1)
+#define C_02881C_VS_OUT_CCDIST0_VEC_ENA 0xFFBFFFFF
+#define S_02881C_VS_OUT_CCDIST1_VEC_ENA(x) (((unsigned)(x) & 0x1) << 23)
+#define G_02881C_VS_OUT_CCDIST1_VEC_ENA(x) (((x) >> 23) & 0x1)
+#define C_02881C_VS_OUT_CCDIST1_VEC_ENA 0xFF7FFFFF
+#define S_02881C_VS_OUT_MISC_SIDE_BUS_ENA(x) (((unsigned)(x) & 0x1) << 24)
+#define G_02881C_VS_OUT_MISC_SIDE_BUS_ENA(x) (((x) >> 24) & 0x1)
+#define C_02881C_VS_OUT_MISC_SIDE_BUS_ENA 0xFEFFFFFF
+#define S_02881C_USE_VTX_GS_CUT_FLAG(x) (((unsigned)(x) & 0x1) << 25)
+#define G_02881C_USE_VTX_GS_CUT_FLAG(x) (((x) >> 25) & 0x1)
+#define C_02881C_USE_VTX_GS_CUT_FLAG 0xFDFFFFFF
+#define S_02881C_USE_VTX_LINE_WIDTH(x) (((unsigned)(x) & 0x1) << 26)
+#define G_02881C_USE_VTX_LINE_WIDTH(x) (((x) >> 26) & 0x1)
+#define C_02881C_USE_VTX_LINE_WIDTH 0xFBFFFFFF
+#define S_02881C_USE_VTX_SHD_OBJPRIM_ID(x) (((unsigned)(x) & 0x1) << 27)
+#define G_02881C_USE_VTX_SHD_OBJPRIM_ID(x) (((x) >> 27) & 0x1)
+#define C_02881C_USE_VTX_SHD_OBJPRIM_ID 0xF7FFFFFF
+#define R_028820_PA_CL_NANINF_CNTL 0x028820
+#define S_028820_VTE_XY_INF_DISCARD(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028820_VTE_XY_INF_DISCARD(x) (((x) >> 0) & 0x1)
+#define C_028820_VTE_XY_INF_DISCARD 0xFFFFFFFE
+#define S_028820_VTE_Z_INF_DISCARD(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028820_VTE_Z_INF_DISCARD(x) (((x) >> 1) & 0x1)
+#define C_028820_VTE_Z_INF_DISCARD 0xFFFFFFFD
+#define S_028820_VTE_W_INF_DISCARD(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028820_VTE_W_INF_DISCARD(x) (((x) >> 2) & 0x1)
+#define C_028820_VTE_W_INF_DISCARD 0xFFFFFFFB
+#define S_028820_VTE_0XNANINF_IS_0(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028820_VTE_0XNANINF_IS_0(x) (((x) >> 3) & 0x1)
+#define C_028820_VTE_0XNANINF_IS_0 0xFFFFFFF7
+#define S_028820_VTE_XY_NAN_RETAIN(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028820_VTE_XY_NAN_RETAIN(x) (((x) >> 4) & 0x1)
+#define C_028820_VTE_XY_NAN_RETAIN 0xFFFFFFEF
+#define S_028820_VTE_Z_NAN_RETAIN(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028820_VTE_Z_NAN_RETAIN(x) (((x) >> 5) & 0x1)
+#define C_028820_VTE_Z_NAN_RETAIN 0xFFFFFFDF
+#define S_028820_VTE_W_NAN_RETAIN(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028820_VTE_W_NAN_RETAIN(x) (((x) >> 6) & 0x1)
+#define C_028820_VTE_W_NAN_RETAIN 0xFFFFFFBF
+#define S_028820_VTE_W_RECIP_NAN_IS_0(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028820_VTE_W_RECIP_NAN_IS_0(x) (((x) >> 7) & 0x1)
+#define C_028820_VTE_W_RECIP_NAN_IS_0 0xFFFFFF7F
+#define S_028820_VS_XY_NAN_TO_INF(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028820_VS_XY_NAN_TO_INF(x) (((x) >> 8) & 0x1)
+#define C_028820_VS_XY_NAN_TO_INF 0xFFFFFEFF
+#define S_028820_VS_XY_INF_RETAIN(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028820_VS_XY_INF_RETAIN(x) (((x) >> 9) & 0x1)
+#define C_028820_VS_XY_INF_RETAIN 0xFFFFFDFF
+#define S_028820_VS_Z_NAN_TO_INF(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028820_VS_Z_NAN_TO_INF(x) (((x) >> 10) & 0x1)
+#define C_028820_VS_Z_NAN_TO_INF 0xFFFFFBFF
+#define S_028820_VS_Z_INF_RETAIN(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028820_VS_Z_INF_RETAIN(x) (((x) >> 11) & 0x1)
+#define C_028820_VS_Z_INF_RETAIN 0xFFFFF7FF
+#define S_028820_VS_W_NAN_TO_INF(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028820_VS_W_NAN_TO_INF(x) (((x) >> 12) & 0x1)
+#define C_028820_VS_W_NAN_TO_INF 0xFFFFEFFF
+#define S_028820_VS_W_INF_RETAIN(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028820_VS_W_INF_RETAIN(x) (((x) >> 13) & 0x1)
+#define C_028820_VS_W_INF_RETAIN 0xFFFFDFFF
+#define S_028820_VS_CLIP_DIST_INF_DISCARD(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028820_VS_CLIP_DIST_INF_DISCARD(x) (((x) >> 14) & 0x1)
+#define C_028820_VS_CLIP_DIST_INF_DISCARD 0xFFFFBFFF
+#define S_028820_VTE_NO_OUTPUT_NEG_0(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028820_VTE_NO_OUTPUT_NEG_0(x) (((x) >> 20) & 0x1)
+#define C_028820_VTE_NO_OUTPUT_NEG_0 0xFFEFFFFF
+#define R_028824_PA_SU_LINE_STIPPLE_CNTL 0x028824
+#define S_028824_LINE_STIPPLE_RESET(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028824_LINE_STIPPLE_RESET(x) (((x) >> 0) & 0x03)
+#define C_028824_LINE_STIPPLE_RESET 0xFFFFFFFC
+#define S_028824_EXPAND_FULL_LENGTH(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028824_EXPAND_FULL_LENGTH(x) (((x) >> 2) & 0x1)
+#define C_028824_EXPAND_FULL_LENGTH 0xFFFFFFFB
+#define S_028824_FRACTIONAL_ACCUM(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028824_FRACTIONAL_ACCUM(x) (((x) >> 3) & 0x1)
+#define C_028824_FRACTIONAL_ACCUM 0xFFFFFFF7
+#define S_028824_DIAMOND_ADJUST(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028824_DIAMOND_ADJUST(x) (((x) >> 4) & 0x1)
+#define C_028824_DIAMOND_ADJUST 0xFFFFFFEF
+#define R_028828_PA_SU_LINE_STIPPLE_SCALE 0x028828
+#define R_02882C_PA_SU_PRIM_FILTER_CNTL 0x02882C
+#define S_02882C_TRIANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02882C_TRIANGLE_FILTER_DISABLE(x) (((x) >> 0) & 0x1)
+#define C_02882C_TRIANGLE_FILTER_DISABLE 0xFFFFFFFE
+#define S_02882C_LINE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_02882C_LINE_FILTER_DISABLE(x) (((x) >> 1) & 0x1)
+#define C_02882C_LINE_FILTER_DISABLE 0xFFFFFFFD
+#define S_02882C_POINT_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_02882C_POINT_FILTER_DISABLE(x) (((x) >> 2) & 0x1)
+#define C_02882C_POINT_FILTER_DISABLE 0xFFFFFFFB
+#define S_02882C_RECTANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_02882C_RECTANGLE_FILTER_DISABLE(x) (((x) >> 3) & 0x1)
+#define C_02882C_RECTANGLE_FILTER_DISABLE 0xFFFFFFF7
+#define S_02882C_TRIANGLE_EXPAND_ENA(x) (((unsigned)(x) & 0x1) << 4)
+#define G_02882C_TRIANGLE_EXPAND_ENA(x) (((x) >> 4) & 0x1)
+#define C_02882C_TRIANGLE_EXPAND_ENA 0xFFFFFFEF
+#define S_02882C_LINE_EXPAND_ENA(x) (((unsigned)(x) & 0x1) << 5)
+#define G_02882C_LINE_EXPAND_ENA(x) (((x) >> 5) & 0x1)
+#define C_02882C_LINE_EXPAND_ENA 0xFFFFFFDF
+#define S_02882C_POINT_EXPAND_ENA(x) (((unsigned)(x) & 0x1) << 6)
+#define G_02882C_POINT_EXPAND_ENA(x) (((x) >> 6) & 0x1)
+#define C_02882C_POINT_EXPAND_ENA 0xFFFFFFBF
+#define S_02882C_RECTANGLE_EXPAND_ENA(x) (((unsigned)(x) & 0x1) << 7)
+#define G_02882C_RECTANGLE_EXPAND_ENA(x) (((x) >> 7) & 0x1)
+#define C_02882C_RECTANGLE_EXPAND_ENA 0xFFFFFF7F
+#define S_02882C_PRIM_EXPAND_CONSTANT(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_02882C_PRIM_EXPAND_CONSTANT(x) (((x) >> 8) & 0xFF)
+#define C_02882C_PRIM_EXPAND_CONSTANT 0xFFFF00FF
+#define S_02882C_XMAX_RIGHT_EXCLUSION(x) (((unsigned)(x) & 0x1) << 30)
+#define G_02882C_XMAX_RIGHT_EXCLUSION(x) (((x) >> 30) & 0x1)
+#define C_02882C_XMAX_RIGHT_EXCLUSION 0xBFFFFFFF
+#define S_02882C_YMAX_BOTTOM_EXCLUSION(x) (((unsigned)(x) & 0x1) << 31)
+#define G_02882C_YMAX_BOTTOM_EXCLUSION(x) (((x) >> 31) & 0x1)
+#define C_02882C_YMAX_BOTTOM_EXCLUSION 0x7FFFFFFF
+#define R_028830_PA_SU_SMALL_PRIM_FILTER_CNTL 0x028830
+#define S_028830_SMALL_PRIM_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028830_SMALL_PRIM_FILTER_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028830_SMALL_PRIM_FILTER_ENABLE 0xFFFFFFFE
+#define S_028830_TRIANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028830_TRIANGLE_FILTER_DISABLE(x) (((x) >> 1) & 0x1)
+#define C_028830_TRIANGLE_FILTER_DISABLE 0xFFFFFFFD
+#define S_028830_LINE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028830_LINE_FILTER_DISABLE(x) (((x) >> 2) & 0x1)
+#define C_028830_LINE_FILTER_DISABLE 0xFFFFFFFB
+#define S_028830_POINT_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028830_POINT_FILTER_DISABLE(x) (((x) >> 3) & 0x1)
+#define C_028830_POINT_FILTER_DISABLE 0xFFFFFFF7
+#define S_028830_RECTANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028830_RECTANGLE_FILTER_DISABLE(x) (((x) >> 4) & 0x1)
+#define C_028830_RECTANGLE_FILTER_DISABLE 0xFFFFFFEF
+#define S_028830_SRBSL_ENABLE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028830_SRBSL_ENABLE(x) (((x) >> 5) & 0x1)
+#define C_028830_SRBSL_ENABLE 0xFFFFFFDF
+#define R_028834_PA_CL_OBJPRIM_ID_CNTL 0x028834
+#define S_028834_OBJ_ID_SEL(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028834_OBJ_ID_SEL(x) (((x) >> 0) & 0x1)
+#define C_028834_OBJ_ID_SEL 0xFFFFFFFE
+#define S_028834_ADD_PIPED_PRIM_ID(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028834_ADD_PIPED_PRIM_ID(x) (((x) >> 1) & 0x1)
+#define C_028834_ADD_PIPED_PRIM_ID 0xFFFFFFFD
+#define S_028834_EN_32BIT_OBJPRIMID(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028834_EN_32BIT_OBJPRIMID(x) (((x) >> 2) & 0x1)
+#define C_028834_EN_32BIT_OBJPRIMID 0xFFFFFFFB
+#define R_028838_PA_CL_NGG_CNTL 0x028838
+#define S_028838_VERTEX_REUSE_OFF(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028838_VERTEX_REUSE_OFF(x) (((x) >> 0) & 0x1)
+#define C_028838_VERTEX_REUSE_OFF 0xFFFFFFFE
+#define S_028838_INDEX_BUF_EDGE_FLAG_ENA(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028838_INDEX_BUF_EDGE_FLAG_ENA(x) (((x) >> 1) & 0x1)
+#define C_028838_INDEX_BUF_EDGE_FLAG_ENA 0xFFFFFFFD
+#define R_02883C_PA_SU_OVER_RASTERIZATION_CNTL 0x02883C
+#define S_02883C_DISCARD_0_AREA_TRIANGLES(x) (((unsigned)(x) & 0x1) << 0)
+#define G_02883C_DISCARD_0_AREA_TRIANGLES(x) (((x) >> 0) & 0x1)
+#define C_02883C_DISCARD_0_AREA_TRIANGLES 0xFFFFFFFE
+#define S_02883C_DISCARD_0_AREA_LINES(x) (((unsigned)(x) & 0x1) << 1)
+#define G_02883C_DISCARD_0_AREA_LINES(x) (((x) >> 1) & 0x1)
+#define C_02883C_DISCARD_0_AREA_LINES 0xFFFFFFFD
+#define S_02883C_DISCARD_0_AREA_POINTS(x) (((unsigned)(x) & 0x1) << 2)
+#define G_02883C_DISCARD_0_AREA_POINTS(x) (((x) >> 2) & 0x1)
+#define C_02883C_DISCARD_0_AREA_POINTS 0xFFFFFFFB
+#define S_02883C_DISCARD_0_AREA_RECTANGLES(x) (((unsigned)(x) & 0x1) << 3)
+#define G_02883C_DISCARD_0_AREA_RECTANGLES(x) (((x) >> 3) & 0x1)
+#define C_02883C_DISCARD_0_AREA_RECTANGLES 0xFFFFFFF7
+#define S_02883C_USE_PROVOKING_ZW(x) (((unsigned)(x) & 0x1) << 4)
+#define G_02883C_USE_PROVOKING_ZW(x) (((x) >> 4) & 0x1)
+#define C_02883C_USE_PROVOKING_ZW 0xFFFFFFEF
+#define R_028A00_PA_SU_POINT_SIZE 0x028A00
+#define S_028A00_HEIGHT(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028A00_HEIGHT(x) (((x) >> 0) & 0xFFFF)
+#define C_028A00_HEIGHT 0xFFFF0000
+#define S_028A00_WIDTH(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028A00_WIDTH(x) (((x) >> 16) & 0xFFFF)
+#define C_028A00_WIDTH 0x0000FFFF
+#define R_028A04_PA_SU_POINT_MINMAX 0x028A04
+#define S_028A04_MIN_SIZE(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028A04_MIN_SIZE(x) (((x) >> 0) & 0xFFFF)
+#define C_028A04_MIN_SIZE 0xFFFF0000
+#define S_028A04_MAX_SIZE(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028A04_MAX_SIZE(x) (((x) >> 16) & 0xFFFF)
+#define C_028A04_MAX_SIZE 0x0000FFFF
+#define R_028A08_PA_SU_LINE_CNTL 0x028A08
+#define S_028A08_WIDTH(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028A08_WIDTH(x) (((x) >> 0) & 0xFFFF)
+#define C_028A08_WIDTH 0xFFFF0000
+#define R_028A0C_PA_SC_LINE_STIPPLE 0x028A0C
+#define S_028A0C_LINE_PATTERN(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028A0C_LINE_PATTERN(x) (((x) >> 0) & 0xFFFF)
+#define C_028A0C_LINE_PATTERN 0xFFFF0000
+#define S_028A0C_REPEAT_COUNT(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028A0C_REPEAT_COUNT(x) (((x) >> 16) & 0xFF)
+#define C_028A0C_REPEAT_COUNT 0xFF00FFFF
+#define S_028A0C_PATTERN_BIT_ORDER(x) (((unsigned)(x) & 0x1) << 28)
+#define G_028A0C_PATTERN_BIT_ORDER(x) (((x) >> 28) & 0x1)
+#define C_028A0C_PATTERN_BIT_ORDER 0xEFFFFFFF
+#define S_028A0C_AUTO_RESET_CNTL(x) (((unsigned)(x) & 0x03) << 29)
+#define G_028A0C_AUTO_RESET_CNTL(x) (((x) >> 29) & 0x03)
+#define C_028A0C_AUTO_RESET_CNTL 0x9FFFFFFF
+#define R_028A10_VGT_OUTPUT_PATH_CNTL 0x028A10
+#define S_028A10_PATH_SELECT(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028A10_PATH_SELECT(x) (((x) >> 0) & 0x07)
+#define C_028A10_PATH_SELECT 0xFFFFFFF8
+#define R_028A14_VGT_HOS_CNTL 0x028A14
+#define S_028A14_TESS_MODE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028A14_TESS_MODE(x) (((x) >> 0) & 0x03)
+#define C_028A14_TESS_MODE 0xFFFFFFFC
+#define R_028A18_VGT_HOS_MAX_TESS_LEVEL 0x028A18
+#define R_028A1C_VGT_HOS_MIN_TESS_LEVEL 0x028A1C
+#define R_028A20_VGT_HOS_REUSE_DEPTH 0x028A20
+#define S_028A20_REUSE_DEPTH(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028A20_REUSE_DEPTH(x) (((x) >> 0) & 0xFF)
+#define C_028A20_REUSE_DEPTH 0xFFFFFF00
+#define R_028A24_VGT_GROUP_PRIM_TYPE 0x028A24
+#define S_028A24_PRIM_TYPE(x) (((unsigned)(x) & 0x1F) << 0)
+#define G_028A24_PRIM_TYPE(x) (((x) >> 0) & 0x1F)
+#define C_028A24_PRIM_TYPE 0xFFFFFFE0
+#define S_028A24_RETAIN_ORDER(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028A24_RETAIN_ORDER(x) (((x) >> 14) & 0x1)
+#define C_028A24_RETAIN_ORDER 0xFFFFBFFF
+#define S_028A24_RETAIN_QUADS(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028A24_RETAIN_QUADS(x) (((x) >> 15) & 0x1)
+#define C_028A24_RETAIN_QUADS 0xFFFF7FFF
+#define S_028A24_PRIM_ORDER(x) (((unsigned)(x) & 0x07) << 16)
+#define G_028A24_PRIM_ORDER(x) (((x) >> 16) & 0x07)
+#define C_028A24_PRIM_ORDER 0xFFF8FFFF
+#define R_028A28_VGT_GROUP_FIRST_DECR 0x028A28
+#define S_028A28_FIRST_DECR(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028A28_FIRST_DECR(x) (((x) >> 0) & 0x0F)
+#define C_028A28_FIRST_DECR 0xFFFFFFF0
+#define R_028A2C_VGT_GROUP_DECR 0x028A2C
+#define S_028A2C_DECR(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028A2C_DECR(x) (((x) >> 0) & 0x0F)
+#define C_028A2C_DECR 0xFFFFFFF0
+#define R_028A30_VGT_GROUP_VECT_0_CNTL 0x028A30
+#define S_028A30_COMP_X_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A30_COMP_X_EN(x) (((x) >> 0) & 0x1)
+#define C_028A30_COMP_X_EN 0xFFFFFFFE
+#define S_028A30_COMP_Y_EN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A30_COMP_Y_EN(x) (((x) >> 1) & 0x1)
+#define C_028A30_COMP_Y_EN 0xFFFFFFFD
+#define S_028A30_COMP_Z_EN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A30_COMP_Z_EN(x) (((x) >> 2) & 0x1)
+#define C_028A30_COMP_Z_EN 0xFFFFFFFB
+#define S_028A30_COMP_W_EN(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A30_COMP_W_EN(x) (((x) >> 3) & 0x1)
+#define C_028A30_COMP_W_EN 0xFFFFFFF7
+#define S_028A30_STRIDE(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028A30_STRIDE(x) (((x) >> 8) & 0xFF)
+#define C_028A30_STRIDE 0xFFFF00FF
+#define S_028A30_SHIFT(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028A30_SHIFT(x) (((x) >> 16) & 0xFF)
+#define C_028A30_SHIFT 0xFF00FFFF
+#define R_028A34_VGT_GROUP_VECT_1_CNTL 0x028A34
+#define S_028A34_COMP_X_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A34_COMP_X_EN(x) (((x) >> 0) & 0x1)
+#define C_028A34_COMP_X_EN 0xFFFFFFFE
+#define S_028A34_COMP_Y_EN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A34_COMP_Y_EN(x) (((x) >> 1) & 0x1)
+#define C_028A34_COMP_Y_EN 0xFFFFFFFD
+#define S_028A34_COMP_Z_EN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A34_COMP_Z_EN(x) (((x) >> 2) & 0x1)
+#define C_028A34_COMP_Z_EN 0xFFFFFFFB
+#define S_028A34_COMP_W_EN(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A34_COMP_W_EN(x) (((x) >> 3) & 0x1)
+#define C_028A34_COMP_W_EN 0xFFFFFFF7
+#define S_028A34_STRIDE(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028A34_STRIDE(x) (((x) >> 8) & 0xFF)
+#define C_028A34_STRIDE 0xFFFF00FF
+#define S_028A34_SHIFT(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028A34_SHIFT(x) (((x) >> 16) & 0xFF)
+#define C_028A34_SHIFT 0xFF00FFFF
+#define R_028A38_VGT_GROUP_VECT_0_FMT_CNTL 0x028A38
+#define S_028A38_X_CONV(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028A38_X_CONV(x) (((x) >> 0) & 0x0F)
+#define C_028A38_X_CONV 0xFFFFFFF0
+#define S_028A38_X_OFFSET(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028A38_X_OFFSET(x) (((x) >> 4) & 0x0F)
+#define C_028A38_X_OFFSET 0xFFFFFF0F
+#define S_028A38_Y_CONV(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028A38_Y_CONV(x) (((x) >> 8) & 0x0F)
+#define C_028A38_Y_CONV 0xFFFFF0FF
+#define S_028A38_Y_OFFSET(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028A38_Y_OFFSET(x) (((x) >> 12) & 0x0F)
+#define C_028A38_Y_OFFSET 0xFFFF0FFF
+#define S_028A38_Z_CONV(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028A38_Z_CONV(x) (((x) >> 16) & 0x0F)
+#define C_028A38_Z_CONV 0xFFF0FFFF
+#define S_028A38_Z_OFFSET(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028A38_Z_OFFSET(x) (((x) >> 20) & 0x0F)
+#define C_028A38_Z_OFFSET 0xFF0FFFFF
+#define S_028A38_W_CONV(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028A38_W_CONV(x) (((x) >> 24) & 0x0F)
+#define C_028A38_W_CONV 0xF0FFFFFF
+#define S_028A38_W_OFFSET(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028A38_W_OFFSET(x) (((x) >> 28) & 0x0F)
+#define C_028A38_W_OFFSET 0x0FFFFFFF
+#define R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL 0x028A3C
+#define S_028A3C_X_CONV(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028A3C_X_CONV(x) (((x) >> 0) & 0x0F)
+#define C_028A3C_X_CONV 0xFFFFFFF0
+#define S_028A3C_X_OFFSET(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028A3C_X_OFFSET(x) (((x) >> 4) & 0x0F)
+#define C_028A3C_X_OFFSET 0xFFFFFF0F
+#define S_028A3C_Y_CONV(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028A3C_Y_CONV(x) (((x) >> 8) & 0x0F)
+#define C_028A3C_Y_CONV 0xFFFFF0FF
+#define S_028A3C_Y_OFFSET(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028A3C_Y_OFFSET(x) (((x) >> 12) & 0x0F)
+#define C_028A3C_Y_OFFSET 0xFFFF0FFF
+#define S_028A3C_Z_CONV(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028A3C_Z_CONV(x) (((x) >> 16) & 0x0F)
+#define C_028A3C_Z_CONV 0xFFF0FFFF
+#define S_028A3C_Z_OFFSET(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028A3C_Z_OFFSET(x) (((x) >> 20) & 0x0F)
+#define C_028A3C_Z_OFFSET 0xFF0FFFFF
+#define S_028A3C_W_CONV(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028A3C_W_CONV(x) (((x) >> 24) & 0x0F)
+#define C_028A3C_W_CONV 0xF0FFFFFF
+#define S_028A3C_W_OFFSET(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028A3C_W_OFFSET(x) (((x) >> 28) & 0x0F)
+#define C_028A3C_W_OFFSET 0x0FFFFFFF
+#define R_028A40_VGT_GS_MODE 0x028A40
+#define S_028A40_MODE(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028A40_MODE(x) (((x) >> 0) & 0x07)
+#define C_028A40_MODE 0xFFFFFFF8
+#define S_028A40_RESERVED_0(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A40_RESERVED_0(x) (((x) >> 3) & 0x1)
+#define C_028A40_RESERVED_0 0xFFFFFFF7
+#define S_028A40_CUT_MODE(x) (((unsigned)(x) & 0x03) << 4)
+#define G_028A40_CUT_MODE(x) (((x) >> 4) & 0x03)
+#define C_028A40_CUT_MODE 0xFFFFFFCF
+#define S_028A40_RESERVED_1(x) (((unsigned)(x) & 0x1F) << 6)
+#define G_028A40_RESERVED_1(x) (((x) >> 6) & 0x1F)
+#define C_028A40_RESERVED_1 0xFFFFF83F
+#define S_028A40_GS_C_PACK_EN(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028A40_GS_C_PACK_EN(x) (((x) >> 11) & 0x1)
+#define C_028A40_GS_C_PACK_EN 0xFFFFF7FF
+#define S_028A40_RESERVED_2(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028A40_RESERVED_2(x) (((x) >> 12) & 0x1)
+#define C_028A40_RESERVED_2 0xFFFFEFFF
+#define S_028A40_ES_PASSTHRU(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028A40_ES_PASSTHRU(x) (((x) >> 13) & 0x1)
+#define C_028A40_ES_PASSTHRU 0xFFFFDFFF
+#define S_028A40_RESERVED_3(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028A40_RESERVED_3(x) (((x) >> 14) & 0x1)
+#define C_028A40_RESERVED_3 0xFFFFBFFF
+#define S_028A40_RESERVED_4(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028A40_RESERVED_4(x) (((x) >> 15) & 0x1)
+#define C_028A40_RESERVED_4 0xFFFF7FFF
+#define S_028A40_RESERVED_5(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028A40_RESERVED_5(x) (((x) >> 16) & 0x1)
+#define C_028A40_RESERVED_5 0xFFFEFFFF
+#define S_028A40_PARTIAL_THD_AT_EOI(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028A40_PARTIAL_THD_AT_EOI(x) (((x) >> 17) & 0x1)
+#define C_028A40_PARTIAL_THD_AT_EOI 0xFFFDFFFF
+#define S_028A40_SUPPRESS_CUTS(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028A40_SUPPRESS_CUTS(x) (((x) >> 18) & 0x1)
+#define C_028A40_SUPPRESS_CUTS 0xFFFBFFFF
+#define S_028A40_ES_WRITE_OPTIMIZE(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028A40_ES_WRITE_OPTIMIZE(x) (((x) >> 19) & 0x1)
+#define C_028A40_ES_WRITE_OPTIMIZE 0xFFF7FFFF
+#define S_028A40_GS_WRITE_OPTIMIZE(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028A40_GS_WRITE_OPTIMIZE(x) (((x) >> 20) & 0x1)
+#define C_028A40_GS_WRITE_OPTIMIZE 0xFFEFFFFF
+#define S_028A40_ONCHIP(x) (((unsigned)(x) & 0x03) << 21)
+#define G_028A40_ONCHIP(x) (((x) >> 21) & 0x03)
+#define C_028A40_ONCHIP 0xFF9FFFFF
+#define R_028A44_VGT_GS_ONCHIP_CNTL 0x028A44
+#define S_028A44_ES_VERTS_PER_SUBGRP(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028A44_ES_VERTS_PER_SUBGRP(x) (((x) >> 0) & 0x7FF)
+#define C_028A44_ES_VERTS_PER_SUBGRP 0xFFFFF800
+#define S_028A44_GS_PRIMS_PER_SUBGRP(x) (((unsigned)(x) & 0x7FF) << 11)
+#define G_028A44_GS_PRIMS_PER_SUBGRP(x) (((x) >> 11) & 0x7FF)
+#define C_028A44_GS_PRIMS_PER_SUBGRP 0xFFC007FF
+#define S_028A44_GS_INST_PRIMS_IN_SUBGRP(x) (((unsigned)(x) & 0x3FF) << 22)
+#define G_028A44_GS_INST_PRIMS_IN_SUBGRP(x) (((x) >> 22) & 0x3FF)
+#define C_028A44_GS_INST_PRIMS_IN_SUBGRP 0x003FFFFF
+#define R_028A48_PA_SC_MODE_CNTL_0 0x028A48
+#define S_028A48_MSAA_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A48_MSAA_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028A48_MSAA_ENABLE 0xFFFFFFFE
+#define S_028A48_VPORT_SCISSOR_ENABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A48_VPORT_SCISSOR_ENABLE(x) (((x) >> 1) & 0x1)
+#define C_028A48_VPORT_SCISSOR_ENABLE 0xFFFFFFFD
+#define S_028A48_LINE_STIPPLE_ENABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A48_LINE_STIPPLE_ENABLE(x) (((x) >> 2) & 0x1)
+#define C_028A48_LINE_STIPPLE_ENABLE 0xFFFFFFFB
+#define S_028A48_SEND_UNLIT_STILES_TO_PKR(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A48_SEND_UNLIT_STILES_TO_PKR(x) (((x) >> 3) & 0x1)
+#define C_028A48_SEND_UNLIT_STILES_TO_PKR 0xFFFFFFF7
+#define S_028A48_SCALE_LINE_WIDTH_PAD(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028A48_SCALE_LINE_WIDTH_PAD(x) (((x) >> 4) & 0x1)
+#define C_028A48_SCALE_LINE_WIDTH_PAD 0xFFFFFFEF
+#define S_028A48_ALTERNATE_RBS_PER_TILE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028A48_ALTERNATE_RBS_PER_TILE(x) (((x) >> 5) & 0x1)
+#define C_028A48_ALTERNATE_RBS_PER_TILE 0xFFFFFFDF
+#define S_028A48_COARSE_TILE_STARTS_ON_EVEN_RB(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028A48_COARSE_TILE_STARTS_ON_EVEN_RB(x) (((x) >> 6) & 0x1)
+#define C_028A48_COARSE_TILE_STARTS_ON_EVEN_RB 0xFFFFFFBF
+#define R_028A4C_PA_SC_MODE_CNTL_1 0x028A4C
+#define S_028A4C_WALK_SIZE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A4C_WALK_SIZE(x) (((x) >> 0) & 0x1)
+#define C_028A4C_WALK_SIZE 0xFFFFFFFE
+#define S_028A4C_WALK_ALIGNMENT(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A4C_WALK_ALIGNMENT(x) (((x) >> 1) & 0x1)
+#define C_028A4C_WALK_ALIGNMENT 0xFFFFFFFD
+#define S_028A4C_WALK_ALIGN8_PRIM_FITS_ST(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A4C_WALK_ALIGN8_PRIM_FITS_ST(x) (((x) >> 2) & 0x1)
+#define C_028A4C_WALK_ALIGN8_PRIM_FITS_ST 0xFFFFFFFB
+#define S_028A4C_WALK_FENCE_ENABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A4C_WALK_FENCE_ENABLE(x) (((x) >> 3) & 0x1)
+#define C_028A4C_WALK_FENCE_ENABLE 0xFFFFFFF7
+#define S_028A4C_WALK_FENCE_SIZE(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028A4C_WALK_FENCE_SIZE(x) (((x) >> 4) & 0x07)
+#define C_028A4C_WALK_FENCE_SIZE 0xFFFFFF8F
+#define S_028A4C_SUPERTILE_WALK_ORDER_ENABLE(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028A4C_SUPERTILE_WALK_ORDER_ENABLE(x) (((x) >> 7) & 0x1)
+#define C_028A4C_SUPERTILE_WALK_ORDER_ENABLE 0xFFFFFF7F
+#define S_028A4C_TILE_WALK_ORDER_ENABLE(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028A4C_TILE_WALK_ORDER_ENABLE(x) (((x) >> 8) & 0x1)
+#define C_028A4C_TILE_WALK_ORDER_ENABLE 0xFFFFFEFF
+#define S_028A4C_TILE_COVER_DISABLE(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028A4C_TILE_COVER_DISABLE(x) (((x) >> 9) & 0x1)
+#define C_028A4C_TILE_COVER_DISABLE 0xFFFFFDFF
+#define S_028A4C_TILE_COVER_NO_SCISSOR(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028A4C_TILE_COVER_NO_SCISSOR(x) (((x) >> 10) & 0x1)
+#define C_028A4C_TILE_COVER_NO_SCISSOR 0xFFFFFBFF
+#define S_028A4C_ZMM_LINE_EXTENT(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028A4C_ZMM_LINE_EXTENT(x) (((x) >> 11) & 0x1)
+#define C_028A4C_ZMM_LINE_EXTENT 0xFFFFF7FF
+#define S_028A4C_ZMM_LINE_OFFSET(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028A4C_ZMM_LINE_OFFSET(x) (((x) >> 12) & 0x1)
+#define C_028A4C_ZMM_LINE_OFFSET 0xFFFFEFFF
+#define S_028A4C_ZMM_RECT_EXTENT(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028A4C_ZMM_RECT_EXTENT(x) (((x) >> 13) & 0x1)
+#define C_028A4C_ZMM_RECT_EXTENT 0xFFFFDFFF
+#define S_028A4C_KILL_PIX_POST_HI_Z(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028A4C_KILL_PIX_POST_HI_Z(x) (((x) >> 14) & 0x1)
+#define C_028A4C_KILL_PIX_POST_HI_Z 0xFFFFBFFF
+#define S_028A4C_KILL_PIX_POST_DETAIL_MASK(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028A4C_KILL_PIX_POST_DETAIL_MASK(x) (((x) >> 15) & 0x1)
+#define C_028A4C_KILL_PIX_POST_DETAIL_MASK 0xFFFF7FFF
+#define S_028A4C_PS_ITER_SAMPLE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028A4C_PS_ITER_SAMPLE(x) (((x) >> 16) & 0x1)
+#define C_028A4C_PS_ITER_SAMPLE 0xFFFEFFFF
+#define S_028A4C_MULTI_SHADER_ENGINE_PRIM_DISCARD_ENABLE(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028A4C_MULTI_SHADER_ENGINE_PRIM_DISCARD_ENABLE(x) (((x) >> 17) & 0x1)
+#define C_028A4C_MULTI_SHADER_ENGINE_PRIM_DISCARD_ENABLE 0xFFFDFFFF
+#define S_028A4C_MULTI_GPU_SUPERTILE_ENABLE(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028A4C_MULTI_GPU_SUPERTILE_ENABLE(x) (((x) >> 18) & 0x1)
+#define C_028A4C_MULTI_GPU_SUPERTILE_ENABLE 0xFFFBFFFF
+#define S_028A4C_GPU_ID_OVERRIDE_ENABLE(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028A4C_GPU_ID_OVERRIDE_ENABLE(x) (((x) >> 19) & 0x1)
+#define C_028A4C_GPU_ID_OVERRIDE_ENABLE 0xFFF7FFFF
+#define S_028A4C_GPU_ID_OVERRIDE(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028A4C_GPU_ID_OVERRIDE(x) (((x) >> 20) & 0x0F)
+#define C_028A4C_GPU_ID_OVERRIDE 0xFF0FFFFF
+#define S_028A4C_MULTI_GPU_PRIM_DISCARD_ENABLE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028A4C_MULTI_GPU_PRIM_DISCARD_ENABLE(x) (((x) >> 24) & 0x1)
+#define C_028A4C_MULTI_GPU_PRIM_DISCARD_ENABLE 0xFEFFFFFF
+#define S_028A4C_FORCE_EOV_CNTDWN_ENABLE(x) (((unsigned)(x) & 0x1) << 25)
+#define G_028A4C_FORCE_EOV_CNTDWN_ENABLE(x) (((x) >> 25) & 0x1)
+#define C_028A4C_FORCE_EOV_CNTDWN_ENABLE 0xFDFFFFFF
+#define S_028A4C_FORCE_EOV_REZ_ENABLE(x) (((unsigned)(x) & 0x1) << 26)
+#define G_028A4C_FORCE_EOV_REZ_ENABLE(x) (((x) >> 26) & 0x1)
+#define C_028A4C_FORCE_EOV_REZ_ENABLE 0xFBFFFFFF
+#define S_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(x) (((x) >> 27) & 0x1)
+#define C_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE 0xF7FFFFFF
+#define S_028A4C_OUT_OF_ORDER_WATER_MARK(x) (((unsigned)(x) & 0x07) << 28)
+#define G_028A4C_OUT_OF_ORDER_WATER_MARK(x) (((x) >> 28) & 0x07)
+#define C_028A4C_OUT_OF_ORDER_WATER_MARK 0x8FFFFFFF
+#define R_028A50_VGT_ENHANCE 0x028A50
+#define R_028A54_VGT_GS_PER_ES 0x028A54
+#define S_028A54_GS_PER_ES(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028A54_GS_PER_ES(x) (((x) >> 0) & 0x7FF)
+#define C_028A54_GS_PER_ES 0xFFFFF800
+#define R_028A58_VGT_ES_PER_GS 0x028A58
+#define S_028A58_ES_PER_GS(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028A58_ES_PER_GS(x) (((x) >> 0) & 0x7FF)
+#define C_028A58_ES_PER_GS 0xFFFFF800
+#define R_028A5C_VGT_GS_PER_VS 0x028A5C
+#define S_028A5C_GS_PER_VS(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028A5C_GS_PER_VS(x) (((x) >> 0) & 0x0F)
+#define C_028A5C_GS_PER_VS 0xFFFFFFF0
+#define R_028A60_VGT_GSVS_RING_OFFSET_1 0x028A60
+#define S_028A60_OFFSET(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028A60_OFFSET(x) (((x) >> 0) & 0x7FFF)
+#define C_028A60_OFFSET 0xFFFF8000
+#define R_028A64_VGT_GSVS_RING_OFFSET_2 0x028A64
+#define S_028A64_OFFSET(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028A64_OFFSET(x) (((x) >> 0) & 0x7FFF)
+#define C_028A64_OFFSET 0xFFFF8000
+#define R_028A68_VGT_GSVS_RING_OFFSET_3 0x028A68
+#define S_028A68_OFFSET(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028A68_OFFSET(x) (((x) >> 0) & 0x7FFF)
+#define C_028A68_OFFSET 0xFFFF8000
+#define R_028A6C_VGT_GS_OUT_PRIM_TYPE 0x028A6C
+#define S_028A6C_OUTPRIM_TYPE(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_028A6C_OUTPRIM_TYPE(x) (((x) >> 0) & 0x3F)
+#define C_028A6C_OUTPRIM_TYPE 0xFFFFFFC0
+#define S_028A6C_OUTPRIM_TYPE_1(x) (((unsigned)(x) & 0x3F) << 8)
+#define G_028A6C_OUTPRIM_TYPE_1(x) (((x) >> 8) & 0x3F)
+#define C_028A6C_OUTPRIM_TYPE_1 0xFFFFC0FF
+#define S_028A6C_OUTPRIM_TYPE_2(x) (((unsigned)(x) & 0x3F) << 16)
+#define G_028A6C_OUTPRIM_TYPE_2(x) (((x) >> 16) & 0x3F)
+#define C_028A6C_OUTPRIM_TYPE_2 0xFFC0FFFF
+#define S_028A6C_OUTPRIM_TYPE_3(x) (((unsigned)(x) & 0x3F) << 22)
+#define G_028A6C_OUTPRIM_TYPE_3(x) (((x) >> 22) & 0x3F)
+#define C_028A6C_OUTPRIM_TYPE_3 0xF03FFFFF
+#define S_028A6C_UNIQUE_TYPE_PER_STREAM(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028A6C_UNIQUE_TYPE_PER_STREAM(x) (((x) >> 31) & 0x1)
+#define C_028A6C_UNIQUE_TYPE_PER_STREAM 0x7FFFFFFF
+#define R_028A70_IA_ENHANCE 0x028A70
+#define R_028A74_VGT_DMA_SIZE 0x028A74
+#define R_028A78_VGT_DMA_MAX_SIZE 0x028A78
+#define R_028A7C_VGT_DMA_INDEX_TYPE 0x028A7C
+#define S_028A7C_INDEX_TYPE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028A7C_INDEX_TYPE(x) (((x) >> 0) & 0x03)
+#define C_028A7C_INDEX_TYPE 0xFFFFFFFC
+#define S_028A7C_SWAP_MODE(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028A7C_SWAP_MODE(x) (((x) >> 2) & 0x03)
+#define C_028A7C_SWAP_MODE 0xFFFFFFF3
+#define S_028A7C_BUF_TYPE(x) (((unsigned)(x) & 0x03) << 4)
+#define G_028A7C_BUF_TYPE(x) (((x) >> 4) & 0x03)
+#define C_028A7C_BUF_TYPE 0xFFFFFFCF
+#define S_028A7C_RDREQ_POLICY(x) (((unsigned)(x) & 0x1) << 6)
+#define G_028A7C_RDREQ_POLICY(x) (((x) >> 6) & 0x1)
+#define C_028A7C_RDREQ_POLICY 0xFFFFFFBF
+#define S_028A7C_PRIMGEN_EN(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028A7C_PRIMGEN_EN(x) (((x) >> 8) & 0x1)
+#define C_028A7C_PRIMGEN_EN 0xFFFFFEFF
+#define S_028A7C_NOT_EOP(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028A7C_NOT_EOP(x) (((x) >> 9) & 0x1)
+#define C_028A7C_NOT_EOP 0xFFFFFDFF
+#define S_028A7C_REQ_PATH(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028A7C_REQ_PATH(x) (((x) >> 10) & 0x1)
+#define C_028A7C_REQ_PATH 0xFFFFFBFF
+#define R_028A80_WD_ENHANCE 0x028A80
+#define R_028A84_VGT_PRIMITIVEID_EN 0x028A84
+#define S_028A84_PRIMITIVEID_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A84_PRIMITIVEID_EN(x) (((x) >> 0) & 0x1)
+#define C_028A84_PRIMITIVEID_EN 0xFFFFFFFE
+#define S_028A84_DISABLE_RESET_ON_EOI(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A84_DISABLE_RESET_ON_EOI(x) (((x) >> 1) & 0x1)
+#define C_028A84_DISABLE_RESET_ON_EOI 0xFFFFFFFD
+#define S_028A84_NGG_DISABLE_PROVOK_REUSE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A84_NGG_DISABLE_PROVOK_REUSE(x) (((x) >> 2) & 0x1)
+#define C_028A84_NGG_DISABLE_PROVOK_REUSE 0xFFFFFFFB
+#define R_028A88_VGT_DMA_NUM_INSTANCES 0x028A88
+#define R_028A8C_VGT_PRIMITIVEID_RESET 0x028A8C
+#define R_028A90_VGT_EVENT_INITIATOR 0x028A90
+#define S_028A90_EVENT_TYPE(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_028A90_EVENT_TYPE(x) (((x) >> 0) & 0x3F)
+#define C_028A90_EVENT_TYPE 0xFFFFFFC0
+#define V_028A90_SAMPLE_STREAMOUTSTATS1 0x01
+#define V_028A90_SAMPLE_STREAMOUTSTATS2 0x02
+#define V_028A90_SAMPLE_STREAMOUTSTATS3 0x03
+#define V_028A90_CACHE_FLUSH_TS 0x04
+#define V_028A90_CONTEXT_DONE 0x05
+#define V_028A90_CACHE_FLUSH 0x06
+#define V_028A90_CS_PARTIAL_FLUSH 0x07
+#define V_028A90_VGT_STREAMOUT_SYNC 0x08
+#define V_028A90_VGT_STREAMOUT_RESET 0x0A
+#define V_028A90_END_OF_PIPE_INCR_DE 0x0B
+#define V_028A90_END_OF_PIPE_IB_END 0x0C
+#define V_028A90_RST_PIX_CNT 0x0D
+#define V_028A90_BREAK_BATCH 0x0E /* new */
+#define V_028A90_VS_PARTIAL_FLUSH 0x0F
+#define V_028A90_PS_PARTIAL_FLUSH 0x10
+#define V_028A90_FLUSH_HS_OUTPUT 0x11
+#define V_028A90_FLUSH_DFSM 0x12 /* new */
+#define V_028A90_RESET_TO_LOWEST_VGT 0x13 /* new */
+#define V_028A90_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
+#define V_028A90_ZPASS_DONE 0x15
+#define V_028A90_CACHE_FLUSH_AND_INV_EVENT 0x16
+#define V_028A90_PERFCOUNTER_START 0x17
+#define V_028A90_PERFCOUNTER_STOP 0x18
+#define V_028A90_PIPELINESTAT_START 0x19
+#define V_028A90_PIPELINESTAT_STOP 0x1A
+#define V_028A90_PERFCOUNTER_SAMPLE 0x1B
+#define V_028A90_SAMPLE_PIPELINESTAT 0x1E
+#define V_028A90_SO_VGTSTREAMOUT_FLUSH 0x1F
+#define V_028A90_SAMPLE_STREAMOUTSTATS 0x20
+#define V_028A90_RESET_VTX_CNT 0x21
+#define V_028A90_BLOCK_CONTEXT_DONE 0x22
+#define V_028A90_CS_CONTEXT_DONE 0x23
+#define V_028A90_VGT_FLUSH 0x24
+#define V_028A90_TGID_ROLLOVER 0x25
+#define V_028A90_SC_SEND_DB_VPZ 0x27
+#define V_028A90_BOTTOM_OF_PIPE_TS 0x28
+#define V_028A90_DB_CACHE_FLUSH_AND_INV 0x2A
+#define V_028A90_FLUSH_AND_INV_DB_DATA_TS 0x2B
+#define V_028A90_FLUSH_AND_INV_DB_META 0x2C
+#define V_028A90_FLUSH_AND_INV_CB_DATA_TS 0x2D
+#define V_028A90_FLUSH_AND_INV_CB_META 0x2E
+#define V_028A90_CS_DONE 0x2F
+#define V_028A90_PS_DONE 0x30
+#define V_028A90_FLUSH_AND_INV_CB_PIXEL_DATA 0x31
+#define V_028A90_THREAD_TRACE_START 0x33
+#define V_028A90_THREAD_TRACE_STOP 0x34
+#define V_028A90_THREAD_TRACE_MARKER 0x35
+#define V_028A90_THREAD_TRACE_FLUSH 0x36
+#define V_028A90_THREAD_TRACE_FINISH 0x37
+#define V_028A90_PIXEL_PIPE_STAT_CONTROL 0x38
+#define V_028A90_PIXEL_PIPE_STAT_DUMP 0x39
+#define V_028A90_PIXEL_PIPE_STAT_RESET 0x3A
+#define V_028A90_ENABLE_NGG_PIPELINE 0x3D /* new */
+#define V_028A90_ENABLE_LEGACY_PIPELINE 0x3E /* new */
+#define S_028A90_ADDRESS_HI_GFX9(x) (((unsigned)(x) & 0x1FFFF) << 10)
+#define G_028A90_ADDRESS_HI_GFX9(x) (((x) >> 10) & 0x1FFFF)
+#define C_028A90_ADDRESS_HI_GFX9 0xF80003FF
+#define S_028A90_EXTENDED_EVENT(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028A90_EXTENDED_EVENT(x) (((x) >> 27) & 0x1)
+#define C_028A90_EXTENDED_EVENT 0xF7FFFFFF
+#define R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP 0x028A94
+#define S_028A94_MAX_PRIMS_PER_SUBGROUP(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028A94_MAX_PRIMS_PER_SUBGROUP(x) (((x) >> 0) & 0xFFFF)
+#define C_028A94_MAX_PRIMS_PER_SUBGROUP 0xFFFF0000
+#define R_028A98_VGT_DRAW_PAYLOAD_CNTL 0x028A98
+#define S_028A98_OBJPRIM_ID_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A98_OBJPRIM_ID_EN(x) (((x) >> 0) & 0x1)
+#define C_028A98_OBJPRIM_ID_EN 0xFFFFFFFE
+#define S_028A98_EN_REG_RT_INDEX(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028A98_EN_REG_RT_INDEX(x) (((x) >> 1) & 0x1)
+#define C_028A98_EN_REG_RT_INDEX 0xFFFFFFFD
+#define S_028A98_EN_PIPELINE_PRIMID(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028A98_EN_PIPELINE_PRIMID(x) (((x) >> 2) & 0x1)
+#define C_028A98_EN_PIPELINE_PRIMID 0xFFFFFFFB
+#define S_028A98_OBJECT_ID_INST_EN(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028A98_OBJECT_ID_INST_EN(x) (((x) >> 3) & 0x1)
+#define C_028A98_OBJECT_ID_INST_EN 0xFFFFFFF7
+#define R_028A9C_VGT_INDEX_PAYLOAD_CNTL 0x028A9C
+#define S_028A9C_COMPOUND_INDEX_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028A9C_COMPOUND_INDEX_EN(x) (((x) >> 0) & 0x1)
+#define C_028A9C_COMPOUND_INDEX_EN 0xFFFFFFFE
+#define R_028AA0_VGT_INSTANCE_STEP_RATE_0 0x028AA0
+#define R_028AA4_VGT_INSTANCE_STEP_RATE_1 0x028AA4
+#define R_028AAC_VGT_ESGS_RING_ITEMSIZE 0x028AAC
+#define S_028AAC_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028AAC_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028AAC_ITEMSIZE 0xFFFF8000
+#define R_028AB0_VGT_GSVS_RING_ITEMSIZE 0x028AB0
+#define S_028AB0_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028AB0_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028AB0_ITEMSIZE 0xFFFF8000
+#define R_028AB4_VGT_REUSE_OFF 0x028AB4
+#define S_028AB4_REUSE_OFF(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028AB4_REUSE_OFF(x) (((x) >> 0) & 0x1)
+#define C_028AB4_REUSE_OFF 0xFFFFFFFE
+#define R_028AB8_VGT_VTX_CNT_EN 0x028AB8
+#define S_028AB8_VTX_CNT_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028AB8_VTX_CNT_EN(x) (((x) >> 0) & 0x1)
+#define C_028AB8_VTX_CNT_EN 0xFFFFFFFE
+#define R_028ABC_DB_HTILE_SURFACE 0x028ABC
+#define S_028ABC_FULL_CACHE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028ABC_FULL_CACHE(x) (((x) >> 1) & 0x1)
+#define C_028ABC_FULL_CACHE 0xFFFFFFFD
+#define S_028ABC_HTILE_USES_PRELOAD_WIN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028ABC_HTILE_USES_PRELOAD_WIN(x) (((x) >> 2) & 0x1)
+#define C_028ABC_HTILE_USES_PRELOAD_WIN 0xFFFFFFFB
+#define S_028ABC_PRELOAD(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028ABC_PRELOAD(x) (((x) >> 3) & 0x1)
+#define C_028ABC_PRELOAD 0xFFFFFFF7
+#define S_028ABC_PREFETCH_WIDTH(x) (((unsigned)(x) & 0x3F) << 4)
+#define G_028ABC_PREFETCH_WIDTH(x) (((x) >> 4) & 0x3F)
+#define C_028ABC_PREFETCH_WIDTH 0xFFFFFC0F
+#define S_028ABC_PREFETCH_HEIGHT(x) (((unsigned)(x) & 0x3F) << 10)
+#define G_028ABC_PREFETCH_HEIGHT(x) (((x) >> 10) & 0x3F)
+#define C_028ABC_PREFETCH_HEIGHT 0xFFFF03FF
+#define S_028ABC_DST_OUTSIDE_ZERO_TO_ONE(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028ABC_DST_OUTSIDE_ZERO_TO_ONE(x) (((x) >> 16) & 0x1)
+#define C_028ABC_DST_OUTSIDE_ZERO_TO_ONE 0xFFFEFFFF
+#define S_028ABC_PIPE_ALIGNED(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028ABC_PIPE_ALIGNED(x) (((x) >> 18) & 0x1)
+#define C_028ABC_PIPE_ALIGNED 0xFFFBFFFF
+#define S_028ABC_RB_ALIGNED(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028ABC_RB_ALIGNED(x) (((x) >> 19) & 0x1)
+#define C_028ABC_RB_ALIGNED 0xFFF7FFFF
+#define R_028AC0_DB_SRESULTS_COMPARE_STATE0 0x028AC0
+#define S_028AC0_COMPAREFUNC0(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028AC0_COMPAREFUNC0(x) (((x) >> 0) & 0x07)
+#define C_028AC0_COMPAREFUNC0 0xFFFFFFF8
+#define S_028AC0_COMPAREVALUE0(x) (((unsigned)(x) & 0xFF) << 4)
+#define G_028AC0_COMPAREVALUE0(x) (((x) >> 4) & 0xFF)
+#define C_028AC0_COMPAREVALUE0 0xFFFFF00F
+#define S_028AC0_COMPAREMASK0(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_028AC0_COMPAREMASK0(x) (((x) >> 12) & 0xFF)
+#define C_028AC0_COMPAREMASK0 0xFFF00FFF
+#define S_028AC0_ENABLE0(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028AC0_ENABLE0(x) (((x) >> 24) & 0x1)
+#define C_028AC0_ENABLE0 0xFEFFFFFF
+#define R_028AC4_DB_SRESULTS_COMPARE_STATE1 0x028AC4
+#define S_028AC4_COMPAREFUNC1(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028AC4_COMPAREFUNC1(x) (((x) >> 0) & 0x07)
+#define C_028AC4_COMPAREFUNC1 0xFFFFFFF8
+#define S_028AC4_COMPAREVALUE1(x) (((unsigned)(x) & 0xFF) << 4)
+#define G_028AC4_COMPAREVALUE1(x) (((x) >> 4) & 0xFF)
+#define C_028AC4_COMPAREVALUE1 0xFFFFF00F
+#define S_028AC4_COMPAREMASK1(x) (((unsigned)(x) & 0xFF) << 12)
+#define G_028AC4_COMPAREMASK1(x) (((x) >> 12) & 0xFF)
+#define C_028AC4_COMPAREMASK1 0xFFF00FFF
+#define S_028AC4_ENABLE1(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028AC4_ENABLE1(x) (((x) >> 24) & 0x1)
+#define C_028AC4_ENABLE1 0xFEFFFFFF
+#define R_028AC8_DB_PRELOAD_CONTROL 0x028AC8
+#define S_028AC8_START_X(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028AC8_START_X(x) (((x) >> 0) & 0xFF)
+#define C_028AC8_START_X 0xFFFFFF00
+#define S_028AC8_START_Y(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028AC8_START_Y(x) (((x) >> 8) & 0xFF)
+#define C_028AC8_START_Y 0xFFFF00FF
+#define S_028AC8_MAX_X(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028AC8_MAX_X(x) (((x) >> 16) & 0xFF)
+#define C_028AC8_MAX_X 0xFF00FFFF
+#define S_028AC8_MAX_Y(x) (((unsigned)(x) & 0xFF) << 24)
+#define G_028AC8_MAX_Y(x) (((x) >> 24) & 0xFF)
+#define C_028AC8_MAX_Y 0x00FFFFFF
+#define R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0 0x028AD0
+#define R_028AD4_VGT_STRMOUT_VTX_STRIDE_0 0x028AD4
+#define S_028AD4_STRIDE(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_028AD4_STRIDE(x) (((x) >> 0) & 0x3FF)
+#define C_028AD4_STRIDE 0xFFFFFC00
+#define R_028ADC_VGT_STRMOUT_BUFFER_OFFSET_0 0x028ADC
+#define R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1 0x028AE0
+#define R_028AE4_VGT_STRMOUT_VTX_STRIDE_1 0x028AE4
+#define S_028AE4_STRIDE(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_028AE4_STRIDE(x) (((x) >> 0) & 0x3FF)
+#define C_028AE4_STRIDE 0xFFFFFC00
+#define R_028AEC_VGT_STRMOUT_BUFFER_OFFSET_1 0x028AEC
+#define R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2 0x028AF0
+#define R_028AF4_VGT_STRMOUT_VTX_STRIDE_2 0x028AF4
+#define S_028AF4_STRIDE(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_028AF4_STRIDE(x) (((x) >> 0) & 0x3FF)
+#define C_028AF4_STRIDE 0xFFFFFC00
+#define R_028AFC_VGT_STRMOUT_BUFFER_OFFSET_2 0x028AFC
+#define R_028B00_VGT_STRMOUT_BUFFER_SIZE_3 0x028B00
+#define R_028B04_VGT_STRMOUT_VTX_STRIDE_3 0x028B04
+#define S_028B04_STRIDE(x) (((unsigned)(x) & 0x3FF) << 0)
+#define G_028B04_STRIDE(x) (((x) >> 0) & 0x3FF)
+#define C_028B04_STRIDE 0xFFFFFC00
+#define R_028B0C_VGT_STRMOUT_BUFFER_OFFSET_3 0x028B0C
+#define R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET 0x028B28
+#define R_028B2C_VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE 0x028B2C
+#define R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE 0x028B30
+#define S_028B30_VERTEX_STRIDE(x) (((unsigned)(x) & 0x1FF) << 0)
+#define G_028B30_VERTEX_STRIDE(x) (((x) >> 0) & 0x1FF)
+#define C_028B30_VERTEX_STRIDE 0xFFFFFE00
+#define R_028B38_VGT_GS_MAX_VERT_OUT 0x028B38
+#define S_028B38_MAX_VERT_OUT(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028B38_MAX_VERT_OUT(x) (((x) >> 0) & 0x7FF)
+#define C_028B38_MAX_VERT_OUT 0xFFFFF800
+#define R_028B50_VGT_TESS_DISTRIBUTION 0x028B50
+#define S_028B50_ACCUM_ISOLINE(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028B50_ACCUM_ISOLINE(x) (((x) >> 0) & 0xFF)
+#define C_028B50_ACCUM_ISOLINE 0xFFFFFF00
+#define S_028B50_ACCUM_TRI(x) (((unsigned)(x) & 0xFF) << 8)
+#define G_028B50_ACCUM_TRI(x) (((x) >> 8) & 0xFF)
+#define C_028B50_ACCUM_TRI 0xFFFF00FF
+#define S_028B50_ACCUM_QUAD(x) (((unsigned)(x) & 0xFF) << 16)
+#define G_028B50_ACCUM_QUAD(x) (((x) >> 16) & 0xFF)
+#define C_028B50_ACCUM_QUAD 0xFF00FFFF
+#define S_028B50_DONUT_SPLIT(x) (((unsigned)(x) & 0x1F) << 24)
+#define G_028B50_DONUT_SPLIT(x) (((x) >> 24) & 0x1F)
+#define C_028B50_DONUT_SPLIT 0xE0FFFFFF
+#define S_028B50_TRAP_SPLIT(x) (((unsigned)(x) & 0x07) << 29)
+#define G_028B50_TRAP_SPLIT(x) (((x) >> 29) & 0x07)
+#define C_028B50_TRAP_SPLIT 0x1FFFFFFF
+#define R_028B54_VGT_SHADER_STAGES_EN 0x028B54
+#define S_028B54_LS_EN(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028B54_LS_EN(x) (((x) >> 0) & 0x03)
+#define C_028B54_LS_EN 0xFFFFFFFC
+#define S_028B54_HS_EN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028B54_HS_EN(x) (((x) >> 2) & 0x1)
+#define C_028B54_HS_EN 0xFFFFFFFB
+#define S_028B54_ES_EN(x) (((unsigned)(x) & 0x03) << 3)
+#define G_028B54_ES_EN(x) (((x) >> 3) & 0x03)
+#define C_028B54_ES_EN 0xFFFFFFE7
+#define S_028B54_GS_EN(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028B54_GS_EN(x) (((x) >> 5) & 0x1)
+#define C_028B54_GS_EN 0xFFFFFFDF
+#define S_028B54_VS_EN(x) (((unsigned)(x) & 0x03) << 6)
+#define G_028B54_VS_EN(x) (((x) >> 6) & 0x03)
+#define C_028B54_VS_EN 0xFFFFFF3F
+#define S_028B54_DISPATCH_DRAW_EN(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028B54_DISPATCH_DRAW_EN(x) (((x) >> 9) & 0x1)
+#define C_028B54_DISPATCH_DRAW_EN 0xFFFFFDFF
+#define S_028B54_DIS_DEALLOC_ACCUM_0(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028B54_DIS_DEALLOC_ACCUM_0(x) (((x) >> 10) & 0x1)
+#define C_028B54_DIS_DEALLOC_ACCUM_0 0xFFFFFBFF
+#define S_028B54_DIS_DEALLOC_ACCUM_1(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028B54_DIS_DEALLOC_ACCUM_1(x) (((x) >> 11) & 0x1)
+#define C_028B54_DIS_DEALLOC_ACCUM_1 0xFFFFF7FF
+#define S_028B54_VS_WAVE_ID_EN(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028B54_VS_WAVE_ID_EN(x) (((x) >> 12) & 0x1)
+#define C_028B54_VS_WAVE_ID_EN 0xFFFFEFFF
+#define S_028B54_PRIMGEN_EN(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028B54_PRIMGEN_EN(x) (((x) >> 13) & 0x1)
+#define C_028B54_PRIMGEN_EN 0xFFFFDFFF
+#define S_028B54_ORDERED_ID_MODE(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028B54_ORDERED_ID_MODE(x) (((x) >> 14) & 0x1)
+#define C_028B54_ORDERED_ID_MODE 0xFFFFBFFF
+#define S_028B54_MAX_PRIMGRP_IN_WAVE(x) (((unsigned)(x) & 0x0F) << 15)
+#define G_028B54_MAX_PRIMGRP_IN_WAVE(x) (((x) >> 15) & 0x0F)
+#define C_028B54_MAX_PRIMGRP_IN_WAVE 0xFFF87FFF
+#define S_028B54_GS_FAST_LAUNCH(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028B54_GS_FAST_LAUNCH(x) (((x) >> 19) & 0x1)
+#define C_028B54_GS_FAST_LAUNCH 0xFFF7FFFF
+#define R_028B58_VGT_LS_HS_CONFIG 0x028B58
+#define S_028B58_NUM_PATCHES(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028B58_NUM_PATCHES(x) (((x) >> 0) & 0xFF)
+#define C_028B58_NUM_PATCHES 0xFFFFFF00
+#define S_028B58_HS_NUM_INPUT_CP(x) (((unsigned)(x) & 0x3F) << 8)
+#define G_028B58_HS_NUM_INPUT_CP(x) (((x) >> 8) & 0x3F)
+#define C_028B58_HS_NUM_INPUT_CP 0xFFFFC0FF
+#define S_028B58_HS_NUM_OUTPUT_CP(x) (((unsigned)(x) & 0x3F) << 14)
+#define G_028B58_HS_NUM_OUTPUT_CP(x) (((x) >> 14) & 0x3F)
+#define C_028B58_HS_NUM_OUTPUT_CP 0xFFF03FFF
+#define R_028B5C_VGT_GS_VERT_ITEMSIZE 0x028B5C
+#define S_028B5C_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028B5C_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028B5C_ITEMSIZE 0xFFFF8000
+#define R_028B60_VGT_GS_VERT_ITEMSIZE_1 0x028B60
+#define S_028B60_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028B60_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028B60_ITEMSIZE 0xFFFF8000
+#define R_028B64_VGT_GS_VERT_ITEMSIZE_2 0x028B64
+#define S_028B64_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028B64_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028B64_ITEMSIZE 0xFFFF8000
+#define R_028B68_VGT_GS_VERT_ITEMSIZE_3 0x028B68
+#define S_028B68_ITEMSIZE(x) (((unsigned)(x) & 0x7FFF) << 0)
+#define G_028B68_ITEMSIZE(x) (((x) >> 0) & 0x7FFF)
+#define C_028B68_ITEMSIZE 0xFFFF8000
+#define R_028B6C_VGT_TF_PARAM 0x028B6C
+#define S_028B6C_TYPE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028B6C_TYPE(x) (((x) >> 0) & 0x03)
+#define C_028B6C_TYPE 0xFFFFFFFC
+#define S_028B6C_PARTITIONING(x) (((unsigned)(x) & 0x07) << 2)
+#define G_028B6C_PARTITIONING(x) (((x) >> 2) & 0x07)
+#define C_028B6C_PARTITIONING 0xFFFFFFE3
+#define S_028B6C_TOPOLOGY(x) (((unsigned)(x) & 0x07) << 5)
+#define G_028B6C_TOPOLOGY(x) (((x) >> 5) & 0x07)
+#define C_028B6C_TOPOLOGY 0xFFFFFF1F
+#define S_028B6C_RESERVED_REDUC_AXIS(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028B6C_RESERVED_REDUC_AXIS(x) (((x) >> 8) & 0x1)
+#define C_028B6C_RESERVED_REDUC_AXIS 0xFFFFFEFF
+#define S_028B6C_DEPRECATED(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028B6C_DEPRECATED(x) (((x) >> 9) & 0x1)
+#define C_028B6C_DEPRECATED 0xFFFFFDFF
+#define S_028B6C_DISABLE_DONUTS(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028B6C_DISABLE_DONUTS(x) (((x) >> 14) & 0x1)
+#define C_028B6C_DISABLE_DONUTS 0xFFFFBFFF
+#define S_028B6C_RDREQ_POLICY(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028B6C_RDREQ_POLICY(x) (((x) >> 15) & 0x1)
+#define C_028B6C_RDREQ_POLICY 0xFFFF7FFF
+#define S_028B6C_DISTRIBUTION_MODE(x) (((unsigned)(x) & 0x03) << 17)
+#define G_028B6C_DISTRIBUTION_MODE(x) (((x) >> 17) & 0x03)
+#define C_028B6C_DISTRIBUTION_MODE 0xFFF9FFFF
+#define R_028B70_DB_ALPHA_TO_MASK 0x028B70
+#define S_028B70_ALPHA_TO_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028B70_ALPHA_TO_MASK_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028B70_ALPHA_TO_MASK_ENABLE 0xFFFFFFFE
+#define S_028B70_ALPHA_TO_MASK_OFFSET0(x) (((unsigned)(x) & 0x03) << 8)
+#define G_028B70_ALPHA_TO_MASK_OFFSET0(x) (((x) >> 8) & 0x03)
+#define C_028B70_ALPHA_TO_MASK_OFFSET0 0xFFFFFCFF
+#define S_028B70_ALPHA_TO_MASK_OFFSET1(x) (((unsigned)(x) & 0x03) << 10)
+#define G_028B70_ALPHA_TO_MASK_OFFSET1(x) (((x) >> 10) & 0x03)
+#define C_028B70_ALPHA_TO_MASK_OFFSET1 0xFFFFF3FF
+#define S_028B70_ALPHA_TO_MASK_OFFSET2(x) (((unsigned)(x) & 0x03) << 12)
+#define G_028B70_ALPHA_TO_MASK_OFFSET2(x) (((x) >> 12) & 0x03)
+#define C_028B70_ALPHA_TO_MASK_OFFSET2 0xFFFFCFFF
+#define S_028B70_ALPHA_TO_MASK_OFFSET3(x) (((unsigned)(x) & 0x03) << 14)
+#define G_028B70_ALPHA_TO_MASK_OFFSET3(x) (((x) >> 14) & 0x03)
+#define C_028B70_ALPHA_TO_MASK_OFFSET3 0xFFFF3FFF
+#define S_028B70_OFFSET_ROUND(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028B70_OFFSET_ROUND(x) (((x) >> 16) & 0x1)
+#define C_028B70_OFFSET_ROUND 0xFFFEFFFF
+#define R_028B74_VGT_DISPATCH_DRAW_INDEX 0x028B74
+#define R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL 0x028B78
+#define S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(x) (((x) >> 0) & 0xFF)
+#define C_028B78_POLY_OFFSET_NEG_NUM_DB_BITS 0xFFFFFF00
+#define S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(x) (((unsigned)(x) & 0x1) << 8)
+#define G_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(x) (((x) >> 8) & 0x1)
+#define C_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT 0xFFFFFEFF
+#define R_028B7C_PA_SU_POLY_OFFSET_CLAMP 0x028B7C
+#define R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE 0x028B80
+#define R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET 0x028B84
+#define R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE 0x028B88
+#define R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET 0x028B8C
+#define R_028B90_VGT_GS_INSTANCE_CNT 0x028B90
+#define S_028B90_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028B90_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028B90_ENABLE 0xFFFFFFFE
+#define S_028B90_CNT(x) (((unsigned)(x) & 0x7F) << 2)
+#define G_028B90_CNT(x) (((x) >> 2) & 0x7F)
+#define C_028B90_CNT 0xFFFFFE03
+#define R_028B94_VGT_STRMOUT_CONFIG 0x028B94
+#define S_028B94_STREAMOUT_0_EN(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028B94_STREAMOUT_0_EN(x) (((x) >> 0) & 0x1)
+#define C_028B94_STREAMOUT_0_EN 0xFFFFFFFE
+#define S_028B94_STREAMOUT_1_EN(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028B94_STREAMOUT_1_EN(x) (((x) >> 1) & 0x1)
+#define C_028B94_STREAMOUT_1_EN 0xFFFFFFFD
+#define S_028B94_STREAMOUT_2_EN(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028B94_STREAMOUT_2_EN(x) (((x) >> 2) & 0x1)
+#define C_028B94_STREAMOUT_2_EN 0xFFFFFFFB
+#define S_028B94_STREAMOUT_3_EN(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028B94_STREAMOUT_3_EN(x) (((x) >> 3) & 0x1)
+#define C_028B94_STREAMOUT_3_EN 0xFFFFFFF7
+#define S_028B94_RAST_STREAM(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028B94_RAST_STREAM(x) (((x) >> 4) & 0x07)
+#define C_028B94_RAST_STREAM 0xFFFFFF8F
+#define S_028B94_EN_PRIMS_NEEDED_CNT(x) (((unsigned)(x) & 0x1) << 7)
+#define G_028B94_EN_PRIMS_NEEDED_CNT(x) (((x) >> 7) & 0x1)
+#define C_028B94_EN_PRIMS_NEEDED_CNT 0xFFFFFF7F
+#define S_028B94_RAST_STREAM_MASK(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028B94_RAST_STREAM_MASK(x) (((x) >> 8) & 0x0F)
+#define C_028B94_RAST_STREAM_MASK 0xFFFFF0FF
+#define S_028B94_USE_RAST_STREAM_MASK(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028B94_USE_RAST_STREAM_MASK(x) (((x) >> 31) & 0x1)
+#define C_028B94_USE_RAST_STREAM_MASK 0x7FFFFFFF
+#define R_028B98_VGT_STRMOUT_BUFFER_CONFIG 0x028B98
+#define S_028B98_STREAM_0_BUFFER_EN(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028B98_STREAM_0_BUFFER_EN(x) (((x) >> 0) & 0x0F)
+#define C_028B98_STREAM_0_BUFFER_EN 0xFFFFFFF0
+#define S_028B98_STREAM_1_BUFFER_EN(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028B98_STREAM_1_BUFFER_EN(x) (((x) >> 4) & 0x0F)
+#define C_028B98_STREAM_1_BUFFER_EN 0xFFFFFF0F
+#define S_028B98_STREAM_2_BUFFER_EN(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028B98_STREAM_2_BUFFER_EN(x) (((x) >> 8) & 0x0F)
+#define C_028B98_STREAM_2_BUFFER_EN 0xFFFFF0FF
+#define S_028B98_STREAM_3_BUFFER_EN(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028B98_STREAM_3_BUFFER_EN(x) (((x) >> 12) & 0x0F)
+#define C_028B98_STREAM_3_BUFFER_EN 0xFFFF0FFF
+#define R_028B9C_VGT_DMA_EVENT_INITIATOR 0x028B9C
+#define S_028B9C_EVENT_TYPE(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_028B9C_EVENT_TYPE(x) (((x) >> 0) & 0x3F)
+#define C_028B9C_EVENT_TYPE 0xFFFFFFC0
+#define S_028B9C_ADDRESS_HI(x) (((unsigned)(x) & 0x1FFFF) << 10)
+#define G_028B9C_ADDRESS_HI(x) (((x) >> 10) & 0x1FFFF)
+#define C_028B9C_ADDRESS_HI 0xF80003FF
+#define S_028B9C_EXTENDED_EVENT(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028B9C_EXTENDED_EVENT(x) (((x) >> 27) & 0x1)
+#define C_028B9C_EXTENDED_EVENT 0xF7FFFFFF
+#define R_028BD4_PA_SC_CENTROID_PRIORITY_0 0x028BD4
+#define S_028BD4_DISTANCE_0(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028BD4_DISTANCE_0(x) (((x) >> 0) & 0x0F)
+#define C_028BD4_DISTANCE_0 0xFFFFFFF0
+#define S_028BD4_DISTANCE_1(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028BD4_DISTANCE_1(x) (((x) >> 4) & 0x0F)
+#define C_028BD4_DISTANCE_1 0xFFFFFF0F
+#define S_028BD4_DISTANCE_2(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028BD4_DISTANCE_2(x) (((x) >> 8) & 0x0F)
+#define C_028BD4_DISTANCE_2 0xFFFFF0FF
+#define S_028BD4_DISTANCE_3(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028BD4_DISTANCE_3(x) (((x) >> 12) & 0x0F)
+#define C_028BD4_DISTANCE_3 0xFFFF0FFF
+#define S_028BD4_DISTANCE_4(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028BD4_DISTANCE_4(x) (((x) >> 16) & 0x0F)
+#define C_028BD4_DISTANCE_4 0xFFF0FFFF
+#define S_028BD4_DISTANCE_5(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028BD4_DISTANCE_5(x) (((x) >> 20) & 0x0F)
+#define C_028BD4_DISTANCE_5 0xFF0FFFFF
+#define S_028BD4_DISTANCE_6(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028BD4_DISTANCE_6(x) (((x) >> 24) & 0x0F)
+#define C_028BD4_DISTANCE_6 0xF0FFFFFF
+#define S_028BD4_DISTANCE_7(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028BD4_DISTANCE_7(x) (((x) >> 28) & 0x0F)
+#define C_028BD4_DISTANCE_7 0x0FFFFFFF
+#define R_028BD8_PA_SC_CENTROID_PRIORITY_1 0x028BD8
+#define S_028BD8_DISTANCE_8(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028BD8_DISTANCE_8(x) (((x) >> 0) & 0x0F)
+#define C_028BD8_DISTANCE_8 0xFFFFFFF0
+#define S_028BD8_DISTANCE_9(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028BD8_DISTANCE_9(x) (((x) >> 4) & 0x0F)
+#define C_028BD8_DISTANCE_9 0xFFFFFF0F
+#define S_028BD8_DISTANCE_10(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028BD8_DISTANCE_10(x) (((x) >> 8) & 0x0F)
+#define C_028BD8_DISTANCE_10 0xFFFFF0FF
+#define S_028BD8_DISTANCE_11(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028BD8_DISTANCE_11(x) (((x) >> 12) & 0x0F)
+#define C_028BD8_DISTANCE_11 0xFFFF0FFF
+#define S_028BD8_DISTANCE_12(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028BD8_DISTANCE_12(x) (((x) >> 16) & 0x0F)
+#define C_028BD8_DISTANCE_12 0xFFF0FFFF
+#define S_028BD8_DISTANCE_13(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028BD8_DISTANCE_13(x) (((x) >> 20) & 0x0F)
+#define C_028BD8_DISTANCE_13 0xFF0FFFFF
+#define S_028BD8_DISTANCE_14(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028BD8_DISTANCE_14(x) (((x) >> 24) & 0x0F)
+#define C_028BD8_DISTANCE_14 0xF0FFFFFF
+#define S_028BD8_DISTANCE_15(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028BD8_DISTANCE_15(x) (((x) >> 28) & 0x0F)
+#define C_028BD8_DISTANCE_15 0x0FFFFFFF
+#define R_028BDC_PA_SC_LINE_CNTL 0x028BDC
+#define S_028BDC_EXPAND_LINE_WIDTH(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028BDC_EXPAND_LINE_WIDTH(x) (((x) >> 9) & 0x1)
+#define C_028BDC_EXPAND_LINE_WIDTH 0xFFFFFDFF
+#define S_028BDC_LAST_PIXEL(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028BDC_LAST_PIXEL(x) (((x) >> 10) & 0x1)
+#define C_028BDC_LAST_PIXEL 0xFFFFFBFF
+#define S_028BDC_PERPENDICULAR_ENDCAP_ENA(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028BDC_PERPENDICULAR_ENDCAP_ENA(x) (((x) >> 11) & 0x1)
+#define C_028BDC_PERPENDICULAR_ENDCAP_ENA 0xFFFFF7FF
+#define S_028BDC_DX10_DIAMOND_TEST_ENA(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028BDC_DX10_DIAMOND_TEST_ENA(x) (((x) >> 12) & 0x1)
+#define C_028BDC_DX10_DIAMOND_TEST_ENA 0xFFFFEFFF
+#define R_028BE0_PA_SC_AA_CONFIG 0x028BE0
+#define S_028BE0_MSAA_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028BE0_MSAA_NUM_SAMPLES(x) (((x) >> 0) & 0x07)
+#define C_028BE0_MSAA_NUM_SAMPLES 0xFFFFFFF8
+#define S_028BE0_AA_MASK_CENTROID_DTMN(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028BE0_AA_MASK_CENTROID_DTMN(x) (((x) >> 4) & 0x1)
+#define C_028BE0_AA_MASK_CENTROID_DTMN 0xFFFFFFEF
+#define S_028BE0_MAX_SAMPLE_DIST(x) (((unsigned)(x) & 0x0F) << 13)
+#define G_028BE0_MAX_SAMPLE_DIST(x) (((x) >> 13) & 0x0F)
+#define C_028BE0_MAX_SAMPLE_DIST 0xFFFE1FFF
+#define S_028BE0_MSAA_EXPOSED_SAMPLES(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028BE0_MSAA_EXPOSED_SAMPLES(x) (((x) >> 20) & 0x07)
+#define C_028BE0_MSAA_EXPOSED_SAMPLES 0xFF8FFFFF
+#define S_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((unsigned)(x) & 0x03) << 24)
+#define G_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((x) >> 24) & 0x03)
+#define C_028BE0_DETAIL_TO_EXPOSED_MODE 0xFCFFFFFF
+#define S_028BE0_COVERAGE_TO_SHADER_SELECT(x) (((unsigned)(x) & 0x03) << 26)
+#define G_028BE0_COVERAGE_TO_SHADER_SELECT(x) (((x) >> 26) & 0x03)
+#define C_028BE0_COVERAGE_TO_SHADER_SELECT 0xF3FFFFFF
+#define R_028BE4_PA_SU_VTX_CNTL 0x028BE4
+#define S_028BE4_PIX_CENTER(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028BE4_PIX_CENTER(x) (((x) >> 0) & 0x1)
+#define C_028BE4_PIX_CENTER 0xFFFFFFFE
+#define S_028BE4_ROUND_MODE(x) (((unsigned)(x) & 0x03) << 1)
+#define G_028BE4_ROUND_MODE(x) (((x) >> 1) & 0x03)
+#define C_028BE4_ROUND_MODE 0xFFFFFFF9
+#define S_028BE4_QUANT_MODE(x) (((unsigned)(x) & 0x07) << 3)
+#define G_028BE4_QUANT_MODE(x) (((x) >> 3) & 0x07)
+#define C_028BE4_QUANT_MODE 0xFFFFFFC7
+#define R_028BE8_PA_CL_GB_VERT_CLIP_ADJ 0x028BE8
+#define R_028BEC_PA_CL_GB_VERT_DISC_ADJ 0x028BEC
+#define R_028BF0_PA_CL_GB_HORZ_CLIP_ADJ 0x028BF0
+#define R_028BF4_PA_CL_GB_HORZ_DISC_ADJ 0x028BF4
+#define R_028BF8_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0 0x028BF8
+#define S_028BF8_S0_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028BF8_S0_X(x) (((x) >> 0) & 0x0F)
+#define C_028BF8_S0_X 0xFFFFFFF0
+#define S_028BF8_S0_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028BF8_S0_Y(x) (((x) >> 4) & 0x0F)
+#define C_028BF8_S0_Y 0xFFFFFF0F
+#define S_028BF8_S1_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028BF8_S1_X(x) (((x) >> 8) & 0x0F)
+#define C_028BF8_S1_X 0xFFFFF0FF
+#define S_028BF8_S1_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028BF8_S1_Y(x) (((x) >> 12) & 0x0F)
+#define C_028BF8_S1_Y 0xFFFF0FFF
+#define S_028BF8_S2_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028BF8_S2_X(x) (((x) >> 16) & 0x0F)
+#define C_028BF8_S2_X 0xFFF0FFFF
+#define S_028BF8_S2_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028BF8_S2_Y(x) (((x) >> 20) & 0x0F)
+#define C_028BF8_S2_Y 0xFF0FFFFF
+#define S_028BF8_S3_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028BF8_S3_X(x) (((x) >> 24) & 0x0F)
+#define C_028BF8_S3_X 0xF0FFFFFF
+#define S_028BF8_S3_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028BF8_S3_Y(x) (((x) >> 28) & 0x0F)
+#define C_028BF8_S3_Y 0x0FFFFFFF
+#define R_028BFC_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1 0x028BFC
+#define S_028BFC_S4_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028BFC_S4_X(x) (((x) >> 0) & 0x0F)
+#define C_028BFC_S4_X 0xFFFFFFF0
+#define S_028BFC_S4_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028BFC_S4_Y(x) (((x) >> 4) & 0x0F)
+#define C_028BFC_S4_Y 0xFFFFFF0F
+#define S_028BFC_S5_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028BFC_S5_X(x) (((x) >> 8) & 0x0F)
+#define C_028BFC_S5_X 0xFFFFF0FF
+#define S_028BFC_S5_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028BFC_S5_Y(x) (((x) >> 12) & 0x0F)
+#define C_028BFC_S5_Y 0xFFFF0FFF
+#define S_028BFC_S6_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028BFC_S6_X(x) (((x) >> 16) & 0x0F)
+#define C_028BFC_S6_X 0xFFF0FFFF
+#define S_028BFC_S6_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028BFC_S6_Y(x) (((x) >> 20) & 0x0F)
+#define C_028BFC_S6_Y 0xFF0FFFFF
+#define S_028BFC_S7_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028BFC_S7_X(x) (((x) >> 24) & 0x0F)
+#define C_028BFC_S7_X 0xF0FFFFFF
+#define S_028BFC_S7_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028BFC_S7_Y(x) (((x) >> 28) & 0x0F)
+#define C_028BFC_S7_Y 0x0FFFFFFF
+#define R_028C00_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2 0x028C00
+#define S_028C00_S8_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C00_S8_X(x) (((x) >> 0) & 0x0F)
+#define C_028C00_S8_X 0xFFFFFFF0
+#define S_028C00_S8_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C00_S8_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C00_S8_Y 0xFFFFFF0F
+#define S_028C00_S9_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C00_S9_X(x) (((x) >> 8) & 0x0F)
+#define C_028C00_S9_X 0xFFFFF0FF
+#define S_028C00_S9_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C00_S9_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C00_S9_Y 0xFFFF0FFF
+#define S_028C00_S10_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C00_S10_X(x) (((x) >> 16) & 0x0F)
+#define C_028C00_S10_X 0xFFF0FFFF
+#define S_028C00_S10_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C00_S10_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C00_S10_Y 0xFF0FFFFF
+#define S_028C00_S11_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C00_S11_X(x) (((x) >> 24) & 0x0F)
+#define C_028C00_S11_X 0xF0FFFFFF
+#define S_028C00_S11_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C00_S11_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C00_S11_Y 0x0FFFFFFF
+#define R_028C04_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3 0x028C04
+#define S_028C04_S12_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C04_S12_X(x) (((x) >> 0) & 0x0F)
+#define C_028C04_S12_X 0xFFFFFFF0
+#define S_028C04_S12_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C04_S12_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C04_S12_Y 0xFFFFFF0F
+#define S_028C04_S13_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C04_S13_X(x) (((x) >> 8) & 0x0F)
+#define C_028C04_S13_X 0xFFFFF0FF
+#define S_028C04_S13_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C04_S13_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C04_S13_Y 0xFFFF0FFF
+#define S_028C04_S14_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C04_S14_X(x) (((x) >> 16) & 0x0F)
+#define C_028C04_S14_X 0xFFF0FFFF
+#define S_028C04_S14_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C04_S14_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C04_S14_Y 0xFF0FFFFF
+#define S_028C04_S15_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C04_S15_X(x) (((x) >> 24) & 0x0F)
+#define C_028C04_S15_X 0xF0FFFFFF
+#define S_028C04_S15_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C04_S15_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C04_S15_Y 0x0FFFFFFF
+#define R_028C08_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0 0x028C08
+#define S_028C08_S0_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C08_S0_X(x) (((x) >> 0) & 0x0F)
+#define C_028C08_S0_X 0xFFFFFFF0
+#define S_028C08_S0_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C08_S0_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C08_S0_Y 0xFFFFFF0F
+#define S_028C08_S1_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C08_S1_X(x) (((x) >> 8) & 0x0F)
+#define C_028C08_S1_X 0xFFFFF0FF
+#define S_028C08_S1_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C08_S1_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C08_S1_Y 0xFFFF0FFF
+#define S_028C08_S2_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C08_S2_X(x) (((x) >> 16) & 0x0F)
+#define C_028C08_S2_X 0xFFF0FFFF
+#define S_028C08_S2_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C08_S2_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C08_S2_Y 0xFF0FFFFF
+#define S_028C08_S3_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C08_S3_X(x) (((x) >> 24) & 0x0F)
+#define C_028C08_S3_X 0xF0FFFFFF
+#define S_028C08_S3_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C08_S3_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C08_S3_Y 0x0FFFFFFF
+#define R_028C0C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1 0x028C0C
+#define S_028C0C_S4_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C0C_S4_X(x) (((x) >> 0) & 0x0F)
+#define C_028C0C_S4_X 0xFFFFFFF0
+#define S_028C0C_S4_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C0C_S4_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C0C_S4_Y 0xFFFFFF0F
+#define S_028C0C_S5_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C0C_S5_X(x) (((x) >> 8) & 0x0F)
+#define C_028C0C_S5_X 0xFFFFF0FF
+#define S_028C0C_S5_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C0C_S5_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C0C_S5_Y 0xFFFF0FFF
+#define S_028C0C_S6_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C0C_S6_X(x) (((x) >> 16) & 0x0F)
+#define C_028C0C_S6_X 0xFFF0FFFF
+#define S_028C0C_S6_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C0C_S6_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C0C_S6_Y 0xFF0FFFFF
+#define S_028C0C_S7_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C0C_S7_X(x) (((x) >> 24) & 0x0F)
+#define C_028C0C_S7_X 0xF0FFFFFF
+#define S_028C0C_S7_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C0C_S7_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C0C_S7_Y 0x0FFFFFFF
+#define R_028C10_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2 0x028C10
+#define S_028C10_S8_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C10_S8_X(x) (((x) >> 0) & 0x0F)
+#define C_028C10_S8_X 0xFFFFFFF0
+#define S_028C10_S8_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C10_S8_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C10_S8_Y 0xFFFFFF0F
+#define S_028C10_S9_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C10_S9_X(x) (((x) >> 8) & 0x0F)
+#define C_028C10_S9_X 0xFFFFF0FF
+#define S_028C10_S9_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C10_S9_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C10_S9_Y 0xFFFF0FFF
+#define S_028C10_S10_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C10_S10_X(x) (((x) >> 16) & 0x0F)
+#define C_028C10_S10_X 0xFFF0FFFF
+#define S_028C10_S10_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C10_S10_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C10_S10_Y 0xFF0FFFFF
+#define S_028C10_S11_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C10_S11_X(x) (((x) >> 24) & 0x0F)
+#define C_028C10_S11_X 0xF0FFFFFF
+#define S_028C10_S11_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C10_S11_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C10_S11_Y 0x0FFFFFFF
+#define R_028C14_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3 0x028C14
+#define S_028C14_S12_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C14_S12_X(x) (((x) >> 0) & 0x0F)
+#define C_028C14_S12_X 0xFFFFFFF0
+#define S_028C14_S12_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C14_S12_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C14_S12_Y 0xFFFFFF0F
+#define S_028C14_S13_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C14_S13_X(x) (((x) >> 8) & 0x0F)
+#define C_028C14_S13_X 0xFFFFF0FF
+#define S_028C14_S13_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C14_S13_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C14_S13_Y 0xFFFF0FFF
+#define S_028C14_S14_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C14_S14_X(x) (((x) >> 16) & 0x0F)
+#define C_028C14_S14_X 0xFFF0FFFF
+#define S_028C14_S14_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C14_S14_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C14_S14_Y 0xFF0FFFFF
+#define S_028C14_S15_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C14_S15_X(x) (((x) >> 24) & 0x0F)
+#define C_028C14_S15_X 0xF0FFFFFF
+#define S_028C14_S15_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C14_S15_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C14_S15_Y 0x0FFFFFFF
+#define R_028C18_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0 0x028C18
+#define S_028C18_S0_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C18_S0_X(x) (((x) >> 0) & 0x0F)
+#define C_028C18_S0_X 0xFFFFFFF0
+#define S_028C18_S0_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C18_S0_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C18_S0_Y 0xFFFFFF0F
+#define S_028C18_S1_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C18_S1_X(x) (((x) >> 8) & 0x0F)
+#define C_028C18_S1_X 0xFFFFF0FF
+#define S_028C18_S1_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C18_S1_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C18_S1_Y 0xFFFF0FFF
+#define S_028C18_S2_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C18_S2_X(x) (((x) >> 16) & 0x0F)
+#define C_028C18_S2_X 0xFFF0FFFF
+#define S_028C18_S2_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C18_S2_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C18_S2_Y 0xFF0FFFFF
+#define S_028C18_S3_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C18_S3_X(x) (((x) >> 24) & 0x0F)
+#define C_028C18_S3_X 0xF0FFFFFF
+#define S_028C18_S3_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C18_S3_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C18_S3_Y 0x0FFFFFFF
+#define R_028C1C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1 0x028C1C
+#define S_028C1C_S4_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C1C_S4_X(x) (((x) >> 0) & 0x0F)
+#define C_028C1C_S4_X 0xFFFFFFF0
+#define S_028C1C_S4_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C1C_S4_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C1C_S4_Y 0xFFFFFF0F
+#define S_028C1C_S5_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C1C_S5_X(x) (((x) >> 8) & 0x0F)
+#define C_028C1C_S5_X 0xFFFFF0FF
+#define S_028C1C_S5_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C1C_S5_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C1C_S5_Y 0xFFFF0FFF
+#define S_028C1C_S6_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C1C_S6_X(x) (((x) >> 16) & 0x0F)
+#define C_028C1C_S6_X 0xFFF0FFFF
+#define S_028C1C_S6_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C1C_S6_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C1C_S6_Y 0xFF0FFFFF
+#define S_028C1C_S7_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C1C_S7_X(x) (((x) >> 24) & 0x0F)
+#define C_028C1C_S7_X 0xF0FFFFFF
+#define S_028C1C_S7_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C1C_S7_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C1C_S7_Y 0x0FFFFFFF
+#define R_028C20_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2 0x028C20
+#define S_028C20_S8_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C20_S8_X(x) (((x) >> 0) & 0x0F)
+#define C_028C20_S8_X 0xFFFFFFF0
+#define S_028C20_S8_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C20_S8_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C20_S8_Y 0xFFFFFF0F
+#define S_028C20_S9_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C20_S9_X(x) (((x) >> 8) & 0x0F)
+#define C_028C20_S9_X 0xFFFFF0FF
+#define S_028C20_S9_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C20_S9_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C20_S9_Y 0xFFFF0FFF
+#define S_028C20_S10_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C20_S10_X(x) (((x) >> 16) & 0x0F)
+#define C_028C20_S10_X 0xFFF0FFFF
+#define S_028C20_S10_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C20_S10_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C20_S10_Y 0xFF0FFFFF
+#define S_028C20_S11_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C20_S11_X(x) (((x) >> 24) & 0x0F)
+#define C_028C20_S11_X 0xF0FFFFFF
+#define S_028C20_S11_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C20_S11_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C20_S11_Y 0x0FFFFFFF
+#define R_028C24_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3 0x028C24
+#define S_028C24_S12_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C24_S12_X(x) (((x) >> 0) & 0x0F)
+#define C_028C24_S12_X 0xFFFFFFF0
+#define S_028C24_S12_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C24_S12_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C24_S12_Y 0xFFFFFF0F
+#define S_028C24_S13_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C24_S13_X(x) (((x) >> 8) & 0x0F)
+#define C_028C24_S13_X 0xFFFFF0FF
+#define S_028C24_S13_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C24_S13_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C24_S13_Y 0xFFFF0FFF
+#define S_028C24_S14_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C24_S14_X(x) (((x) >> 16) & 0x0F)
+#define C_028C24_S14_X 0xFFF0FFFF
+#define S_028C24_S14_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C24_S14_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C24_S14_Y 0xFF0FFFFF
+#define S_028C24_S15_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C24_S15_X(x) (((x) >> 24) & 0x0F)
+#define C_028C24_S15_X 0xF0FFFFFF
+#define S_028C24_S15_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C24_S15_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C24_S15_Y 0x0FFFFFFF
+#define R_028C28_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0 0x028C28
+#define S_028C28_S0_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C28_S0_X(x) (((x) >> 0) & 0x0F)
+#define C_028C28_S0_X 0xFFFFFFF0
+#define S_028C28_S0_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C28_S0_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C28_S0_Y 0xFFFFFF0F
+#define S_028C28_S1_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C28_S1_X(x) (((x) >> 8) & 0x0F)
+#define C_028C28_S1_X 0xFFFFF0FF
+#define S_028C28_S1_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C28_S1_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C28_S1_Y 0xFFFF0FFF
+#define S_028C28_S2_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C28_S2_X(x) (((x) >> 16) & 0x0F)
+#define C_028C28_S2_X 0xFFF0FFFF
+#define S_028C28_S2_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C28_S2_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C28_S2_Y 0xFF0FFFFF
+#define S_028C28_S3_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C28_S3_X(x) (((x) >> 24) & 0x0F)
+#define C_028C28_S3_X 0xF0FFFFFF
+#define S_028C28_S3_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C28_S3_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C28_S3_Y 0x0FFFFFFF
+#define R_028C2C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1 0x028C2C
+#define S_028C2C_S4_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C2C_S4_X(x) (((x) >> 0) & 0x0F)
+#define C_028C2C_S4_X 0xFFFFFFF0
+#define S_028C2C_S4_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C2C_S4_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C2C_S4_Y 0xFFFFFF0F
+#define S_028C2C_S5_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C2C_S5_X(x) (((x) >> 8) & 0x0F)
+#define C_028C2C_S5_X 0xFFFFF0FF
+#define S_028C2C_S5_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C2C_S5_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C2C_S5_Y 0xFFFF0FFF
+#define S_028C2C_S6_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C2C_S6_X(x) (((x) >> 16) & 0x0F)
+#define C_028C2C_S6_X 0xFFF0FFFF
+#define S_028C2C_S6_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C2C_S6_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C2C_S6_Y 0xFF0FFFFF
+#define S_028C2C_S7_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C2C_S7_X(x) (((x) >> 24) & 0x0F)
+#define C_028C2C_S7_X 0xF0FFFFFF
+#define S_028C2C_S7_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C2C_S7_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C2C_S7_Y 0x0FFFFFFF
+#define R_028C30_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2 0x028C30
+#define S_028C30_S8_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C30_S8_X(x) (((x) >> 0) & 0x0F)
+#define C_028C30_S8_X 0xFFFFFFF0
+#define S_028C30_S8_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C30_S8_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C30_S8_Y 0xFFFFFF0F
+#define S_028C30_S9_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C30_S9_X(x) (((x) >> 8) & 0x0F)
+#define C_028C30_S9_X 0xFFFFF0FF
+#define S_028C30_S9_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C30_S9_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C30_S9_Y 0xFFFF0FFF
+#define S_028C30_S10_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C30_S10_X(x) (((x) >> 16) & 0x0F)
+#define C_028C30_S10_X 0xFFF0FFFF
+#define S_028C30_S10_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C30_S10_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C30_S10_Y 0xFF0FFFFF
+#define S_028C30_S11_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C30_S11_X(x) (((x) >> 24) & 0x0F)
+#define C_028C30_S11_X 0xF0FFFFFF
+#define S_028C30_S11_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C30_S11_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C30_S11_Y 0x0FFFFFFF
+#define R_028C34_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3 0x028C34
+#define S_028C34_S12_X(x) (((unsigned)(x) & 0x0F) << 0)
+#define G_028C34_S12_X(x) (((x) >> 0) & 0x0F)
+#define C_028C34_S12_X 0xFFFFFFF0
+#define S_028C34_S12_Y(x) (((unsigned)(x) & 0x0F) << 4)
+#define G_028C34_S12_Y(x) (((x) >> 4) & 0x0F)
+#define C_028C34_S12_Y 0xFFFFFF0F
+#define S_028C34_S13_X(x) (((unsigned)(x) & 0x0F) << 8)
+#define G_028C34_S13_X(x) (((x) >> 8) & 0x0F)
+#define C_028C34_S13_X 0xFFFFF0FF
+#define S_028C34_S13_Y(x) (((unsigned)(x) & 0x0F) << 12)
+#define G_028C34_S13_Y(x) (((x) >> 12) & 0x0F)
+#define C_028C34_S13_Y 0xFFFF0FFF
+#define S_028C34_S14_X(x) (((unsigned)(x) & 0x0F) << 16)
+#define G_028C34_S14_X(x) (((x) >> 16) & 0x0F)
+#define C_028C34_S14_X 0xFFF0FFFF
+#define S_028C34_S14_Y(x) (((unsigned)(x) & 0x0F) << 20)
+#define G_028C34_S14_Y(x) (((x) >> 20) & 0x0F)
+#define C_028C34_S14_Y 0xFF0FFFFF
+#define S_028C34_S15_X(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C34_S15_X(x) (((x) >> 24) & 0x0F)
+#define C_028C34_S15_X 0xF0FFFFFF
+#define S_028C34_S15_Y(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C34_S15_Y(x) (((x) >> 28) & 0x0F)
+#define C_028C34_S15_Y 0x0FFFFFFF
+#define R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0 0x028C38
+#define S_028C38_AA_MASK_X0Y0(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028C38_AA_MASK_X0Y0(x) (((x) >> 0) & 0xFFFF)
+#define C_028C38_AA_MASK_X0Y0 0xFFFF0000
+#define S_028C38_AA_MASK_X1Y0(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028C38_AA_MASK_X1Y0(x) (((x) >> 16) & 0xFFFF)
+#define C_028C38_AA_MASK_X1Y0 0x0000FFFF
+#define R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1 0x028C3C
+#define S_028C3C_AA_MASK_X0Y1(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028C3C_AA_MASK_X0Y1(x) (((x) >> 0) & 0xFFFF)
+#define C_028C3C_AA_MASK_X0Y1 0xFFFF0000
+#define S_028C3C_AA_MASK_X1Y1(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028C3C_AA_MASK_X1Y1(x) (((x) >> 16) & 0xFFFF)
+#define C_028C3C_AA_MASK_X1Y1 0x0000FFFF
+#define R_028C40_PA_SC_SHADER_CONTROL 0x028C40
+#define S_028C40_REALIGN_DQUADS_AFTER_N_WAVES(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028C40_REALIGN_DQUADS_AFTER_N_WAVES(x) (((x) >> 0) & 0x03)
+#define C_028C40_REALIGN_DQUADS_AFTER_N_WAVES 0xFFFFFFFC
+#define S_028C40_LOAD_COLLISION_WAVEID(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028C40_LOAD_COLLISION_WAVEID(x) (((x) >> 2) & 0x1)
+#define C_028C40_LOAD_COLLISION_WAVEID 0xFFFFFFFB
+#define S_028C40_LOAD_INTRAWAVE_COLLISION(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028C40_LOAD_INTRAWAVE_COLLISION(x) (((x) >> 3) & 0x1)
+#define C_028C40_LOAD_INTRAWAVE_COLLISION 0xFFFFFFF7
+#define R_028C44_PA_SC_BINNER_CNTL_0 0x028C44
+#define S_028C44_BINNING_MODE(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028C44_BINNING_MODE(x) (((x) >> 0) & 0x03)
+#define C_028C44_BINNING_MODE 0xFFFFFFFC
+#define V_028C44_BINNING_ALLOWED 0
+#define V_028C44_FORCE_BINNING_ON 1
+#define V_028C44_DISABLE_BINNING_USE_NEW_SC 2
+#define V_028C44_DISABLE_BINNING_USE_LEGACY_SC 3
+#define S_028C44_BIN_SIZE_X(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028C44_BIN_SIZE_X(x) (((x) >> 2) & 0x1)
+#define C_028C44_BIN_SIZE_X 0xFFFFFFFB
+#define S_028C44_BIN_SIZE_Y(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028C44_BIN_SIZE_Y(x) (((x) >> 3) & 0x1)
+#define C_028C44_BIN_SIZE_Y 0xFFFFFFF7
+#define S_028C44_BIN_SIZE_X_EXTEND(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028C44_BIN_SIZE_X_EXTEND(x) (((x) >> 4) & 0x07)
+#define C_028C44_BIN_SIZE_X_EXTEND 0xFFFFFF8F
+#define S_028C44_BIN_SIZE_Y_EXTEND(x) (((unsigned)(x) & 0x07) << 7)
+#define G_028C44_BIN_SIZE_Y_EXTEND(x) (((x) >> 7) & 0x07)
+#define C_028C44_BIN_SIZE_Y_EXTEND 0xFFFFFC7F
+#define S_028C44_CONTEXT_STATES_PER_BIN(x) (((unsigned)(x) & 0x07) << 10)
+#define G_028C44_CONTEXT_STATES_PER_BIN(x) (((x) >> 10) & 0x07)
+#define C_028C44_CONTEXT_STATES_PER_BIN 0xFFFFE3FF
+#define S_028C44_PERSISTENT_STATES_PER_BIN(x) (((unsigned)(x) & 0x1F) << 13)
+#define G_028C44_PERSISTENT_STATES_PER_BIN(x) (((x) >> 13) & 0x1F)
+#define C_028C44_PERSISTENT_STATES_PER_BIN 0xFFFC1FFF
+#define S_028C44_DISABLE_START_OF_PRIM(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028C44_DISABLE_START_OF_PRIM(x) (((x) >> 18) & 0x1)
+#define C_028C44_DISABLE_START_OF_PRIM 0xFFFBFFFF
+#define S_028C44_FPOVS_PER_BATCH(x) (((unsigned)(x) & 0xFF) << 19)
+#define G_028C44_FPOVS_PER_BATCH(x) (((x) >> 19) & 0xFF)
+#define C_028C44_FPOVS_PER_BATCH 0xF807FFFF
+#define S_028C44_OPTIMAL_BIN_SELECTION(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028C44_OPTIMAL_BIN_SELECTION(x) (((x) >> 27) & 0x1)
+#define C_028C44_OPTIMAL_BIN_SELECTION 0xF7FFFFFF
+#define R_028C48_PA_SC_BINNER_CNTL_1 0x028C48
+#define S_028C48_MAX_ALLOC_COUNT(x) (((unsigned)(x) & 0xFFFF) << 0)
+#define G_028C48_MAX_ALLOC_COUNT(x) (((x) >> 0) & 0xFFFF)
+#define C_028C48_MAX_ALLOC_COUNT 0xFFFF0000
+#define S_028C48_MAX_PRIM_PER_BATCH(x) (((unsigned)(x) & 0xFFFF) << 16)
+#define G_028C48_MAX_PRIM_PER_BATCH(x) (((x) >> 16) & 0xFFFF)
+#define C_028C48_MAX_PRIM_PER_BATCH 0x0000FFFF
+#define R_028C4C_PA_SC_CONSERVATIVE_RASTERIZATION_CNTL 0x028C4C
+#define S_028C4C_OVER_RAST_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028C4C_OVER_RAST_ENABLE(x) (((x) >> 0) & 0x1)
+#define C_028C4C_OVER_RAST_ENABLE 0xFFFFFFFE
+#define S_028C4C_OVER_RAST_SAMPLE_SELECT(x) (((unsigned)(x) & 0x0F) << 1)
+#define G_028C4C_OVER_RAST_SAMPLE_SELECT(x) (((x) >> 1) & 0x0F)
+#define C_028C4C_OVER_RAST_SAMPLE_SELECT 0xFFFFFFE1
+#define S_028C4C_UNDER_RAST_ENABLE(x) (((unsigned)(x) & 0x1) << 5)
+#define G_028C4C_UNDER_RAST_ENABLE(x) (((x) >> 5) & 0x1)
+#define C_028C4C_UNDER_RAST_ENABLE 0xFFFFFFDF
+#define S_028C4C_UNDER_RAST_SAMPLE_SELECT(x) (((unsigned)(x) & 0x0F) << 6)
+#define G_028C4C_UNDER_RAST_SAMPLE_SELECT(x) (((x) >> 6) & 0x0F)
+#define C_028C4C_UNDER_RAST_SAMPLE_SELECT 0xFFFFFC3F
+#define S_028C4C_PBB_UNCERTAINTY_REGION_ENABLE(x) (((unsigned)(x) & 0x1) << 10)
+#define G_028C4C_PBB_UNCERTAINTY_REGION_ENABLE(x) (((x) >> 10) & 0x1)
+#define C_028C4C_PBB_UNCERTAINTY_REGION_ENABLE 0xFFFFFBFF
+#define S_028C4C_ZMM_TRI_EXTENT(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028C4C_ZMM_TRI_EXTENT(x) (((x) >> 11) & 0x1)
+#define C_028C4C_ZMM_TRI_EXTENT 0xFFFFF7FF
+#define S_028C4C_ZMM_TRI_OFFSET(x) (((unsigned)(x) & 0x1) << 12)
+#define G_028C4C_ZMM_TRI_OFFSET(x) (((x) >> 12) & 0x1)
+#define C_028C4C_ZMM_TRI_OFFSET 0xFFFFEFFF
+#define S_028C4C_OVERRIDE_OVER_RAST_INNER_TO_NORMAL(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028C4C_OVERRIDE_OVER_RAST_INNER_TO_NORMAL(x) (((x) >> 13) & 0x1)
+#define C_028C4C_OVERRIDE_OVER_RAST_INNER_TO_NORMAL 0xFFFFDFFF
+#define S_028C4C_OVERRIDE_UNDER_RAST_INNER_TO_NORMAL(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028C4C_OVERRIDE_UNDER_RAST_INNER_TO_NORMAL(x) (((x) >> 14) & 0x1)
+#define C_028C4C_OVERRIDE_UNDER_RAST_INNER_TO_NORMAL 0xFFFFBFFF
+#define S_028C4C_DEGENERATE_OVERRIDE_INNER_TO_NORMAL_DISABLE(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028C4C_DEGENERATE_OVERRIDE_INNER_TO_NORMAL_DISABLE(x) (((x) >> 15) & 0x1)
+#define C_028C4C_DEGENERATE_OVERRIDE_INNER_TO_NORMAL_DISABLE 0xFFFF7FFF
+#define S_028C4C_UNCERTAINTY_REGION_MODE(x) (((unsigned)(x) & 0x03) << 16)
+#define G_028C4C_UNCERTAINTY_REGION_MODE(x) (((x) >> 16) & 0x03)
+#define C_028C4C_UNCERTAINTY_REGION_MODE 0xFFFCFFFF
+#define S_028C4C_OUTER_UNCERTAINTY_EDGERULE_OVERRIDE(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028C4C_OUTER_UNCERTAINTY_EDGERULE_OVERRIDE(x) (((x) >> 18) & 0x1)
+#define C_028C4C_OUTER_UNCERTAINTY_EDGERULE_OVERRIDE 0xFFFBFFFF
+#define S_028C4C_INNER_UNCERTAINTY_EDGERULE_OVERRIDE(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028C4C_INNER_UNCERTAINTY_EDGERULE_OVERRIDE(x) (((x) >> 19) & 0x1)
+#define C_028C4C_INNER_UNCERTAINTY_EDGERULE_OVERRIDE 0xFFF7FFFF
+#define S_028C4C_NULL_SQUAD_AA_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028C4C_NULL_SQUAD_AA_MASK_ENABLE(x) (((x) >> 20) & 0x1)
+#define C_028C4C_NULL_SQUAD_AA_MASK_ENABLE 0xFFEFFFFF
+#define S_028C4C_COVERAGE_AA_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028C4C_COVERAGE_AA_MASK_ENABLE(x) (((x) >> 21) & 0x1)
+#define C_028C4C_COVERAGE_AA_MASK_ENABLE 0xFFDFFFFF
+#define S_028C4C_PREZ_AA_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 22)
+#define G_028C4C_PREZ_AA_MASK_ENABLE(x) (((x) >> 22) & 0x1)
+#define C_028C4C_PREZ_AA_MASK_ENABLE 0xFFBFFFFF
+#define S_028C4C_POSTZ_AA_MASK_ENABLE(x) (((unsigned)(x) & 0x1) << 23)
+#define G_028C4C_POSTZ_AA_MASK_ENABLE(x) (((x) >> 23) & 0x1)
+#define C_028C4C_POSTZ_AA_MASK_ENABLE 0xFF7FFFFF
+#define S_028C4C_CENTROID_SAMPLE_OVERRIDE(x) (((unsigned)(x) & 0x1) << 24)
+#define G_028C4C_CENTROID_SAMPLE_OVERRIDE(x) (((x) >> 24) & 0x1)
+#define C_028C4C_CENTROID_SAMPLE_OVERRIDE 0xFEFFFFFF
+#define R_028C50_PA_SC_NGG_MODE_CNTL 0x028C50
+#define S_028C50_MAX_DEALLOCS_IN_WAVE(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028C50_MAX_DEALLOCS_IN_WAVE(x) (((x) >> 0) & 0x7FF)
+#define C_028C50_MAX_DEALLOCS_IN_WAVE 0xFFFFF800
+#define R_028C58_VGT_VERTEX_REUSE_BLOCK_CNTL 0x028C58
+#define S_028C58_VTX_REUSE_DEPTH(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028C58_VTX_REUSE_DEPTH(x) (((x) >> 0) & 0xFF)
+#define C_028C58_VTX_REUSE_DEPTH 0xFFFFFF00
+#define R_028C5C_VGT_OUT_DEALLOC_CNTL 0x028C5C
+#define S_028C5C_DEALLOC_DIST(x) (((unsigned)(x) & 0x7F) << 0)
+#define G_028C5C_DEALLOC_DIST(x) (((x) >> 0) & 0x7F)
+#define C_028C5C_DEALLOC_DIST 0xFFFFFF80
+#define R_028C60_CB_COLOR0_BASE 0x028C60
+#define R_028C64_CB_COLOR0_BASE_EXT 0x028C64
+#define S_028C64_BASE_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028C64_BASE_256B(x) (((x) >> 0) & 0xFF)
+#define C_028C64_BASE_256B 0xFFFFFF00
+#define R_028C68_CB_COLOR0_ATTRIB2 0x028C68
+#define S_028C68_MIP0_HEIGHT(x) (((unsigned)(x) & 0x3FFF) << 0)
+#define G_028C68_MIP0_HEIGHT(x) (((x) >> 0) & 0x3FFF)
+#define C_028C68_MIP0_HEIGHT 0xFFFFC000
+#define S_028C68_MIP0_WIDTH(x) (((unsigned)(x) & 0x3FFF) << 14)
+#define G_028C68_MIP0_WIDTH(x) (((x) >> 14) & 0x3FFF)
+#define C_028C68_MIP0_WIDTH 0xF0003FFF
+#define S_028C68_MAX_MIP(x) (((unsigned)(x) & 0x0F) << 28)
+#define G_028C68_MAX_MIP(x) (((x) >> 28) & 0x0F)
+#define C_028C68_MAX_MIP 0x0FFFFFFF
+#define R_028C6C_CB_COLOR0_VIEW 0x028C6C
+#define S_028C6C_SLICE_START(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028C6C_SLICE_START(x) (((x) >> 0) & 0x7FF)
+#define C_028C6C_SLICE_START 0xFFFFF800
+#define S_028C6C_SLICE_MAX(x) (((unsigned)(x) & 0x7FF) << 13)
+#define G_028C6C_SLICE_MAX(x) (((x) >> 13) & 0x7FF)
+#define C_028C6C_SLICE_MAX 0xFF001FFF
+#define S_028C6C_MIP_LEVEL(x) (((unsigned)(x) & 0x0F) << 24)
+#define G_028C6C_MIP_LEVEL(x) (((x) >> 24) & 0x0F)
+#define C_028C6C_MIP_LEVEL 0xF0FFFFFF
+#define R_028C70_CB_COLOR0_INFO 0x028C70
+#define S_028C70_ENDIAN(x) (((unsigned)(x) & 0x03) << 0)
+#define G_028C70_ENDIAN(x) (((x) >> 0) & 0x03)
+#define C_028C70_ENDIAN 0xFFFFFFFC
+#define S_028C70_FORMAT(x) (((unsigned)(x) & 0x1F) << 2)
+#define G_028C70_FORMAT(x) (((x) >> 2) & 0x1F)
+#define C_028C70_FORMAT 0xFFFFFF83
+#define S_028C70_NUMBER_TYPE(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028C70_NUMBER_TYPE(x) (((x) >> 8) & 0x07)
+#define C_028C70_NUMBER_TYPE 0xFFFFF8FF
+#define S_028C70_COMP_SWAP(x) (((unsigned)(x) & 0x03) << 11)
+#define G_028C70_COMP_SWAP(x) (((x) >> 11) & 0x03)
+#define C_028C70_COMP_SWAP 0xFFFFE7FF
+#define S_028C70_FAST_CLEAR(x) (((unsigned)(x) & 0x1) << 13)
+#define G_028C70_FAST_CLEAR(x) (((x) >> 13) & 0x1)
+#define C_028C70_FAST_CLEAR 0xFFFFDFFF
+#define S_028C70_COMPRESSION(x) (((unsigned)(x) & 0x1) << 14)
+#define G_028C70_COMPRESSION(x) (((x) >> 14) & 0x1)
+#define C_028C70_COMPRESSION 0xFFFFBFFF
+#define S_028C70_BLEND_CLAMP(x) (((unsigned)(x) & 0x1) << 15)
+#define G_028C70_BLEND_CLAMP(x) (((x) >> 15) & 0x1)
+#define C_028C70_BLEND_CLAMP 0xFFFF7FFF
+#define S_028C70_BLEND_BYPASS(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028C70_BLEND_BYPASS(x) (((x) >> 16) & 0x1)
+#define C_028C70_BLEND_BYPASS 0xFFFEFFFF
+#define S_028C70_SIMPLE_FLOAT(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028C70_SIMPLE_FLOAT(x) (((x) >> 17) & 0x1)
+#define C_028C70_SIMPLE_FLOAT 0xFFFDFFFF
+#define S_028C70_ROUND_MODE(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028C70_ROUND_MODE(x) (((x) >> 18) & 0x1)
+#define C_028C70_ROUND_MODE 0xFFFBFFFF
+#define S_028C70_BLEND_OPT_DONT_RD_DST(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028C70_BLEND_OPT_DONT_RD_DST(x) (((x) >> 20) & 0x07)
+#define C_028C70_BLEND_OPT_DONT_RD_DST 0xFF8FFFFF
+#define S_028C70_BLEND_OPT_DISCARD_PIXEL(x) (((unsigned)(x) & 0x07) << 23)
+#define G_028C70_BLEND_OPT_DISCARD_PIXEL(x) (((x) >> 23) & 0x07)
+#define C_028C70_BLEND_OPT_DISCARD_PIXEL 0xFC7FFFFF
+#define S_028C70_FMASK_COMPRESSION_DISABLE(x) (((unsigned)(x) & 0x1) << 26)
+#define G_028C70_FMASK_COMPRESSION_DISABLE(x) (((x) >> 26) & 0x1)
+#define C_028C70_FMASK_COMPRESSION_DISABLE 0xFBFFFFFF
+#define S_028C70_FMASK_COMPRESS_1FRAG_ONLY(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028C70_FMASK_COMPRESS_1FRAG_ONLY(x) (((x) >> 27) & 0x1)
+#define C_028C70_FMASK_COMPRESS_1FRAG_ONLY 0xF7FFFFFF
+#define S_028C70_DCC_ENABLE(x) (((unsigned)(x) & 0x1) << 28)
+#define G_028C70_DCC_ENABLE(x) (((x) >> 28) & 0x1)
+#define C_028C70_DCC_ENABLE 0xEFFFFFFF
+#define S_028C70_CMASK_ADDR_TYPE(x) (((unsigned)(x) & 0x03) << 29)
+#define G_028C70_CMASK_ADDR_TYPE(x) (((x) >> 29) & 0x03)
+#define C_028C70_CMASK_ADDR_TYPE 0x9FFFFFFF
+#define R_028C74_CB_COLOR0_ATTRIB 0x028C74
+#define S_028C74_MIP0_DEPTH(x) (((unsigned)(x) & 0x7FF) << 0)
+#define G_028C74_MIP0_DEPTH(x) (((x) >> 0) & 0x7FF)
+#define C_028C74_MIP0_DEPTH 0xFFFFF800
+#define S_028C74_META_LINEAR(x) (((unsigned)(x) & 0x1) << 11)
+#define G_028C74_META_LINEAR(x) (((x) >> 11) & 0x1)
+#define C_028C74_META_LINEAR 0xFFFFF7FF
+#define S_028C74_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 12)
+#define G_028C74_NUM_SAMPLES(x) (((x) >> 12) & 0x07)
+#define C_028C74_NUM_SAMPLES 0xFFFF8FFF
+#define S_028C74_NUM_FRAGMENTS(x) (((unsigned)(x) & 0x03) << 15)
+#define G_028C74_NUM_FRAGMENTS(x) (((x) >> 15) & 0x03)
+#define C_028C74_NUM_FRAGMENTS 0xFFFE7FFF
+#define S_028C74_FORCE_DST_ALPHA_1(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028C74_FORCE_DST_ALPHA_1(x) (((x) >> 17) & 0x1)
+#define C_028C74_FORCE_DST_ALPHA_1 0xFFFDFFFF
+#define S_028C74_COLOR_SW_MODE(x) (((unsigned)(x) & 0x1F) << 18)
+#define G_028C74_COLOR_SW_MODE(x) (((x) >> 18) & 0x1F)
+#define C_028C74_COLOR_SW_MODE 0xFF83FFFF
+#define S_028C74_FMASK_SW_MODE(x) (((unsigned)(x) & 0x1F) << 23)
+#define G_028C74_FMASK_SW_MODE(x) (((x) >> 23) & 0x1F)
+#define C_028C74_FMASK_SW_MODE 0xF07FFFFF
+#define S_028C74_RESOURCE_TYPE(x) (((unsigned)(x) & 0x03) << 28)
+#define G_028C74_RESOURCE_TYPE(x) (((x) >> 28) & 0x03)
+#define C_028C74_RESOURCE_TYPE 0xCFFFFFFF
+#define V_028C74_1D 0
+#define V_028C74_2D 1
+#define V_028C74_3D 2
+#define V_028C74_RESERVED 3
+#define S_028C74_RB_ALIGNED(x) (((unsigned)(x) & 0x1) << 30)
+#define G_028C74_RB_ALIGNED(x) (((x) >> 30) & 0x1)
+#define C_028C74_RB_ALIGNED 0xBFFFFFFF
+#define S_028C74_PIPE_ALIGNED(x) (((unsigned)(x) & 0x1) << 31)
+#define G_028C74_PIPE_ALIGNED(x) (((x) >> 31) & 0x1)
+#define C_028C74_PIPE_ALIGNED 0x7FFFFFFF
+#define R_028C78_CB_COLOR0_DCC_CONTROL 0x028C78
+#define S_028C78_OVERWRITE_COMBINER_DISABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028C78_OVERWRITE_COMBINER_DISABLE(x) (((x) >> 0) & 0x1)
+#define C_028C78_OVERWRITE_COMBINER_DISABLE 0xFFFFFFFE
+#define S_028C78_KEY_CLEAR_ENABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028C78_KEY_CLEAR_ENABLE(x) (((x) >> 1) & 0x1)
+#define C_028C78_KEY_CLEAR_ENABLE 0xFFFFFFFD
+#define S_028C78_MAX_UNCOMPRESSED_BLOCK_SIZE(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028C78_MAX_UNCOMPRESSED_BLOCK_SIZE(x) (((x) >> 2) & 0x03)
+#define C_028C78_MAX_UNCOMPRESSED_BLOCK_SIZE 0xFFFFFFF3
+#define S_028C78_MIN_COMPRESSED_BLOCK_SIZE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028C78_MIN_COMPRESSED_BLOCK_SIZE(x) (((x) >> 4) & 0x1)
+#define C_028C78_MIN_COMPRESSED_BLOCK_SIZE 0xFFFFFFEF
+#define S_028C78_MAX_COMPRESSED_BLOCK_SIZE(x) (((unsigned)(x) & 0x03) << 5)
+#define G_028C78_MAX_COMPRESSED_BLOCK_SIZE(x) (((x) >> 5) & 0x03)
+#define C_028C78_MAX_COMPRESSED_BLOCK_SIZE 0xFFFFFF9F
+#define S_028C78_COLOR_TRANSFORM(x) (((unsigned)(x) & 0x03) << 7)
+#define G_028C78_COLOR_TRANSFORM(x) (((x) >> 7) & 0x03)
+#define C_028C78_COLOR_TRANSFORM 0xFFFFFE7F
+#define S_028C78_INDEPENDENT_64B_BLOCKS(x) (((unsigned)(x) & 0x1) << 9)
+#define G_028C78_INDEPENDENT_64B_BLOCKS(x) (((x) >> 9) & 0x1)
+#define C_028C78_INDEPENDENT_64B_BLOCKS 0xFFFFFDFF
+#define S_028C78_LOSSY_RGB_PRECISION(x) (((unsigned)(x) & 0x0F) << 10)
+#define G_028C78_LOSSY_RGB_PRECISION(x) (((x) >> 10) & 0x0F)
+#define C_028C78_LOSSY_RGB_PRECISION 0xFFFFC3FF
+#define S_028C78_LOSSY_ALPHA_PRECISION(x) (((unsigned)(x) & 0x0F) << 14)
+#define G_028C78_LOSSY_ALPHA_PRECISION(x) (((x) >> 14) & 0x0F)
+#define C_028C78_LOSSY_ALPHA_PRECISION 0xFFFC3FFF
+#define R_028C7C_CB_COLOR0_CMASK 0x028C7C
+#define R_028C80_CB_COLOR0_CMASK_BASE_EXT 0x028C80
+#define S_028C80_BASE_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028C80_BASE_256B(x) (((x) >> 0) & 0xFF)
+#define C_028C80_BASE_256B 0xFFFFFF00
+#define R_028C84_CB_COLOR0_FMASK 0x028C84
+#define R_028C88_CB_COLOR0_FMASK_BASE_EXT 0x028C88
+#define S_028C88_BASE_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028C88_BASE_256B(x) (((x) >> 0) & 0xFF)
+#define C_028C88_BASE_256B 0xFFFFFF00
+#define R_028C8C_CB_COLOR0_CLEAR_WORD0 0x028C8C
+#define R_028C90_CB_COLOR0_CLEAR_WORD1 0x028C90
+#define R_028C94_CB_COLOR0_DCC_BASE 0x028C94
+#define R_028C98_CB_COLOR0_DCC_BASE_EXT 0x028C98
+#define S_028C98_BASE_256B(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_028C98_BASE_256B(x) (((x) >> 0) & 0xFF)
+#define C_028C98_BASE_256B 0xFFFFFF00
+#define R_028C9C_CB_COLOR1_BASE 0x028C9C
+#define R_028CA0_CB_COLOR1_BASE_EXT 0x028CA0
+#define R_028CA4_CB_COLOR1_ATTRIB2 0x028CA4
+#define R_028CA8_CB_COLOR1_VIEW 0x028CA8
+#define R_028CAC_CB_COLOR1_INFO 0x028CAC
+#define R_028CB0_CB_COLOR1_ATTRIB 0x028CB0
+#define R_028CB4_CB_COLOR1_DCC_CONTROL 0x028CB4
+#define R_028CB8_CB_COLOR1_CMASK 0x028CB8
+#define R_028CBC_CB_COLOR1_CMASK_BASE_EXT 0x028CBC
+#define R_028CC0_CB_COLOR1_FMASK 0x028CC0
+#define R_028CC4_CB_COLOR1_FMASK_BASE_EXT 0x028CC4
+#define R_028CC8_CB_COLOR1_CLEAR_WORD0 0x028CC8
+#define R_028CCC_CB_COLOR1_CLEAR_WORD1 0x028CCC
+#define R_028CD0_CB_COLOR1_DCC_BASE 0x028CD0
+#define R_028CD4_CB_COLOR1_DCC_BASE_EXT 0x028CD4
+#define R_028CD8_CB_COLOR2_BASE 0x028CD8
+#define R_028CDC_CB_COLOR2_BASE_EXT 0x028CDC
+#define R_028CE0_CB_COLOR2_ATTRIB2 0x028CE0
+#define R_028CE4_CB_COLOR2_VIEW 0x028CE4
+#define R_028CE8_CB_COLOR2_INFO 0x028CE8
+#define R_028CEC_CB_COLOR2_ATTRIB 0x028CEC
+#define R_028CF0_CB_COLOR2_DCC_CONTROL 0x028CF0
+#define R_028CF4_CB_COLOR2_CMASK 0x028CF4
+#define R_028CF8_CB_COLOR2_CMASK_BASE_EXT 0x028CF8
+#define R_028CFC_CB_COLOR2_FMASK 0x028CFC
+#define R_028D00_CB_COLOR2_FMASK_BASE_EXT 0x028D00
+#define R_028D04_CB_COLOR2_CLEAR_WORD0 0x028D04
+#define R_028D08_CB_COLOR2_CLEAR_WORD1 0x028D08
+#define R_028D0C_CB_COLOR2_DCC_BASE 0x028D0C
+#define R_028D10_CB_COLOR2_DCC_BASE_EXT 0x028D10
+#define R_028D14_CB_COLOR3_BASE 0x028D14
+#define R_028D18_CB_COLOR3_BASE_EXT 0x028D18
+#define R_028D1C_CB_COLOR3_ATTRIB2 0x028D1C
+#define R_028D20_CB_COLOR3_VIEW 0x028D20
+#define R_028D24_CB_COLOR3_INFO 0x028D24
+#define R_028D28_CB_COLOR3_ATTRIB 0x028D28
+#define R_028D2C_CB_COLOR3_DCC_CONTROL 0x028D2C
+#define R_028D30_CB_COLOR3_CMASK 0x028D30
+#define R_028D34_CB_COLOR3_CMASK_BASE_EXT 0x028D34
+#define R_028D38_CB_COLOR3_FMASK 0x028D38
+#define R_028D3C_CB_COLOR3_FMASK_BASE_EXT 0x028D3C
+#define R_028D40_CB_COLOR3_CLEAR_WORD0 0x028D40
+#define R_028D44_CB_COLOR3_CLEAR_WORD1 0x028D44
+#define R_028D48_CB_COLOR3_DCC_BASE 0x028D48
+#define R_028D4C_CB_COLOR3_DCC_BASE_EXT 0x028D4C
+#define R_028D50_CB_COLOR4_BASE 0x028D50
+#define R_028D54_CB_COLOR4_BASE_EXT 0x028D54
+#define R_028D58_CB_COLOR4_ATTRIB2 0x028D58
+#define R_028D5C_CB_COLOR4_VIEW 0x028D5C
+#define R_028D60_CB_COLOR4_INFO 0x028D60
+#define R_028D64_CB_COLOR4_ATTRIB 0x028D64
+#define R_028D68_CB_COLOR4_DCC_CONTROL 0x028D68
+#define R_028D6C_CB_COLOR4_CMASK 0x028D6C
+#define R_028D70_CB_COLOR4_CMASK_BASE_EXT 0x028D70
+#define R_028D74_CB_COLOR4_FMASK 0x028D74
+#define R_028D78_CB_COLOR4_FMASK_BASE_EXT 0x028D78
+#define R_028D7C_CB_COLOR4_CLEAR_WORD0 0x028D7C
+#define R_028D80_CB_COLOR4_CLEAR_WORD1 0x028D80
+#define R_028D84_CB_COLOR4_DCC_BASE 0x028D84
+#define R_028D88_CB_COLOR4_DCC_BASE_EXT 0x028D88
+#define R_028D8C_CB_COLOR5_BASE 0x028D8C
+#define R_028D90_CB_COLOR5_BASE_EXT 0x028D90
+#define R_028D94_CB_COLOR5_ATTRIB2 0x028D94
+#define R_028D98_CB_COLOR5_VIEW 0x028D98
+#define R_028D9C_CB_COLOR5_INFO 0x028D9C
+#define R_028DA0_CB_COLOR5_ATTRIB 0x028DA0
+#define R_028DA4_CB_COLOR5_DCC_CONTROL 0x028DA4
+#define R_028DA8_CB_COLOR5_CMASK 0x028DA8
+#define R_028DAC_CB_COLOR5_CMASK_BASE_EXT 0x028DAC
+#define R_028DB0_CB_COLOR5_FMASK 0x028DB0
+#define R_028DB4_CB_COLOR5_FMASK_BASE_EXT 0x028DB4
+#define R_028DB8_CB_COLOR5_CLEAR_WORD0 0x028DB8
+#define R_028DBC_CB_COLOR5_CLEAR_WORD1 0x028DBC
+#define R_028DC0_CB_COLOR5_DCC_BASE 0x028DC0
+#define R_028DC4_CB_COLOR5_DCC_BASE_EXT 0x028DC4
+#define R_028DC8_CB_COLOR6_BASE 0x028DC8
+#define R_028DCC_CB_COLOR6_BASE_EXT 0x028DCC
+#define R_028DD0_CB_COLOR6_ATTRIB2 0x028DD0
+#define R_028DD4_CB_COLOR6_VIEW 0x028DD4
+#define R_028DD8_CB_COLOR6_INFO 0x028DD8
+#define R_028DDC_CB_COLOR6_ATTRIB 0x028DDC
+#define R_028DE0_CB_COLOR6_DCC_CONTROL 0x028DE0
+#define R_028DE4_CB_COLOR6_CMASK 0x028DE4
+#define R_028DE8_CB_COLOR6_CMASK_BASE_EXT 0x028DE8
+#define R_028DEC_CB_COLOR6_FMASK 0x028DEC
+#define R_028DF0_CB_COLOR6_FMASK_BASE_EXT 0x028DF0
+#define R_028DF4_CB_COLOR6_CLEAR_WORD0 0x028DF4
+#define R_028DF8_CB_COLOR6_CLEAR_WORD1 0x028DF8
+#define R_028DFC_CB_COLOR6_DCC_BASE 0x028DFC
+#define R_028E00_CB_COLOR6_DCC_BASE_EXT 0x028E00
+#define R_028E04_CB_COLOR7_BASE 0x028E04
+#define R_028E08_CB_COLOR7_BASE_EXT 0x028E08
+#define R_028E0C_CB_COLOR7_ATTRIB2 0x028E0C
+#define R_028E10_CB_COLOR7_VIEW 0x028E10
+#define R_028E14_CB_COLOR7_INFO 0x028E14
+#define R_028E18_CB_COLOR7_ATTRIB 0x028E18
+#define R_028E1C_CB_COLOR7_DCC_CONTROL 0x028E1C
+#define R_028E20_CB_COLOR7_CMASK 0x028E20
+#define R_028E24_CB_COLOR7_CMASK_BASE_EXT 0x028E24
+#define R_028E28_CB_COLOR7_FMASK 0x028E28
+#define R_028E2C_CB_COLOR7_FMASK_BASE_EXT 0x028E2C
+#define R_028E30_CB_COLOR7_CLEAR_WORD0 0x028E30
+#define R_028E34_CB_COLOR7_CLEAR_WORD1 0x028E34
+#define R_028E38_CB_COLOR7_DCC_BASE 0x028E38
+#define R_028E3C_CB_COLOR7_DCC_BASE_EXT 0x028E3C
+
+#endif /* GFX9D_H */
diff --git a/lib/mesa/src/amd/common/r600d_common.h b/lib/mesa/src/amd/common/r600d_common.h
index 3dbe43a8b..337447533 100644
--- a/lib/mesa/src/amd/common/r600d_common.h
+++ b/lib/mesa/src/amd/common/r600d_common.h
@@ -54,6 +54,17 @@
#define PKT3_WAIT_REG_MEM 0x3C
#define WAIT_REG_MEM_EQUAL 3
#define WAIT_REG_MEM_MEM_SPACE(x) (((unsigned)(x) & 0x3) << 4)
+#define PKT3_COPY_DATA 0x40
+#define COPY_DATA_SRC_SEL(x) ((x) & 0xf)
+#define COPY_DATA_REG 0
+#define COPY_DATA_MEM 1
+#define COPY_DATA_PERF 4
+#define COPY_DATA_IMM 5
+#define COPY_DATA_TIMESTAMP 9
+#define COPY_DATA_DST_SEL(x) (((unsigned)(x) & 0xf) << 8)
+#define COPY_DATA_MEM_ASYNC 5
+#define COPY_DATA_COUNT_SEL (1 << 16)
+#define COPY_DATA_WR_CONFIRM (1 << 20)
#define PKT3_EVENT_WRITE 0x46
#define PKT3_EVENT_WRITE_EOP 0x47
#define EOP_DATA_SEL(x) ((x) << 29)
@@ -63,6 +74,7 @@
* 3 - send 64bit GPU counter value
* 4 - send 64bit sys counter value
*/
+#define PKT3_RELEASE_MEM 0x49 /* GFX9+ */
#define PKT3_SET_CONFIG_REG 0x68
#define PKT3_SET_CONTEXT_REG 0x69
#define PKT3_STRMOUT_BASE_UPDATE 0x72 /* r700 only */
@@ -184,18 +196,42 @@
#define EG_S_028A4C_FORCE_EOV_REZ_ENABLE(x) (((unsigned)(x) & 0x1) << 26)
#define CM_R_028804_DB_EQAA 0x00028804
-#define S_028804_MAX_ANCHOR_SAMPLES(x) (((unsigned)(x) & 0x7) << 0)
-#define S_028804_PS_ITER_SAMPLES(x) (((unsigned)(x) & 0x7) << 4)
-#define S_028804_MASK_EXPORT_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 8)
-#define S_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 12)
-#define S_028804_HIGH_QUALITY_INTERSECTIONS(x) (((unsigned)(x) & 0x1) << 16)
-#define S_028804_INCOHERENT_EQAA_READS(x) (((unsigned)(x) & 0x1) << 17)
-#define S_028804_INTERPOLATE_COMP_Z(x) (((unsigned)(x) & 0x1) << 18)
-#define S_028804_INTERPOLATE_SRC_Z(x) (((unsigned)(x) & 0x1) << 19)
-#define S_028804_STATIC_ANCHOR_ASSOCIATIONS(x) (((unsigned)(x) & 0x1) << 20)
-#define S_028804_ALPHA_TO_MASK_EQAA_DISABLE(x) (((unsigned)(x) & 0x1) << 21)
-#define S_028804_OVERRASTERIZATION_AMOUNT(x) (((unsigned)(x) & 0x07) << 24)
-#define S_028804_ENABLE_POSTZ_OVERRASTERIZATION(x) (((unsigned)(x) & 0x1) << 27)
+#define S_028804_MAX_ANCHOR_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028804_MAX_ANCHOR_SAMPLES(x) (((x) >> 0) & 0x07)
+#define C_028804_MAX_ANCHOR_SAMPLES 0xFFFFFFF8
+#define S_028804_PS_ITER_SAMPLES(x) (((unsigned)(x) & 0x07) << 4)
+#define G_028804_PS_ITER_SAMPLES(x) (((x) >> 4) & 0x07)
+#define C_028804_PS_ITER_SAMPLES 0xFFFFFF8F
+#define S_028804_MASK_EXPORT_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 8)
+#define G_028804_MASK_EXPORT_NUM_SAMPLES(x) (((x) >> 8) & 0x07)
+#define C_028804_MASK_EXPORT_NUM_SAMPLES 0xFFFFF8FF
+#define S_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 12)
+#define G_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((x) >> 12) & 0x07)
+#define C_028804_ALPHA_TO_MASK_NUM_SAMPLES 0xFFFF8FFF
+#define S_028804_HIGH_QUALITY_INTERSECTIONS(x) (((unsigned)(x) & 0x1) << 16)
+#define G_028804_HIGH_QUALITY_INTERSECTIONS(x) (((x) >> 16) & 0x1)
+#define C_028804_HIGH_QUALITY_INTERSECTIONS 0xFFFEFFFF
+#define S_028804_INCOHERENT_EQAA_READS(x) (((unsigned)(x) & 0x1) << 17)
+#define G_028804_INCOHERENT_EQAA_READS(x) (((x) >> 17) & 0x1)
+#define C_028804_INCOHERENT_EQAA_READS 0xFFFDFFFF
+#define S_028804_INTERPOLATE_COMP_Z(x) (((unsigned)(x) & 0x1) << 18)
+#define G_028804_INTERPOLATE_COMP_Z(x) (((x) >> 18) & 0x1)
+#define C_028804_INTERPOLATE_COMP_Z 0xFFFBFFFF
+#define S_028804_INTERPOLATE_SRC_Z(x) (((unsigned)(x) & 0x1) << 19)
+#define G_028804_INTERPOLATE_SRC_Z(x) (((x) >> 19) & 0x1)
+#define C_028804_INTERPOLATE_SRC_Z 0xFFF7FFFF
+#define S_028804_STATIC_ANCHOR_ASSOCIATIONS(x) (((unsigned)(x) & 0x1) << 20)
+#define G_028804_STATIC_ANCHOR_ASSOCIATIONS(x) (((x) >> 20) & 0x1)
+#define C_028804_STATIC_ANCHOR_ASSOCIATIONS 0xFFEFFFFF
+#define S_028804_ALPHA_TO_MASK_EQAA_DISABLE(x) (((unsigned)(x) & 0x1) << 21)
+#define G_028804_ALPHA_TO_MASK_EQAA_DISABLE(x) (((x) >> 21) & 0x1)
+#define C_028804_ALPHA_TO_MASK_EQAA_DISABLE 0xFFDFFFFF
+#define S_028804_OVERRASTERIZATION_AMOUNT(x) (((unsigned)(x) & 0x07) << 24)
+#define G_028804_OVERRASTERIZATION_AMOUNT(x) (((x) >> 24) & 0x07)
+#define C_028804_OVERRASTERIZATION_AMOUNT 0xF8FFFFFF
+#define S_028804_ENABLE_POSTZ_OVERRASTERIZATION(x) (((unsigned)(x) & 0x1) << 27)
+#define G_028804_ENABLE_POSTZ_OVERRASTERIZATION(x) (((x) >> 27) & 0x1)
+#define C_028804_ENABLE_POSTZ_OVERRASTERIZATION 0xF7FFFFFF
#define CM_R_028BDC_PA_SC_LINE_CNTL 0x28bdc
#define S_028BDC_EXPAND_LINE_WIDTH(x) (((unsigned)(x) & 0x1) << 9)
#define G_028BDC_EXPAND_LINE_WIDTH(x) (((x) >> 9) & 0x1)
@@ -210,11 +246,21 @@
#define G_028BDC_DX10_DIAMOND_TEST_ENA(x) (((x) >> 12) & 0x1)
#define C_028BDC_DX10_DIAMOND_TEST_ENA 0xFFFFEFFF
#define CM_R_028BE0_PA_SC_AA_CONFIG 0x28be0
-#define S_028BE0_MSAA_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 0)
-#define S_028BE0_AA_MASK_CENTROID_DTMN(x) (((unsigned)(x) & 0x1) << 4)
-#define S_028BE0_MAX_SAMPLE_DIST(x) (((unsigned)(x) & 0xf) << 13)
-#define S_028BE0_MSAA_EXPOSED_SAMPLES(x) (((unsigned)(x) & 0x7) << 20)
-#define S_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((unsigned)(x) & 0x3) << 24)
+#define S_028BE0_MSAA_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
+#define G_028BE0_MSAA_NUM_SAMPLES(x) (((x) >> 0) & 0x07)
+#define C_028BE0_MSAA_NUM_SAMPLES 0xFFFFFFF8
+#define S_028BE0_AA_MASK_CENTROID_DTMN(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028BE0_AA_MASK_CENTROID_DTMN(x) (((x) >> 4) & 0x1)
+#define C_028BE0_AA_MASK_CENTROID_DTMN 0xFFFFFFEF
+#define S_028BE0_MAX_SAMPLE_DIST(x) (((unsigned)(x) & 0x0F) << 13)
+#define G_028BE0_MAX_SAMPLE_DIST(x) (((x) >> 13) & 0x0F)
+#define C_028BE0_MAX_SAMPLE_DIST 0xFFFE1FFF
+#define S_028BE0_MSAA_EXPOSED_SAMPLES(x) (((unsigned)(x) & 0x07) << 20)
+#define G_028BE0_MSAA_EXPOSED_SAMPLES(x) (((x) >> 20) & 0x07)
+#define C_028BE0_MSAA_EXPOSED_SAMPLES 0xFF8FFFFF
+#define S_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((unsigned)(x) & 0x03) << 24)
+#define G_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((x) >> 24) & 0x03)
+#define C_028BE0_DETAIL_TO_EXPOSED_MODE 0xFCFFFFFF
#define CM_R_028BF8_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0 0x28bf8
#define CM_R_028C08_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0 0x28c08
#define CM_R_028C18_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0 0x28c18
diff --git a/lib/mesa/src/amd/common/sid.h b/lib/mesa/src/amd/common/sid.h
index 888de111a..1016f6747 100644
--- a/lib/mesa/src/amd/common/sid.h
+++ b/lib/mesa/src/amd/common/sid.h
@@ -50,12 +50,22 @@
* 4 - *S_PARTIAL_FLUSH
* 5 - TS events
*/
-#define EVENT_WRITE_INV_L2 0x100000
+
+/* EVENT_WRITE_EOP (SI-VI) & RELEASE_MEM (GFX9) */
+#define EVENT_TCL1_VOL_ACTION_ENA (1 << 12)
+#define EVENT_TC_VOL_ACTION_ENA (1 << 13)
+#define EVENT_TC_WB_ACTION_ENA (1 << 15)
+#define EVENT_TCL1_ACTION_ENA (1 << 16)
+#define EVENT_TC_ACTION_ENA (1 << 17)
+#define EVENT_TC_NC_ACTION_ENA (1 << 19) /* GFX9+ */
+#define EVENT_TC_WC_ACTION_ENA (1 << 20) /* GFX9+ */
+#define EVENT_TC_MD_ACTION_ENA (1 << 21) /* GFX9+ */
#define PREDICATION_OP_CLEAR 0x0
#define PREDICATION_OP_ZPASS 0x1
#define PREDICATION_OP_PRIMCOUNT 0x2
+#define PREDICATION_OP_BOOL64 0x3
#define PRED_OP(x) ((x) << 16)
@@ -91,7 +101,7 @@
#define CONTEXT_CONTROL_LOAD_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
#define CONTEXT_CONTROL_LOAD_CE_RAM(x) (((unsigned)(x) & 0x1) << 28)
#define CONTEXT_CONTROL_SHADOW_ENABLE(x) (((unsigned)(x) & 0x1) << 31)
-#define PKT3_INDEX_TYPE 0x2A
+#define PKT3_INDEX_TYPE 0x2A /* not on GFX9 */
#define PKT3_DRAW_INDIRECT_MULTI 0x2C
#define R_2C3_DRAW_INDEX_LOC 0x2C3
#define S_2C3_COUNT_INDIRECT_ENABLE(x) (((unsigned)(x) & 0x1) << 30)
@@ -133,7 +143,9 @@
#define R_3F1_IB_BASE_HI 0x3F1
#define R_3F2_CONTROL 0x3F2
#define S_3F2_IB_SIZE(x) (((unsigned)(x) & 0xfffff) << 0)
+#define G_3F2_IB_SIZE(x) (((unsigned)(x) >> 0) & 0xfffff)
#define S_3F2_CHAIN(x) (((unsigned)(x) & 0x1) << 20)
+#define G_3F2_CHAIN(x) (((unsigned)(x) >> 20) & 0x1)
#define S_3F2_VALID(x) (((unsigned)(x) & 0x1) << 23)
#define PKT3_COPY_DATA 0x40
@@ -142,6 +154,7 @@
#define COPY_DATA_MEM 1
#define COPY_DATA_PERF 4
#define COPY_DATA_IMM 5
+#define COPY_DATA_TIMESTAMP 9
#define COPY_DATA_DST_SEL(x) (((unsigned)(x) & 0xf) << 8)
#define COPY_DATA_COUNT_SEL (1 << 16)
#define COPY_DATA_WR_CONFIRM (1 << 20)
@@ -150,8 +163,14 @@
#define PKT3_ME_INITIALIZE 0x44 /* not on CIK */
#define PKT3_COND_WRITE 0x45
#define PKT3_EVENT_WRITE 0x46
-#define PKT3_EVENT_WRITE_EOP 0x47
-#define PKT3_EVENT_WRITE_EOS 0x48
+#define PKT3_EVENT_WRITE_EOP 0x47 /* not on GFX9 */
+/* CP DMA bug: Any use of CP_DMA.DST_SEL=TC must be avoided when EOS packets
+ * are used. Use DST_SEL=MC instead. For prefetch, use SRC_SEL=TC and
+ * DST_SEL=MC. Only CIK chips are affected.
+ */
+/* fix CP DMA before uncommenting: */
+/*#define PKT3_EVENT_WRITE_EOS 0x48*/ /* not on GFX9 */
+#define PKT3_RELEASE_MEM 0x49 /* GFX9+ [any ring] or GFX8 [compute ring only] */
#define PKT3_ONE_REG_WRITE 0x57 /* not on CIK */
#define PKT3_ACQUIRE_MEM 0x58 /* new for CIK */
#define PKT3_SET_CONFIG_REG 0x68
@@ -206,6 +225,7 @@
#define S_411_DSL_SEL(x) (((unsigned)(x) & 0x3) << 20)
#define V_411_DST_ADDR 0
#define V_411_GDS 1 /* program DAS to 1 as well */
+#define V_411_NOWHERE 2 /* new for GFX9 */
#define V_411_DST_ADDR_TC_L2 3 /* new for CIK */
#define S_411_SRC_ADDR_HI(x) ((x) & 0xffff)
#define R_412_CP_DMA_WORD2 0x412 /* 0x[packet number][word index] */
@@ -213,14 +233,15 @@
#define R_413_CP_DMA_WORD3 0x413 /* 0x[packet number][word index] */
#define S_413_DST_ADDR_HI(x) ((x) & 0xffff)
#define R_414_COMMAND 0x414
-#define S_414_BYTE_COUNT(x) ((x) & 0x1fffff)
-#define S_414_DISABLE_WR_CONFIRM(x) (((unsigned)(x) & 0x1) << 21)
-#define S_414_SRC_SWAP(x) (((unsigned)(x) & 0x3) << 22)
+#define S_414_BYTE_COUNT_GFX6(x) ((x) & 0x1fffff)
+#define S_414_BYTE_COUNT_GFX9(x) ((x) & 0x3ffffff)
+#define S_414_DISABLE_WR_CONFIRM_GFX6(x) (((unsigned)(x) & 0x1) << 21) /* not on GFX9 */
+#define S_414_SRC_SWAP(x) (((unsigned)(x) & 0x3) << 22) /* not on GFX9 */
#define V_414_NONE 0
#define V_414_8_IN_16 1
#define V_414_8_IN_32 2
#define V_414_8_IN_64 3
-#define S_414_DST_SWAP(x) (((unsigned)(x) & 0x3) << 24)
+#define S_414_DST_SWAP(x) (((unsigned)(x) & 0x3) << 24) /* not on GFX9 */
#define V_414_NONE 0
#define V_414_8_IN_16 1
#define V_414_8_IN_32 2
@@ -238,6 +259,7 @@
#define V_414_INCREMENT 0
#define V_414_NO_INCREMENT 1
#define S_414_RAW_WAIT(x) (((unsigned)(x) & 0x1) << 30)
+#define S_414_DISABLE_WR_CONFIRM_GFX9(x) (((unsigned)(x) & 0x1) << 31)
#define PKT3_DMA_DATA 0x50 /* new for CIK */
/* 1. header
@@ -258,6 +280,7 @@
#define S_500_DSL_SEL(x) (((unsigned)(x) & 0x3) << 20)
#define V_500_DST_ADDR 0
#define V_500_GDS 1 /* program DAS to 1 as well */
+#define V_500_NOWHERE 2 /* new for GFX9 */
#define V_500_DST_ADDR_TC_L2 3 /* new for CIK */
#define S_500_ENGINE(x) ((x) & 0x1)
#define V_500_ME 0
@@ -2056,9 +2079,9 @@
#define S_008F14_MIN_LOD(x) (((unsigned)(x) & 0xFFF) << 8)
#define G_008F14_MIN_LOD(x) (((x) >> 8) & 0xFFF)
#define C_008F14_MIN_LOD 0xFFF000FF
-#define S_008F14_DATA_FORMAT(x) (((unsigned)(x) & 0x3F) << 20)
-#define G_008F14_DATA_FORMAT(x) (((x) >> 20) & 0x3F)
-#define C_008F14_DATA_FORMAT 0xFC0FFFFF
+#define S_008F14_DATA_FORMAT_GFX6(x) (((unsigned)(x) & 0x3F) << 20)
+#define G_008F14_DATA_FORMAT_GFX6(x) (((x) >> 20) & 0x3F)
+#define C_008F14_DATA_FORMAT_GFX6 0xFC0FFFFF
#define V_008F14_IMG_DATA_FORMAT_INVALID 0x00
#define V_008F14_IMG_DATA_FORMAT_8 0x01
#define V_008F14_IMG_DATA_FORMAT_16 0x02
@@ -2101,8 +2124,8 @@
#define V_008F14_IMG_DATA_FORMAT_BC5 0x27
#define V_008F14_IMG_DATA_FORMAT_BC6 0x28
#define V_008F14_IMG_DATA_FORMAT_BC7 0x29
-#define V_008F14_IMG_DATA_FORMAT_16_AS_16_16_16_16 0x2A /* stoney+ */
-#define V_008F14_IMG_DATA_FORMAT_16_AS_32_32_32_32 0x2B /* stoney+ */
+#define V_008F14_IMG_DATA_FORMAT_16_AS_16_16_16_16_GFX6 0x2A /* stoney+ */
+#define V_008F14_IMG_DATA_FORMAT_16_AS_32_32_32_32_GFX6 0x2B /* stoney+ */
#define V_008F14_IMG_DATA_FORMAT_FMASK8_S2_F1 0x2C
#define V_008F14_IMG_DATA_FORMAT_FMASK8_S4_F1 0x2D
#define V_008F14_IMG_DATA_FORMAT_FMASK8_S8_F1 0x2E
@@ -2123,9 +2146,9 @@
#define V_008F14_IMG_DATA_FORMAT_32_AS_8 0x3D /* not on stoney */
#define V_008F14_IMG_DATA_FORMAT_32_AS_8_8 0x3E /* not on stoney */
#define V_008F14_IMG_DATA_FORMAT_32_AS_32_32_32_32 0x3F
-#define S_008F14_NUM_FORMAT(x) (((unsigned)(x) & 0x0F) << 26)
-#define G_008F14_NUM_FORMAT(x) (((x) >> 26) & 0x0F)
-#define C_008F14_NUM_FORMAT 0xC3FFFFFF
+#define S_008F14_NUM_FORMAT_GFX6(x) (((unsigned)(x) & 0x0F) << 26)
+#define G_008F14_NUM_FORMAT_GFX6(x) (((x) >> 26) & 0x0F)
+#define C_008F14_NUM_FORMAT_GFX6 0xC3FFFFFF
#define V_008F14_IMG_NUM_FORMAT_UNORM 0x00
#define V_008F14_IMG_NUM_FORMAT_SNORM 0x01
#define V_008F14_IMG_NUM_FORMAT_USCALED 0x02
@@ -2136,10 +2159,10 @@
#define V_008F14_IMG_NUM_FORMAT_FLOAT 0x07
#define V_008F14_IMG_NUM_FORMAT_RESERVED_8 0x08
#define V_008F14_IMG_NUM_FORMAT_SRGB 0x09
-#define V_008F14_IMG_NUM_FORMAT_UBNORM 0x0A
-#define V_008F14_IMG_NUM_FORMAT_UBNORM_OGL 0x0B
-#define V_008F14_IMG_NUM_FORMAT_UBINT 0x0C
-#define V_008F14_IMG_NUM_FORMAT_UBSCALED 0x0D
+#define V_008F14_IMG_NUM_FORMAT_UBNORM 0x0A /* not on VI+ */
+#define V_008F14_IMG_NUM_FORMAT_UBNORM_OGL 0x0B /* not on VI+ */
+#define V_008F14_IMG_NUM_FORMAT_UBINT 0x0C /* not on VI+ */
+#define V_008F14_IMG_NUM_FORMAT_UBSCALED 0x0D /* not on VI+ */
#define V_008F14_IMG_NUM_FORMAT_RESERVED_14 0x0E
#define V_008F14_IMG_NUM_FORMAT_RESERVED_15 0x0F
/* CIK */
@@ -2253,9 +2276,9 @@
#define S_008F20_DEPTH(x) (((unsigned)(x) & 0x1FFF) << 0)
#define G_008F20_DEPTH(x) (((x) >> 0) & 0x1FFF)
#define C_008F20_DEPTH 0xFFFFE000
-#define S_008F20_PITCH(x) (((unsigned)(x) & 0x3FFF) << 13)
-#define G_008F20_PITCH(x) (((x) >> 13) & 0x3FFF)
-#define C_008F20_PITCH 0xF8001FFF
+#define S_008F20_PITCH_GFX6(x) (((unsigned)(x) & 0x3FFF) << 13)
+#define G_008F20_PITCH_GFX6(x) (((x) >> 13) & 0x3FFF)
+#define C_008F20_PITCH_GFX6 0xF8001FFF
#define R_008F24_SQ_IMG_RSRC_WORD5 0x008F24
#define S_008F24_BASE_ARRAY(x) (((unsigned)(x) & 0x1FFF) << 0)
#define G_008F24_BASE_ARRAY(x) (((x) >> 0) & 0x1FFF)
@@ -2430,6 +2453,8 @@
#define S_008F3C_BORDER_COLOR_PTR(x) (((unsigned)(x) & 0xFFF) << 0)
#define G_008F3C_BORDER_COLOR_PTR(x) (((x) >> 0) & 0xFFF)
#define C_008F3C_BORDER_COLOR_PTR 0xFFFFF000
+/* The UPGRADED_DEPTH field is driver-specific and does not exist in hardware. */
+#define S_008F3C_UPGRADED_DEPTH(x) (((unsigned)(x) & 0x1) << 29)
#define S_008F3C_BORDER_COLOR_TYPE(x) (((unsigned)(x) & 0x03) << 30)
#define G_008F3C_BORDER_COLOR_TYPE(x) (((x) >> 30) & 0x03)
#define C_008F3C_BORDER_COLOR_TYPE 0x3FFFFFFF
@@ -2666,21 +2691,21 @@
#define S_0098F8_NUM_PIPES(x) (((unsigned)(x) & 0x07) << 0)
#define G_0098F8_NUM_PIPES(x) (((x) >> 0) & 0x07)
#define C_0098F8_NUM_PIPES 0xFFFFFFF8
-#define S_0098F8_PIPE_INTERLEAVE_SIZE(x) (((unsigned)(x) & 0x07) << 4)
-#define G_0098F8_PIPE_INTERLEAVE_SIZE(x) (((x) >> 4) & 0x07)
-#define C_0098F8_PIPE_INTERLEAVE_SIZE 0xFFFFFF8F
+#define S_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(x) (((unsigned)(x) & 0x07) << 4)
+#define G_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(x) (((x) >> 4) & 0x07)
+#define C_0098F8_PIPE_INTERLEAVE_SIZE_GFX6 0xFFFFFF8F
#define S_0098F8_BANK_INTERLEAVE_SIZE(x) (((unsigned)(x) & 0x07) << 8)
#define G_0098F8_BANK_INTERLEAVE_SIZE(x) (((x) >> 8) & 0x07)
#define C_0098F8_BANK_INTERLEAVE_SIZE 0xFFFFF8FF
-#define S_0098F8_NUM_SHADER_ENGINES(x) (((unsigned)(x) & 0x03) << 12)
-#define G_0098F8_NUM_SHADER_ENGINES(x) (((x) >> 12) & 0x03)
-#define C_0098F8_NUM_SHADER_ENGINES 0xFFFFCFFF
+#define S_0098F8_NUM_SHADER_ENGINES_GFX6(x) (((unsigned)(x) & 0x03) << 12)
+#define G_0098F8_NUM_SHADER_ENGINES_GFX6(x) (((x) >> 12) & 0x03)
+#define C_0098F8_NUM_SHADER_ENGINES_GFX6 0xFFFFCFFF
#define S_0098F8_SHADER_ENGINE_TILE_SIZE(x) (((unsigned)(x) & 0x07) << 16)
#define G_0098F8_SHADER_ENGINE_TILE_SIZE(x) (((x) >> 16) & 0x07)
#define C_0098F8_SHADER_ENGINE_TILE_SIZE 0xFFF8FFFF
-#define S_0098F8_NUM_GPUS(x) (((unsigned)(x) & 0x07) << 20)
-#define G_0098F8_NUM_GPUS(x) (((x) >> 20) & 0x07)
-#define C_0098F8_NUM_GPUS 0xFF8FFFFF
+#define S_0098F8_NUM_GPUS_GFX6(x) (((unsigned)(x) & 0x07) << 20)
+#define G_0098F8_NUM_GPUS_GFX6(x) (((x) >> 20) & 0x07)
+#define C_0098F8_NUM_GPUS_GFX6 0xFF8FFFFF
#define S_0098F8_MULTI_GPU_TILE_SIZE(x) (((unsigned)(x) & 0x03) << 24)
#define G_0098F8_MULTI_GPU_TILE_SIZE(x) (((x) >> 24) & 0x03)
#define C_0098F8_MULTI_GPU_TILE_SIZE 0xFCFFFFFF
@@ -2921,12 +2946,12 @@
#define S_00B02C_EXTRA_LDS_SIZE(x) (((unsigned)(x) & 0xFF) << 8)
#define G_00B02C_EXTRA_LDS_SIZE(x) (((x) >> 8) & 0xFF)
#define C_00B02C_EXTRA_LDS_SIZE 0xFFFF00FF
-#define S_00B02C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 16) /* mask is 0x1FF on CIK */
-#define G_00B02C_EXCP_EN(x) (((x) >> 16) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B02C_EXCP_EN 0xFF80FFFF /* mask is 0x1FF on CIK */
-#define S_00B02C_EXCP_EN_CIK(x) (((unsigned)(x) & 0x1FF) << 16)
-#define G_00B02C_EXCP_EN_CIK(x) (((x) >> 16) & 0x1FF)
-#define C_00B02C_EXCP_EN_CIK 0xFE00FFFF
+#define S_00B02C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 16)
+#define G_00B02C_EXCP_EN_SI(x) (((x) >> 16) & 0x7F)
+#define C_00B02C_EXCP_EN_SI 0xFF80FFFF
+#define S_00B02C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 16)
+#define G_00B02C_EXCP_EN(x) (((x) >> 16) & 0x1FF)
+#define C_00B02C_EXCP_EN 0xFE00FFFF
#define R_00B030_SPI_SHADER_USER_DATA_PS_0 0x00B030
#define R_00B034_SPI_SHADER_USER_DATA_PS_1 0x00B034
#define R_00B038_SPI_SHADER_USER_DATA_PS_2 0x00B038
@@ -3041,12 +3066,12 @@
#define S_00B12C_SO_EN(x) (((unsigned)(x) & 0x1) << 12)
#define G_00B12C_SO_EN(x) (((x) >> 12) & 0x1)
#define C_00B12C_SO_EN 0xFFFFEFFF
-#define S_00B12C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 13) /* mask is 0x1FF on CIK */
-#define G_00B12C_EXCP_EN(x) (((x) >> 13) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B12C_EXCP_EN 0xFFF01FFF /* mask is 0x1FF on CIK */
-#define S_00B12C_EXCP_EN_CIK(x) (((unsigned)(x) & 0x1FF) << 13)
-#define G_00B12C_EXCP_EN_CIK(x) (((x) >> 13) & 0x1FF)
-#define C_00B12C_EXCP_EN_CIK 0xFFC01FFF
+#define S_00B12C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 13)
+#define G_00B12C_EXCP_EN_SI(x) (((x) >> 13) & 0x7F)
+#define C_00B12C_EXCP_EN_SI 0xFFF01FFF
+#define S_00B12C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 13)
+#define G_00B12C_EXCP_EN(x) (((x) >> 13) & 0x1FF)
+#define C_00B12C_EXCP_EN 0xFFC01FFF
/* VI */
#define S_00B12C_DISPATCH_DRAW_EN(x) (((unsigned)(x) & 0x1) << 24)
#define G_00B12C_DISPATCH_DRAW_EN(x) (((x) >> 24) & 0x1)
@@ -3146,12 +3171,12 @@
#define S_00B22C_TRAP_PRESENT(x) (((unsigned)(x) & 0x1) << 6)
#define G_00B22C_TRAP_PRESENT(x) (((x) >> 6) & 0x1)
#define C_00B22C_TRAP_PRESENT 0xFFFFFFBF
-#define S_00B22C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 7) /* mask is 0x1FF on CIK */
-#define G_00B22C_EXCP_EN(x) (((x) >> 7) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B22C_EXCP_EN 0xFFFFC07F /* mask is 0x1FF on CIK */
-#define S_00B22C_EXCP_EN_CIK(x) (((unsigned)(x) & 0x1FF) << 7)
-#define G_00B22C_EXCP_EN_CIK(x) (((x) >> 7) & 0x1FF)
-#define C_00B22C_EXCP_EN_CIK 0xFFFF007F
+#define S_00B22C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 7)
+#define G_00B22C_EXCP_EN_SI(x) (((x) >> 7) & 0x7F)
+#define C_00B22C_EXCP_EN_SI 0xFFFFC07F
+#define S_00B22C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 7)
+#define G_00B22C_EXCP_EN(x) (((x) >> 7) & 0x1FF)
+#define C_00B22C_EXCP_EN 0xFFFF007F
#define R_00B230_SPI_SHADER_USER_DATA_GS_0 0x00B230
#define R_00B234_SPI_SHADER_USER_DATA_GS_1 0x00B234
#define R_00B238_SPI_SHADER_USER_DATA_GS_2 0x00B238
@@ -3252,9 +3277,12 @@
#define S_00B32C_OC_LDS_EN(x) (((unsigned)(x) & 0x1) << 7)
#define G_00B32C_OC_LDS_EN(x) (((x) >> 7) & 0x1)
#define C_00B32C_OC_LDS_EN 0xFFFFFF7F
-#define S_00B32C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 8) /* mask is 0x1FF on CIK */
-#define G_00B32C_EXCP_EN(x) (((x) >> 8) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B32C_EXCP_EN 0xFFFF80FF /* mask is 0x1FF on CIK */
+#define S_00B32C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 8)
+#define G_00B32C_EXCP_EN_SI(x) (((x) >> 8) & 0x7F)
+#define C_00B32C_EXCP_EN_SI 0xFFFF80FF
+#define S_00B32C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 8)
+#define G_00B32C_EXCP_EN(x) (((x) >> 8) & 0x1FF)
+#define C_00B32C_EXCP_EN 0xFFFE00FF
#define S_00B32C_LDS_SIZE(x) (((unsigned)(x) & 0x1FF) << 20) /* CIK, for on-chip GS */
#define G_00B32C_LDS_SIZE(x) (((x) >> 20) & 0x1FF) /* CIK, for on-chip GS */
#define C_00B32C_LDS_SIZE 0xE00FFFFF /* CIK, for on-chip GS */
@@ -3352,9 +3380,12 @@
#define S_00B42C_TG_SIZE_EN(x) (((unsigned)(x) & 0x1) << 8)
#define G_00B42C_TG_SIZE_EN(x) (((x) >> 8) & 0x1)
#define C_00B42C_TG_SIZE_EN 0xFFFFFEFF
-#define S_00B42C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 9) /* mask is 0x1FF on CIK */
-#define G_00B42C_EXCP_EN(x) (((x) >> 9) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B42C_EXCP_EN 0xFFFF01FF /* mask is 0x1FF on CIK */
+#define S_00B42C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 9)
+#define G_00B42C_EXCP_EN_SI(x) (((x) >> 9) & 0x7F)
+#define C_00B42C_EXCP_EN_SI 0xFFFF01FF
+#define S_00B42C_EXCP_EN_CIK_VI(x) (((unsigned)(x) & 0x1FF) << 9)
+#define G_00B42C_EXCP_EN_CIK_VI(x) (((x) >> 9) & 0x1FF)
+#define C_00B42C_EXCP_EN_CIK_VI 0xFFFC01FF
#define R_00B430_SPI_SHADER_USER_DATA_HS_0 0x00B430
#define R_00B434_SPI_SHADER_USER_DATA_HS_1 0x00B434
#define R_00B438_SPI_SHADER_USER_DATA_HS_2 0x00B438
@@ -3452,9 +3483,12 @@
#define S_00B52C_LDS_SIZE(x) (((unsigned)(x) & 0x1FF) << 7)
#define G_00B52C_LDS_SIZE(x) (((x) >> 7) & 0x1FF)
#define C_00B52C_LDS_SIZE 0xFFFF007F
-#define S_00B52C_EXCP_EN(x) (((unsigned)(x) & 0x7F) << 16) /* mask is 0x1FF on CIK */
-#define G_00B52C_EXCP_EN(x) (((x) >> 16) & 0x7F) /* mask is 0x1FF on CIK */
-#define C_00B52C_EXCP_EN 0xFF80FFFF /* mask is 0x1FF on CIK */
+#define S_00B52C_EXCP_EN_SI(x) (((unsigned)(x) & 0x7F) << 16)
+#define G_00B52C_EXCP_EN_SI(x) (((x) >> 16) & 0x7F)
+#define C_00B52C_EXCP_EN_SI 0xFF80FFFF
+#define S_00B52C_EXCP_EN(x) (((unsigned)(x) & 0x1FF) << 16)
+#define G_00B52C_EXCP_EN(x) (((x) >> 16) & 0x1FF)
+#define C_00B52C_EXCP_EN 0xFE00FFFF
#define R_00B530_SPI_SHADER_USER_DATA_LS_0 0x00B530
#define R_00B534_SPI_SHADER_USER_DATA_LS_1 0x00B534
#define R_00B538_SPI_SHADER_USER_DATA_LS_2 0x00B538
@@ -3645,12 +3679,12 @@
#define G_00B850_DATA(x) (((x) >> 0) & 0x0F)
#define C_00B850_DATA 0xFFFFFFF0
#define R_00B854_COMPUTE_RESOURCE_LIMITS 0x00B854
-#define S_00B854_WAVES_PER_SH(x) (((unsigned)(x) & 0x3F) << 0) /* mask is 0x3FF on CIK */
-#define G_00B854_WAVES_PER_SH(x) (((x) >> 0) & 0x3F) /* mask is 0x3FF on CIK */
-#define C_00B854_WAVES_PER_SH 0xFFFFFFC0 /* mask is 0x3FF on CIK */
-#define S_00B854_WAVES_PER_SH_CIK(x) (((unsigned)(x) & 0x3FF) << 0)
-#define G_00B854_WAVES_PER_SH_CIK(x) (((x) >> 0) & 0x3FF)
-#define C_00B854_WAVES_PER_SH_CIK 0xFFFFFC00
+#define S_00B854_WAVES_PER_SH_SI(x) (((unsigned)(x) & 0x3F) << 0)
+#define G_00B854_WAVES_PER_SH_SI(x) (((x) >> 0) & 0x3F)
+#define C_00B854_WAVES_PER_SH_SI 0xFFFFFFC0
+#define S_00B854_WAVES_PER_SH(x) (((unsigned)(x) & 0x3FF) << 0) /* CIK+ */
+#define G_00B854_WAVES_PER_SH(x) (((x) >> 0) & 0x3FF)
+#define C_00B854_WAVES_PER_SH 0xFFFFFC00
#define S_00B854_TG_PER_CU(x) (((unsigned)(x) & 0x0F) << 12)
#define G_00B854_TG_PER_CU(x) (((x) >> 12) & 0x0F)
#define C_00B854_TG_PER_CU 0xFFFF0FFF
@@ -5497,16 +5531,16 @@
#define V_028350_RASTER_CONFIG_SE_MAP_1 0x01
#define V_028350_RASTER_CONFIG_SE_MAP_2 0x02
#define V_028350_RASTER_CONFIG_SE_MAP_3 0x03
-#define S_028350_SE_XSEL(x) (((unsigned)(x) & 0x03) << 26)
-#define G_028350_SE_XSEL(x) (((x) >> 26) & 0x03)
-#define C_028350_SE_XSEL 0xF3FFFFFF
+#define S_028350_SE_XSEL_GFX6(x) (((unsigned)(x) & 0x03) << 26)
+#define G_028350_SE_XSEL_GFX6(x) (((x) >> 26) & 0x03)
+#define C_028350_SE_XSEL_GFX6 0xF3FFFFFF
#define V_028350_RASTER_CONFIG_SE_XSEL_8_WIDE_TILE 0x00
#define V_028350_RASTER_CONFIG_SE_XSEL_16_WIDE_TILE 0x01
#define V_028350_RASTER_CONFIG_SE_XSEL_32_WIDE_TILE 0x02
#define V_028350_RASTER_CONFIG_SE_XSEL_64_WIDE_TILE 0x03
-#define S_028350_SE_YSEL(x) (((unsigned)(x) & 0x03) << 28)
-#define G_028350_SE_YSEL(x) (((x) >> 28) & 0x03)
-#define C_028350_SE_YSEL 0xCFFFFFFF
+#define S_028350_SE_YSEL_GFX6(x) (((unsigned)(x) & 0x03) << 28)
+#define G_028350_SE_YSEL_GFX6(x) (((x) >> 28) & 0x03)
+#define C_028350_SE_YSEL_GFX6 0xCFFFFFFF
#define V_028350_RASTER_CONFIG_SE_YSEL_8_WIDE_TILE 0x00
#define V_028350_RASTER_CONFIG_SE_YSEL_16_WIDE_TILE 0x01
#define V_028350_RASTER_CONFIG_SE_YSEL_32_WIDE_TILE 0x02
@@ -5520,16 +5554,16 @@
#define V_028354_RASTER_CONFIG_SE_PAIR_MAP_1 0x01
#define V_028354_RASTER_CONFIG_SE_PAIR_MAP_2 0x02
#define V_028354_RASTER_CONFIG_SE_PAIR_MAP_3 0x03
-#define S_028354_SE_PAIR_XSEL(x) (((unsigned)(x) & 0x03) << 2)
-#define G_028354_SE_PAIR_XSEL(x) (((x) >> 2) & 0x03)
-#define C_028354_SE_PAIR_XSEL 0xFFFFFFF3
+#define S_028354_SE_PAIR_XSEL_GFX6(x) (((unsigned)(x) & 0x03) << 2)
+#define G_028354_SE_PAIR_XSEL_GFX6(x) (((x) >> 2) & 0x03)
+#define C_028354_SE_PAIR_XSEL_GFX6 0xFFFFFFF3
#define V_028354_RASTER_CONFIG_SE_PAIR_XSEL_8_WIDE_TILE 0x00
#define V_028354_RASTER_CONFIG_SE_PAIR_XSEL_16_WIDE_TILE 0x01
#define V_028354_RASTER_CONFIG_SE_PAIR_XSEL_32_WIDE_TILE 0x02
#define V_028354_RASTER_CONFIG_SE_PAIR_XSEL_64_WIDE_TILE 0x03
-#define S_028354_SE_PAIR_YSEL(x) (((unsigned)(x) & 0x03) << 4)
-#define G_028354_SE_PAIR_YSEL(x) (((x) >> 4) & 0x03)
-#define C_028354_SE_PAIR_YSEL 0xFFFFFFCF
+#define S_028354_SE_PAIR_YSEL_GFX6(x) (((unsigned)(x) & 0x03) << 4)
+#define G_028354_SE_PAIR_YSEL_GFX6(x) (((x) >> 4) & 0x03)
+#define C_028354_SE_PAIR_YSEL_GFX6 0xFFFFFFCF
#define V_028354_RASTER_CONFIG_SE_PAIR_YSEL_8_WIDE_TILE 0x00
#define V_028354_RASTER_CONFIG_SE_PAIR_YSEL_16_WIDE_TILE 0x01
#define V_028354_RASTER_CONFIG_SE_PAIR_YSEL_32_WIDE_TILE 0x02
@@ -6687,9 +6721,9 @@
#define R_0287DC_PA_CL_POINT_SIZE 0x0287DC
#define R_0287E0_PA_CL_POINT_CULL_RAD 0x0287E0
#define R_0287E4_VGT_DMA_BASE_HI 0x0287E4
-#define S_0287E4_BASE_ADDR(x) (((unsigned)(x) & 0xFF) << 0)
-#define G_0287E4_BASE_ADDR(x) (((x) >> 0) & 0xFF)
-#define C_0287E4_BASE_ADDR 0xFFFFFF00
+#define S_0287E4_BASE_ADDR_GFX6(x) (((unsigned)(x) & 0xFF) << 0)
+#define G_0287E4_BASE_ADDR_GFX6(x) (((x) >> 0) & 0xFF)
+#define C_0287E4_BASE_ADDR_GFX6 0xFFFFFF00
#define R_0287E8_VGT_DMA_BASE 0x0287E8
#define R_0287F0_VGT_DRAW_INITIATOR 0x0287F0
#define S_0287F0_SOURCE_SELECT(x) (((unsigned)(x) & 0x03) << 0)
@@ -6771,16 +6805,16 @@
#define G_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS(x) (((x) >> 31) & 0x1)
#define C_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS 0x7FFFFFFF
#define R_028804_DB_EQAA 0x028804
-#define S_028804_MAX_ANCHOR_SAMPLES(x) (((unsigned)(x) & 0x7) << 0)
+#define S_028804_MAX_ANCHOR_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
#define G_028804_MAX_ANCHOR_SAMPLES(x) (((x) >> 0) & 0x07)
#define C_028804_MAX_ANCHOR_SAMPLES 0xFFFFFFF8
-#define S_028804_PS_ITER_SAMPLES(x) (((unsigned)(x) & 0x7) << 4)
+#define S_028804_PS_ITER_SAMPLES(x) (((unsigned)(x) & 0x07) << 4)
#define G_028804_PS_ITER_SAMPLES(x) (((x) >> 4) & 0x07)
#define C_028804_PS_ITER_SAMPLES 0xFFFFFF8F
-#define S_028804_MASK_EXPORT_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 8)
+#define S_028804_MASK_EXPORT_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 8)
#define G_028804_MASK_EXPORT_NUM_SAMPLES(x) (((x) >> 8) & 0x07)
#define C_028804_MASK_EXPORT_NUM_SAMPLES 0xFFFFF8FF
-#define S_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 12)
+#define S_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 12)
#define G_028804_ALPHA_TO_MASK_NUM_SAMPLES(x) (((x) >> 12) & 0x07)
#define C_028804_ALPHA_TO_MASK_NUM_SAMPLES 0xFFFF8FFF
#define S_028804_HIGH_QUALITY_INTERSECTIONS(x) (((unsigned)(x) & 0x1) << 16)
@@ -7224,12 +7258,21 @@
#define C_02882C_YMAX_BOTTOM_EXCLUSION 0x7FFFFFFF
/* */
#define R_028830_PA_SU_SMALL_PRIM_FILTER_CNTL 0x028830 /* Polaris */
-#define S_028830_SMALL_PRIM_FILTER_ENABLE(x) (((x) & 0x1) << 0)
+#define S_028830_SMALL_PRIM_FILTER_ENABLE(x) (((unsigned)(x) & 0x1) << 0)
+#define G_028830_SMALL_PRIM_FILTER_ENABLE(x) (((x) >> 0) & 0x1)
#define C_028830_SMALL_PRIM_FILTER_ENABLE 0xFFFFFFFE
-#define S_028830_TRIANGLE_FILTER_DISABLE(x) (((x) & 0x1) << 1)
-#define S_028830_LINE_FILTER_DISABLE(x) (((x) & 0x1) << 2)
-#define S_028830_POINT_FILTER_DISABLE(x) (((x) & 0x1) << 3)
-#define S_028830_RECTANGLE_FILTER_DISABLE(x) (((x) & 0x1) << 4)
+#define S_028830_TRIANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 1)
+#define G_028830_TRIANGLE_FILTER_DISABLE(x) (((x) >> 1) & 0x1)
+#define C_028830_TRIANGLE_FILTER_DISABLE 0xFFFFFFFD
+#define S_028830_LINE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 2)
+#define G_028830_LINE_FILTER_DISABLE(x) (((x) >> 2) & 0x1)
+#define C_028830_LINE_FILTER_DISABLE 0xFFFFFFFB
+#define S_028830_POINT_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 3)
+#define G_028830_POINT_FILTER_DISABLE(x) (((x) >> 3) & 0x1)
+#define C_028830_POINT_FILTER_DISABLE 0xFFFFFFF7
+#define S_028830_RECTANGLE_FILTER_DISABLE(x) (((unsigned)(x) & 0x1) << 4)
+#define G_028830_RECTANGLE_FILTER_DISABLE(x) (((x) >> 4) & 0x1)
+#define C_028830_RECTANGLE_FILTER_DISABLE 0xFFFFFFEF
#define R_028A00_PA_SU_POINT_SIZE 0x028A00
#define S_028A00_HEIGHT(x) (((unsigned)(x) & 0xFFFF) << 0)
#define G_028A00_HEIGHT(x) (((x) >> 0) & 0xFFFF)
@@ -7707,14 +7750,14 @@
#define V_028A7C_VGT_DMA_BUF_MEM 0x00
#define V_028A7C_VGT_DMA_BUF_RING 0x01
#define V_028A7C_VGT_DMA_BUF_SETUP 0x02
-#define S_028A7C_RDREQ_POLICY(x) (((unsigned)(x) & 0x03) << 6)
-#define G_028A7C_RDREQ_POLICY(x) (((x) >> 6) & 0x03)
-#define C_028A7C_RDREQ_POLICY 0xFFFFFF3F
+#define S_028A7C_RDREQ_POLICY_CIK(x) (((unsigned)(x) & 0x03) << 6)
+#define G_028A7C_RDREQ_POLICY_CIK(x) (((x) >> 6) & 0x03)
+#define C_028A7C_RDREQ_POLICY_CIK 0xFFFFFF3F
#define V_028A7C_VGT_POLICY_LRU 0x00
#define V_028A7C_VGT_POLICY_STREAM 0x01
-#define S_028A7C_RDREQ_POLICY_VI(x) (((unsigned)(x) & 0x1) << 6)
-#define G_028A7C_RDREQ_POLICY_VI(x) (((x) >> 6) & 0x1)
-#define C_028A7C_RDREQ_POLICY_VI 0xFFFFFFBF
+#define S_028A7C_RDREQ_POLICY(x) (((unsigned)(x) & 0x1) << 6) /* VI+ */
+#define G_028A7C_RDREQ_POLICY(x) (((x) >> 6) & 0x1)
+#define C_028A7C_RDREQ_POLICY 0xFFFFFFBF
#define S_028A7C_ATC(x) (((unsigned)(x) & 0x1) << 8)
#define G_028A7C_ATC(x) (((x) >> 8) & 0x1)
#define C_028A7C_ATC 0xFFFFFEFF
@@ -7761,7 +7804,7 @@
#define V_028A90_FLUSH_HS_OUTPUT 0x11
#define V_028A90_FLUSH_LS_OUTPUT 0x12
#define V_028A90_CACHE_FLUSH_AND_INV_TS_EVENT 0x14
-#define V_028A90_ZPASS_DONE 0x15 /* not on CIK */
+#define V_028A90_ZPASS_DONE 0x15
#define V_028A90_CACHE_FLUSH_AND_INV_EVENT 0x16
#define V_028A90_PERFCOUNTER_START 0x17
#define V_028A90_PERFCOUNTER_STOP 0x18
@@ -7795,11 +7838,11 @@
/* CIK */
#define V_028A90_PIXEL_PIPE_STAT_CONTROL 0x38
#define V_028A90_PIXEL_PIPE_STAT_DUMP 0x39
-#define V_028A90_PIXEL_PIPE_STAT_RESET 0x40
+#define V_028A90_PIXEL_PIPE_STAT_RESET 0x3A
/* */
-#define S_028A90_ADDRESS_HI(x) (((unsigned)(x) & 0x1FF) << 18)
-#define G_028A90_ADDRESS_HI(x) (((x) >> 18) & 0x1FF)
-#define C_028A90_ADDRESS_HI 0xF803FFFF
+#define S_028A90_ADDRESS_HI_GFX6(x) (((unsigned)(x) & 0x1FF) << 18)
+#define G_028A90_ADDRESS_HI_GFX6(x) (((x) >> 18) & 0x1FF)
+#define C_028A90_ADDRESS_HI_GFX6 0xF803FFFF
#define S_028A90_EXTENDED_EVENT(x) (((unsigned)(x) & 0x1) << 27)
#define G_028A90_EXTENDED_EVENT(x) (((x) >> 27) & 0x1)
#define C_028A90_EXTENDED_EVENT 0xF7FFFFFF
@@ -7980,8 +8023,8 @@
#define S_028B50_DONUT_SPLIT(x) (((unsigned)(x) & 0x1F) << 24)
#define G_028B50_DONUT_SPLIT(x) (((x) >> 24) & 0x1F)
#define C_028B50_DONUT_SPLIT 0xE0FFFFFF
-#define S_028B50_TRAP_SPLIT(x) (((unsigned)(x) & 0x7) << 29) /* Fiji+ */
-#define G_028B50_TRAP_SPLIT(x) (((x) >> 29) & 0x7)
+#define S_028B50_TRAP_SPLIT(x) (((unsigned)(x) & 0x07) << 29) /* Fiji+ */
+#define G_028B50_TRAP_SPLIT(x) (((x) >> 29) & 0x07)
#define C_028B50_TRAP_SPLIT 0x1FFFFFFF
/* */
#define R_028B54_VGT_SHADER_STAGES_EN 0x028B54
@@ -8086,17 +8129,17 @@
#define G_028B6C_DISABLE_DONUTS(x) (((x) >> 14) & 0x1)
#define C_028B6C_DISABLE_DONUTS 0xFFFFBFFF
/* CIK */
-#define S_028B6C_RDREQ_POLICY(x) (((unsigned)(x) & 0x03) << 15)
-#define G_028B6C_RDREQ_POLICY(x) (((x) >> 15) & 0x03)
-#define C_028B6C_RDREQ_POLICY 0xFFFE7FFF
+#define S_028B6C_RDREQ_POLICY_CIK(x) (((unsigned)(x) & 0x03) << 15)
+#define G_028B6C_RDREQ_POLICY_CIK(x) (((x) >> 15) & 0x03)
+#define C_028B6C_RDREQ_POLICY_CIK 0xFFFE7FFF
#define V_028B6C_VGT_POLICY_LRU 0x00
#define V_028B6C_VGT_POLICY_STREAM 0x01
#define V_028B6C_VGT_POLICY_BYPASS 0x02
/* */
/* VI */
-#define S_028B6C_RDREQ_POLICY_VI(x) (((unsigned)(x) & 0x1) << 15)
-#define G_028B6C_RDREQ_POLICY_VI(x) (((x) >> 15) & 0x1)
-#define C_028B6C_RDREQ_POLICY_VI 0xFFFF7FFF
+#define S_028B6C_RDREQ_POLICY(x) (((unsigned)(x) & 0x1) << 15) /* VI+ */
+#define G_028B6C_RDREQ_POLICY(x) (((x) >> 15) & 0x1)
+#define C_028B6C_RDREQ_POLICY 0xFFFF7FFF
#define S_028B6C_DISTRIBUTION_MODE(x) (((unsigned)(x) & 0x03) << 17)
#define G_028B6C_DISTRIBUTION_MODE(x) (((x) >> 17) & 0x03)
#define C_028B6C_DISTRIBUTION_MODE 0xFFF9FFFF
@@ -8248,19 +8291,19 @@
#define G_028BDC_DX10_DIAMOND_TEST_ENA(x) (((x) >> 12) & 0x1)
#define C_028BDC_DX10_DIAMOND_TEST_ENA 0xFFFFEFFF
#define R_028BE0_PA_SC_AA_CONFIG 0x028BE0
-#define S_028BE0_MSAA_NUM_SAMPLES(x) (((unsigned)(x) & 0x7) << 0)
+#define S_028BE0_MSAA_NUM_SAMPLES(x) (((unsigned)(x) & 0x07) << 0)
#define G_028BE0_MSAA_NUM_SAMPLES(x) (((x) >> 0) & 0x07)
#define C_028BE0_MSAA_NUM_SAMPLES 0xFFFFFFF8
#define S_028BE0_AA_MASK_CENTROID_DTMN(x) (((unsigned)(x) & 0x1) << 4)
#define G_028BE0_AA_MASK_CENTROID_DTMN(x) (((x) >> 4) & 0x1)
#define C_028BE0_AA_MASK_CENTROID_DTMN 0xFFFFFFEF
-#define S_028BE0_MAX_SAMPLE_DIST(x) (((unsigned)(x) & 0xf) << 13)
+#define S_028BE0_MAX_SAMPLE_DIST(x) (((unsigned)(x) & 0x0F) << 13)
#define G_028BE0_MAX_SAMPLE_DIST(x) (((x) >> 13) & 0x0F)
#define C_028BE0_MAX_SAMPLE_DIST 0xFFFE1FFF
-#define S_028BE0_MSAA_EXPOSED_SAMPLES(x) (((unsigned)(x) & 0x7) << 20)
+#define S_028BE0_MSAA_EXPOSED_SAMPLES(x) (((unsigned)(x) & 0x07) << 20)
#define G_028BE0_MSAA_EXPOSED_SAMPLES(x) (((x) >> 20) & 0x07)
#define C_028BE0_MSAA_EXPOSED_SAMPLES 0xFF8FFFFF
-#define S_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((unsigned)(x) & 0x3) << 24)
+#define S_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((unsigned)(x) & 0x03) << 24)
#define G_028BE0_DETAIL_TO_EXPOSED_MODE(x) (((x) >> 24) & 0x03)
#define C_028BE0_DETAIL_TO_EXPOSED_MODE 0xFCFFFFFF
#define R_028BE4_PA_SU_VTX_CNTL 0x028BE4
@@ -9016,8 +9059,10 @@
/* SI async DMA Packet types */
#define SI_DMA_PACKET_WRITE 0x2
#define SI_DMA_PACKET_COPY 0x3
-#define SI_DMA_COPY_MAX_SIZE 0xfffe0
-#define SI_DMA_COPY_MAX_SIZE_DW 0xffff8
+#define SI_DMA_COPY_MAX_BYTE_ALIGNED_SIZE 0xfffe0
+/* The documentation says 0xffff8 is the maximum size in dwords, which is
+ * 0x3fffe0 in bytes. */
+#define SI_DMA_COPY_MAX_DWORD_ALIGNED_SIZE 0x3fffe0
#define SI_DMA_COPY_DWORD_ALIGNED 0x00
#define SI_DMA_COPY_BYTE_ALIGNED 0x40
#define SI_DMA_COPY_TILED 0x8
@@ -9053,5 +9098,18 @@
#define CIK_SDMA_PACKET_SRBM_WRITE 0xe
#define CIK_SDMA_COPY_MAX_SIZE 0x3fffe0
+enum amd_cmp_class_flags {
+ S_NAN = 1 << 0, // Signaling NaN
+ Q_NAN = 1 << 1, // Quiet NaN
+ N_INFINITY = 1 << 2, // Negative infinity
+ N_NORMAL = 1 << 3, // Negative normal
+ N_SUBNORMAL = 1 << 4, // Negative subnormal
+ N_ZERO = 1 << 5, // Negative zero
+ P_ZERO = 1 << 6, // Positive zero
+ P_SUBNORMAL = 1 << 7, // Positive subnormal
+ P_NORMAL = 1 << 8, // Positive normal
+ P_INFINITY = 1 << 9 // Positive infinity
+};
+
#endif /* _SID_H */
diff --git a/lib/mesa/src/amd/common/sid_tables.h b/lib/mesa/src/amd/common/sid_tables.h
new file mode 100644
index 000000000..77f1841bf
--- /dev/null
+++ b/lib/mesa/src/amd/common/sid_tables.h
@@ -0,0 +1,8490 @@
+/* This file is autogenerated by sid_tables.py from sid.h. Do not edit directly. */
+
+/*
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+#ifndef SID_TABLES_H
+#define SID_TABLES_H
+
+struct si_field {
+ unsigned name_offset;
+ unsigned mask;
+ unsigned num_values;
+ unsigned values_offset; /* offset into sid_strings_offsets */
+};
+
+struct si_reg {
+ unsigned name_offset;
+ unsigned offset;
+ unsigned num_fields;
+ unsigned fields_offset;
+};
+
+struct si_packet3 {
+ unsigned name_offset;
+ unsigned op;
+};
+
+static const struct si_packet3 packet3_table[] = {
+ {0, PKT3_NOP},
+ {4, PKT3_SET_BASE},
+ {13, PKT3_CLEAR_STATE},
+ {25, PKT3_INDEX_BUFFER_SIZE},
+ {43, PKT3_DISPATCH_DIRECT},
+ {59, PKT3_DISPATCH_INDIRECT},
+ {77, PKT3_OCCLUSION_QUERY},
+ {93, PKT3_SET_PREDICATION},
+ {109, PKT3_COND_EXEC},
+ {119, PKT3_PRED_EXEC},
+ {129, PKT3_DRAW_INDIRECT},
+ {143, PKT3_DRAW_INDEX_INDIRECT},
+ {163, PKT3_INDEX_BASE},
+ {174, PKT3_DRAW_INDEX_2},
+ {187, PKT3_CONTEXT_CONTROL},
+ {203, PKT3_INDEX_TYPE},
+ {214, PKT3_DRAW_INDIRECT_MULTI},
+ {234, PKT3_DRAW_INDEX_AUTO},
+ {250, PKT3_DRAW_INDEX_IMMD},
+ {266, PKT3_NUM_INSTANCES},
+ {280, PKT3_DRAW_INDEX_MULTI_AUTO},
+ {302, PKT3_INDIRECT_BUFFER_SI},
+ {321, PKT3_INDIRECT_BUFFER_CONST},
+ {343, PKT3_STRMOUT_BUFFER_UPDATE},
+ {365, PKT3_DRAW_INDEX_OFFSET_2},
+ {385, PKT3_WRITE_DATA},
+ {396, PKT3_DRAW_INDEX_INDIRECT_MULTI},
+ {422, PKT3_MEM_SEMAPHORE},
+ {436, PKT3_MPEG_INDEX},
+ {447, PKT3_WAIT_REG_MEM},
+ {460, PKT3_MEM_WRITE},
+ {470, PKT3_INDIRECT_BUFFER_CIK},
+ {490, PKT3_COPY_DATA},
+ {500, PKT3_PFP_SYNC_ME},
+ {512, PKT3_SURFACE_SYNC},
+ {525, PKT3_ME_INITIALIZE},
+ {539, PKT3_COND_WRITE},
+ {550, PKT3_EVENT_WRITE},
+ {562, PKT3_EVENT_WRITE_EOP},
+ {578, PKT3_RELEASE_MEM},
+ {590, PKT3_ONE_REG_WRITE},
+ {604, PKT3_ACQUIRE_MEM},
+ {616, PKT3_SET_CONFIG_REG},
+ {631, PKT3_SET_CONTEXT_REG},
+ {647, PKT3_SET_SH_REG},
+ {658, PKT3_SET_SH_REG_OFFSET},
+ {676, PKT3_SET_UCONFIG_REG},
+ {692, PKT3_LOAD_CONST_RAM},
+ {707, PKT3_WRITE_CONST_RAM},
+ {723, PKT3_DUMP_CONST_RAM},
+ {738, PKT3_INCREMENT_CE_COUNTER},
+ {759, PKT3_INCREMENT_DE_COUNTER},
+ {780, PKT3_WAIT_ON_CE_COUNTER},
+ {799, PKT3_IT_OPCODE_C},
+ {811, PKT3_CP_DMA},
+ {818, PKT3_DMA_DATA},
+};
+
+static const struct si_field sid_fields_table[] = {
+ /* 0 */
+ {827, S_2C3_COUNT_INDIRECT_ENABLE(~0u)},
+ {849, S_2C3_DRAW_INDEX_ENABLE(~0u)},
+ /* 2 */
+ {877, S_370_ENGINE_SEL(~0u), 4, 0},
+ {888, S_370_WR_CONFIRM(~0u)},
+ {899, S_370_WR_ONE_ADDR(~0u)},
+ {972, S_370_DST_SEL(~0u), 6, 4},
+ /* 6 */
+ {980, S_3F2_IB_SIZE(~0u)},
+ {988, S_3F2_CHAIN(~0u)},
+ {994, S_3F2_VALID(~0u)},
+ /* 9 */
+ {1000, S_410_SRC_ADDR_LO(~0u)},
+ /* 10 */
+ {1012, S_411_CP_SYNC(~0u)},
+ {1044, S_411_SRC_SEL(~0u), 4, 10},
+ {1052, S_411_ENGINE(~0u), 2, 0},
+ {1091, S_411_DSL_SEL(~0u), 4, 14},
+ {1099, S_411_SRC_ADDR_HI(~0u)},
+ /* 15 */
+ {1111, S_412_DST_ADDR_LO(~0u)},
+ /* 16 */
+ {1123, S_413_DST_ADDR_HI(~0u)},
+ /* 17 */
+ {1135, S_414_BYTE_COUNT_GFX6(~0u)},
+ {1151, S_414_BYTE_COUNT_GFX9(~0u)},
+ {1167, S_414_DISABLE_WR_CONFIRM_GFX6(~0u)},
+ {1220, S_414_SRC_SWAP(~0u), 4, 18},
+ {1229, S_414_DST_SWAP(~0u), 4, 18},
+ {1245, S_414_SAS(~0u), 2, 22},
+ {1249, S_414_DAS(~0u), 2, 22},
+ {1276, S_414_SAIC(~0u), 2, 24},
+ {1281, S_414_DAIC(~0u), 2, 24},
+ {1286, S_414_RAW_WAIT(~0u)},
+ {1295, S_414_DISABLE_WR_CONFIRM_GFX9(~0u)},
+ /* 28 */
+ {1012, S_500_CP_SYNC(~0u)},
+ {1044, S_500_SRC_SEL(~0u), 4, 10},
+ {1091, S_500_DSL_SEL(~0u), 4, 14},
+ {1052, S_500_ENGINE(~0u), 2, 0},
+ /* 32 */
+ {1319, S_000E4C_SDMA_RQ_PENDING(~0u)},
+ {1335, S_000E4C_TST_RQ_PENDING(~0u)},
+ {1350, S_000E4C_SDMA1_RQ_PENDING(~0u)},
+ {1367, S_000E4C_VCE0_RQ_PENDING(~0u)},
+ {1383, S_000E4C_VP8_BUSY(~0u)},
+ {1392, S_000E4C_SDMA_BUSY(~0u)},
+ {1402, S_000E4C_SDMA1_BUSY(~0u)},
+ {1413, S_000E4C_VCE0_BUSY(~0u)},
+ {1423, S_000E4C_XDMA_BUSY(~0u)},
+ {1433, S_000E4C_CHUB_BUSY(~0u)},
+ {1443, S_000E4C_SDMA2_BUSY(~0u)},
+ {1454, S_000E4C_SDMA3_BUSY(~0u)},
+ {1465, S_000E4C_SAMSCP_BUSY(~0u)},
+ {1477, S_000E4C_ISP_BUSY(~0u)},
+ {1486, S_000E4C_VCE1_BUSY(~0u)},
+ {1496, S_000E4C_ODE_BUSY(~0u)},
+ {1505, S_000E4C_SDMA2_RQ_PENDING(~0u)},
+ {1522, S_000E4C_SDMA3_RQ_PENDING(~0u)},
+ {1539, S_000E4C_SAMSCP_RQ_PENDING(~0u)},
+ {1557, S_000E4C_ISP_RQ_PENDING(~0u)},
+ {1572, S_000E4C_VCE1_RQ_PENDING(~0u)},
+ /* 53 */
+ {1588, S_000E50_UVD_RQ_PENDING(~0u)},
+ {1603, S_000E50_SAMMSP_RQ_PENDING(~0u)},
+ {1621, S_000E50_ACP_RQ_PENDING(~0u)},
+ {1636, S_000E50_SMU_RQ_PENDING(~0u)},
+ {1651, S_000E50_GRBM_RQ_PENDING(~0u)},
+ {1667, S_000E50_HI_RQ_PENDING(~0u)},
+ {1681, S_000E50_VMC_BUSY(~0u)},
+ {1690, S_000E50_MCB_BUSY(~0u)},
+ {1699, S_000E50_MCB_NON_DISPLAY_BUSY(~0u)},
+ {1720, S_000E50_MCC_BUSY(~0u)},
+ {1729, S_000E50_MCD_BUSY(~0u)},
+ {1738, S_000E50_VMC1_BUSY(~0u)},
+ {1748, S_000E50_SEM_BUSY(~0u)},
+ {1757, S_000E50_ACP_BUSY(~0u)},
+ {1766, S_000E50_IH_BUSY(~0u)},
+ {1774, S_000E50_UVD_BUSY(~0u)},
+ {1783, S_000E50_SAMMSP_BUSY(~0u)},
+ {1795, S_000E50_GCATCL2_BUSY(~0u)},
+ {1808, S_000E50_OSATCL2_BUSY(~0u)},
+ {1821, S_000E50_BIF_BUSY(~0u)},
+ /* 73 */
+ {1830, S_000E54_MCC0_BUSY(~0u)},
+ {1840, S_000E54_MCC1_BUSY(~0u)},
+ {1850, S_000E54_MCC2_BUSY(~0u)},
+ {1860, S_000E54_MCC3_BUSY(~0u)},
+ {1870, S_000E54_MCC4_BUSY(~0u)},
+ {1880, S_000E54_MCC5_BUSY(~0u)},
+ {1890, S_000E54_MCC6_BUSY(~0u)},
+ {1900, S_000E54_MCC7_BUSY(~0u)},
+ {1910, S_000E54_MCD0_BUSY(~0u)},
+ {1920, S_000E54_MCD1_BUSY(~0u)},
+ {1930, S_000E54_MCD2_BUSY(~0u)},
+ {1940, S_000E54_MCD3_BUSY(~0u)},
+ {1950, S_000E54_MCD4_BUSY(~0u)},
+ {1960, S_000E54_MCD5_BUSY(~0u)},
+ {1970, S_000E54_MCD6_BUSY(~0u)},
+ {1980, S_000E54_MCD7_BUSY(~0u)},
+ /* 89 */
+ {1990, S_00D034_IDLE(~0u)},
+ {1995, S_00D034_REG_IDLE(~0u)},
+ {2004, S_00D034_RB_EMPTY(~0u)},
+ {2013, S_00D034_RB_FULL(~0u)},
+ {2021, S_00D034_RB_CMD_IDLE(~0u)},
+ {2033, S_00D034_RB_CMD_FULL(~0u)},
+ {2045, S_00D034_IB_CMD_IDLE(~0u)},
+ {2057, S_00D034_IB_CMD_FULL(~0u)},
+ {2069, S_00D034_BLOCK_IDLE(~0u)},
+ {2080, S_00D034_INSIDE_IB(~0u)},
+ {2090, S_00D034_EX_IDLE(~0u)},
+ {2098, S_00D034_EX_IDLE_POLL_TIMER_EXPIRE(~0u)},
+ {2124, S_00D034_PACKET_READY(~0u)},
+ {2137, S_00D034_MC_WR_IDLE(~0u)},
+ {2148, S_00D034_SRBM_IDLE(~0u)},
+ {2158, S_00D034_CONTEXT_EMPTY(~0u)},
+ {2172, S_00D034_DELTA_RPTR_FULL(~0u)},
+ {2188, S_00D034_RB_MC_RREQ_IDLE(~0u)},
+ {2204, S_00D034_IB_MC_RREQ_IDLE(~0u)},
+ {2220, S_00D034_MC_RD_IDLE(~0u)},
+ {2231, S_00D034_DELTA_RPTR_EMPTY(~0u)},
+ {2248, S_00D034_MC_RD_RET_STALL(~0u)},
+ {2264, S_00D034_MC_RD_NO_POLL_IDLE(~0u)},
+ {2283, S_00D034_PREV_CMD_IDLE(~0u)},
+ {2297, S_00D034_SEM_IDLE(~0u)},
+ {2306, S_00D034_SEM_REQ_STALL(~0u)},
+ {2320, S_00D034_SEM_RESP_STATE(~0u)},
+ {2335, S_00D034_INT_IDLE(~0u)},
+ {2344, S_00D034_INT_REQ_STALL(~0u)},
+ /* 118 */
+ {2358, S_008008_ME0PIPE1_CMDFIFO_AVAIL(~0u)},
+ {2381, S_008008_ME0PIPE1_CF_RQ_PENDING(~0u)},
+ {2404, S_008008_ME0PIPE1_PF_RQ_PENDING(~0u)},
+ {2427, S_008008_ME1PIPE0_RQ_PENDING(~0u)},
+ {2447, S_008008_ME1PIPE1_RQ_PENDING(~0u)},
+ {2467, S_008008_ME1PIPE2_RQ_PENDING(~0u)},
+ {2487, S_008008_ME1PIPE3_RQ_PENDING(~0u)},
+ {2507, S_008008_ME2PIPE0_RQ_PENDING(~0u)},
+ {2527, S_008008_ME2PIPE1_RQ_PENDING(~0u)},
+ {2547, S_008008_ME2PIPE2_RQ_PENDING(~0u)},
+ {2567, S_008008_ME2PIPE3_RQ_PENDING(~0u)},
+ {2587, S_008008_RLC_RQ_PENDING(~0u)},
+ {2602, S_008008_RLC_BUSY(~0u)},
+ {2611, S_008008_TC_BUSY(~0u)},
+ {2619, S_008008_TCC_CC_RESIDENT(~0u)},
+ {2635, S_008008_CPF_BUSY(~0u)},
+ {2644, S_008008_CPC_BUSY(~0u)},
+ {2653, S_008008_CPG_BUSY(~0u)},
+ {2662, S_008008_UTCL2_BUSY(~0u)},
+ {2673, S_008008_EA_BUSY(~0u)},
+ {2681, S_008008_RMI_BUSY(~0u)},
+ {2690, S_008008_UTCL2_RQ_PENDING(~0u)},
+ {2707, S_008008_CPF_RQ_PENDING(~0u)},
+ {2722, S_008008_EA_LINK_BUSY(~0u)},
+ {2735, S_008008_CPAXI_BUSY(~0u)},
+ /* 143 */
+ {2746, S_008010_ME0PIPE0_CMDFIFO_AVAIL(~0u)},
+ {2769, S_008010_SRBM_RQ_PENDING(~0u)},
+ {2785, S_008010_ME0PIPE0_CF_RQ_PENDING(~0u)},
+ {2808, S_008010_ME0PIPE0_PF_RQ_PENDING(~0u)},
+ {2831, S_008010_GDS_DMA_RQ_PENDING(~0u)},
+ {2850, S_008010_DB_CLEAN(~0u)},
+ {2859, S_008010_CB_CLEAN(~0u)},
+ {2868, S_008010_TA_BUSY(~0u)},
+ {2876, S_008010_GDS_BUSY(~0u)},
+ {2885, S_008010_WD_BUSY_NO_DMA(~0u)},
+ {2900, S_008010_VGT_BUSY(~0u)},
+ {2909, S_008010_IA_BUSY_NO_DMA(~0u)},
+ {2924, S_008010_IA_BUSY(~0u)},
+ {2932, S_008010_SX_BUSY(~0u)},
+ {2940, S_008010_WD_BUSY(~0u)},
+ {2948, S_008010_SPI_BUSY(~0u)},
+ {2957, S_008010_BCI_BUSY(~0u)},
+ {2966, S_008010_SC_BUSY(~0u)},
+ {2974, S_008010_PA_BUSY(~0u)},
+ {2982, S_008010_DB_BUSY(~0u)},
+ {2990, S_008010_CP_COHERENCY_BUSY(~0u)},
+ {1469, S_008010_CP_BUSY(~0u)},
+ {1691, S_008010_CB_BUSY(~0u)},
+ {3008, S_008010_GUI_ACTIVE(~0u)},
+ {3019, S_008010_RSMU_RQ_PENDING(~0u)},
+ /* 168 */
+ {3035, S_0084FC_OFFSET_UPDATE_DONE(~0u)},
+ /* 169 */
+ {3054, S_0085F0_DEST_BASE_0_ENA(~0u)},
+ {3070, S_0085F0_DEST_BASE_1_ENA(~0u)},
+ {3086, S_0085F0_CB0_DEST_BASE_ENA(~0u)},
+ {3104, S_0085F0_CB1_DEST_BASE_ENA(~0u)},
+ {3122, S_0085F0_CB2_DEST_BASE_ENA(~0u)},
+ {3140, S_0085F0_CB3_DEST_BASE_ENA(~0u)},
+ {3158, S_0085F0_CB4_DEST_BASE_ENA(~0u)},
+ {3176, S_0085F0_CB5_DEST_BASE_ENA(~0u)},
+ {3194, S_0085F0_CB6_DEST_BASE_ENA(~0u)},
+ {3212, S_0085F0_CB7_DEST_BASE_ENA(~0u)},
+ {3230, S_0085F0_DB_DEST_BASE_ENA(~0u)},
+ {3247, S_0085F0_DEST_BASE_2_ENA(~0u)},
+ {3263, S_0085F0_DEST_BASE_3_ENA(~0u)},
+ {3279, S_0085F0_TCL1_ACTION_ENA(~0u)},
+ {3295, S_0085F0_TC_ACTION_ENA(~0u)},
+ {3309, S_0085F0_CB_ACTION_ENA(~0u)},
+ {3323, S_0085F0_DB_ACTION_ENA(~0u)},
+ {3337, S_0085F0_SH_KCACHE_ACTION_ENA(~0u)},
+ {3358, S_0085F0_SH_ICACHE_ACTION_ENA(~0u)},
+ /* 188 */
+ {2850, S_008014_DB_CLEAN(~0u)},
+ {2859, S_008014_CB_CLEAN(~0u)},
+ {2957, S_008014_BCI_BUSY(~0u)},
+ {2900, S_008014_VGT_BUSY(~0u)},
+ {2974, S_008014_PA_BUSY(~0u)},
+ {2868, S_008014_TA_BUSY(~0u)},
+ {2932, S_008014_SX_BUSY(~0u)},
+ {2948, S_008014_SPI_BUSY(~0u)},
+ {2966, S_008014_SC_BUSY(~0u)},
+ {2982, S_008014_DB_BUSY(~0u)},
+ {1691, S_008014_CB_BUSY(~0u)},
+ {2681, S_008014_RMI_BUSY(~0u)},
+ /* 200 */
+ {2850, S_008018_DB_CLEAN(~0u)},
+ {2859, S_008018_CB_CLEAN(~0u)},
+ {2957, S_008018_BCI_BUSY(~0u)},
+ {2900, S_008018_VGT_BUSY(~0u)},
+ {2974, S_008018_PA_BUSY(~0u)},
+ {2868, S_008018_TA_BUSY(~0u)},
+ {2932, S_008018_SX_BUSY(~0u)},
+ {2948, S_008018_SPI_BUSY(~0u)},
+ {2966, S_008018_SC_BUSY(~0u)},
+ {2982, S_008018_DB_BUSY(~0u)},
+ {1691, S_008018_CB_BUSY(~0u)},
+ {2681, S_008018_RMI_BUSY(~0u)},
+ /* 212 */
+ {2850, S_008038_DB_CLEAN(~0u)},
+ {2859, S_008038_CB_CLEAN(~0u)},
+ {2957, S_008038_BCI_BUSY(~0u)},
+ {2900, S_008038_VGT_BUSY(~0u)},
+ {2974, S_008038_PA_BUSY(~0u)},
+ {2868, S_008038_TA_BUSY(~0u)},
+ {2932, S_008038_SX_BUSY(~0u)},
+ {2948, S_008038_SPI_BUSY(~0u)},
+ {2966, S_008038_SC_BUSY(~0u)},
+ {2982, S_008038_DB_BUSY(~0u)},
+ {1691, S_008038_CB_BUSY(~0u)},
+ {2681, S_008038_RMI_BUSY(~0u)},
+ /* 224 */
+ {2850, S_00803C_DB_CLEAN(~0u)},
+ {2859, S_00803C_CB_CLEAN(~0u)},
+ {2957, S_00803C_BCI_BUSY(~0u)},
+ {2900, S_00803C_VGT_BUSY(~0u)},
+ {2974, S_00803C_PA_BUSY(~0u)},
+ {2868, S_00803C_TA_BUSY(~0u)},
+ {2932, S_00803C_SX_BUSY(~0u)},
+ {2948, S_00803C_SPI_BUSY(~0u)},
+ {2966, S_00803C_SC_BUSY(~0u)},
+ {2982, S_00803C_DB_BUSY(~0u)},
+ {1691, S_00803C_CB_BUSY(~0u)},
+ {2681, S_00803C_RMI_BUSY(~0u)},
+ /* 236 */
+ {3035, S_0300FC_OFFSET_UPDATE_DONE(~0u)},
+ /* 237 */
+ {3379, S_0301E4_COHER_BASE_HI_256B(~0u)},
+ /* 238 */
+ {3398, S_0301EC_START_DELAY_COUNT(~0u)},
+ /* 239 */
+ {3054, S_0301F0_DEST_BASE_0_ENA(~0u)},
+ {3070, S_0301F0_DEST_BASE_1_ENA(~0u)},
+ {3416, S_0301F0_TC_SD_ACTION_ENA(~0u)},
+ {3433, S_0301F0_TC_NC_ACTION_ENA(~0u)},
+ {3086, S_0301F0_CB0_DEST_BASE_ENA(~0u)},
+ {3104, S_0301F0_CB1_DEST_BASE_ENA(~0u)},
+ {3122, S_0301F0_CB2_DEST_BASE_ENA(~0u)},
+ {3140, S_0301F0_CB3_DEST_BASE_ENA(~0u)},
+ {3158, S_0301F0_CB4_DEST_BASE_ENA(~0u)},
+ {3176, S_0301F0_CB5_DEST_BASE_ENA(~0u)},
+ {3194, S_0301F0_CB6_DEST_BASE_ENA(~0u)},
+ {3212, S_0301F0_CB7_DEST_BASE_ENA(~0u)},
+ {3230, S_0301F0_DB_DEST_BASE_ENA(~0u)},
+ {3450, S_0301F0_TCL1_VOL_ACTION_ENA(~0u)},
+ {3470, S_0301F0_TC_VOL_ACTION_ENA(~0u)},
+ {3488, S_0301F0_TC_WB_ACTION_ENA(~0u)},
+ {3247, S_0301F0_DEST_BASE_2_ENA(~0u)},
+ {3263, S_0301F0_DEST_BASE_3_ENA(~0u)},
+ {3279, S_0301F0_TCL1_ACTION_ENA(~0u)},
+ {3295, S_0301F0_TC_ACTION_ENA(~0u)},
+ {3309, S_0301F0_CB_ACTION_ENA(~0u)},
+ {3323, S_0301F0_DB_ACTION_ENA(~0u)},
+ {3337, S_0301F0_SH_KCACHE_ACTION_ENA(~0u)},
+ {3505, S_0301F0_SH_KCACHE_VOL_ACTION_ENA(~0u)},
+ {3358, S_0301F0_SH_ICACHE_ACTION_ENA(~0u)},
+ {3530, S_0301F0_SH_KCACHE_WB_ACTION_ENA(~0u)},
+ {3554, S_0301F0_SH_SD_ACTION_ENA(~0u)},
+ {3571, S_0301F0_TC_WC_ACTION_ENA(~0u)},
+ {3588, S_0301F0_TC_INV_METADATA_ACTION_ENA(~0u)},
+ /* 268 */
+ {3615, S_0301FC_MATCHING_GFX_CNTX(~0u)},
+ {3633, S_0301FC_MEID(~0u)},
+ {3638, S_0301FC_PHASE1_STATUS(~0u)},
+ {3645, S_0301FC_STATUS(~0u)},
+ /* 272 */
+ {3652, S_008210_MEC1_BUSY(~0u)},
+ {3662, S_008210_MEC2_BUSY(~0u)},
+ {3672, S_008210_DC0_BUSY(~0u)},
+ {3681, S_008210_DC1_BUSY(~0u)},
+ {3690, S_008210_RCIU1_BUSY(~0u)},
+ {3701, S_008210_RCIU2_BUSY(~0u)},
+ {3712, S_008210_ROQ1_BUSY(~0u)},
+ {3722, S_008210_ROQ2_BUSY(~0u)},
+ {3732, S_008210_TCIU_BUSY(~0u)},
+ {3742, S_008210_SCRATCH_RAM_BUSY(~0u)},
+ {3759, S_008210_QU_BUSY(~0u)},
+ {3767, S_008210_ATCL2IU_BUSY(~0u)},
+ {3780, S_008210_CPG_CPC_BUSY(~0u)},
+ {3793, S_008210_CPF_CPC_BUSY(~0u)},
+ {2644, S_008210_CPC_BUSY(~0u)},
+ {3806, S_008210_UTCL2IU_BUSY(~0u)},
+ {3819, S_008210_SAVE_RESTORE_BUSY(~0u)},
+ /* 289 */
+ {3837, S_008214_MEC1_LOAD_BUSY(~0u)},
+ {3852, S_008214_MEC1_SEMAPOHRE_BUSY(~0u)},
+ {3872, S_008214_MEC1_MUTEX_BUSY(~0u)},
+ {3888, S_008214_MEC1_MESSAGE_BUSY(~0u)},
+ {3906, S_008214_MEC1_EOP_QUEUE_BUSY(~0u)},
+ {3926, S_008214_MEC1_IQ_QUEUE_BUSY(~0u)},
+ {3945, S_008214_MEC1_IB_QUEUE_BUSY(~0u)},
+ {3964, S_008214_MEC1_TC_BUSY(~0u)},
+ {3977, S_008214_MEC1_DMA_BUSY(~0u)},
+ {3991, S_008214_MEC1_PARTIAL_FLUSH_BUSY(~0u)},
+ {4015, S_008214_MEC1_PIPE0_BUSY(~0u)},
+ {4031, S_008214_MEC1_PIPE1_BUSY(~0u)},
+ {4047, S_008214_MEC1_PIPE2_BUSY(~0u)},
+ {4063, S_008214_MEC1_PIPE3_BUSY(~0u)},
+ {4079, S_008214_MEC2_LOAD_BUSY(~0u)},
+ {4094, S_008214_MEC2_SEMAPOHRE_BUSY(~0u)},
+ {4114, S_008214_MEC2_MUTEX_BUSY(~0u)},
+ {4130, S_008214_MEC2_MESSAGE_BUSY(~0u)},
+ {4148, S_008214_MEC2_EOP_QUEUE_BUSY(~0u)},
+ {4168, S_008214_MEC2_IQ_QUEUE_BUSY(~0u)},
+ {4187, S_008214_MEC2_IB_QUEUE_BUSY(~0u)},
+ {4206, S_008214_MEC2_TC_BUSY(~0u)},
+ {4219, S_008214_MEC2_DMA_BUSY(~0u)},
+ {4233, S_008214_MEC2_PARTIAL_FLUSH_BUSY(~0u)},
+ {4257, S_008214_MEC2_PIPE0_BUSY(~0u)},
+ {4273, S_008214_MEC2_PIPE1_BUSY(~0u)},
+ {4289, S_008214_MEC2_PIPE2_BUSY(~0u)},
+ {4305, S_008214_MEC2_PIPE3_BUSY(~0u)},
+ /* 317 */
+ {4321, S_008218_RCIU_TX_FREE_STALL(~0u)},
+ {4340, S_008218_RCIU_PRIV_VIOLATION(~0u)},
+ {4360, S_008218_TCIU_TX_FREE_STALL(~0u)},
+ {4379, S_008218_MEC1_DECODING_PACKET(~0u)},
+ {4400, S_008218_MEC1_WAIT_ON_RCIU(~0u)},
+ {4418, S_008218_MEC1_WAIT_ON_RCIU_READ(~0u)},
+ {4441, S_008218_MEC1_WAIT_ON_ROQ_DATA(~0u)},
+ {4463, S_008218_MEC2_DECODING_PACKET(~0u)},
+ {4484, S_008218_MEC2_WAIT_ON_RCIU(~0u)},
+ {4502, S_008218_MEC2_WAIT_ON_RCIU_READ(~0u)},
+ {4525, S_008218_MEC2_WAIT_ON_ROQ_DATA(~0u)},
+ {4547, S_008218_ATCL2IU_WAITING_ON_FREE(~0u)},
+ {4571, S_008218_ATCL2IU_WAITING_ON_TAGS(~0u)},
+ {4595, S_008218_ATCL1_WAITING_ON_TRANS(~0u)},
+ {4618, S_008218_UTCL2IU_WAITING_ON_FREE(~0u)},
+ {4642, S_008218_UTCL2IU_WAITING_ON_TAGS(~0u)},
+ {4666, S_008218_UTCL1_WAITING_ON_TRANS(~0u)},
+ /* 334 */
+ {4689, S_00821C_POST_WPTR_GFX_BUSY(~0u)},
+ {4708, S_00821C_CSF_BUSY(~0u)},
+ {4717, S_00821C_ROQ_ALIGN_BUSY(~0u)},
+ {4732, S_00821C_ROQ_RING_BUSY(~0u)},
+ {4746, S_00821C_ROQ_INDIRECT1_BUSY(~0u)},
+ {4765, S_00821C_ROQ_INDIRECT2_BUSY(~0u)},
+ {4784, S_00821C_ROQ_STATE_BUSY(~0u)},
+ {4799, S_00821C_ROQ_CE_RING_BUSY(~0u)},
+ {4816, S_00821C_ROQ_CE_INDIRECT1_BUSY(~0u)},
+ {4838, S_00821C_ROQ_CE_INDIRECT2_BUSY(~0u)},
+ {4860, S_00821C_SEMAPHORE_BUSY(~0u)},
+ {4875, S_00821C_INTERRUPT_BUSY(~0u)},
+ {3732, S_00821C_TCIU_BUSY(~0u)},
+ {4890, S_00821C_HQD_BUSY(~0u)},
+ {4899, S_00821C_PRT_BUSY(~0u)},
+ {3767, S_00821C_ATCL2IU_BUSY(~0u)},
+ {4908, S_00821C_CPF_GFX_BUSY(~0u)},
+ {4921, S_00821C_CPF_CMP_BUSY(~0u)},
+ {4934, S_00821C_GRBM_CPF_STAT_BUSY(~0u)},
+ {4953, S_00821C_CPC_CPF_BUSY(~0u)},
+ {2635, S_00821C_CPF_BUSY(~0u)},
+ {3806, S_00821C_UTCL2IU_BUSY(~0u)},
+ /* 356 */
+ {4966, S_008220_REG_BUS_FIFO_BUSY(~0u)},
+ {4984, S_008220_CSF_RING_BUSY(~0u)},
+ {4998, S_008220_CSF_INDIRECT1_BUSY(~0u)},
+ {5017, S_008220_CSF_INDIRECT2_BUSY(~0u)},
+ {5036, S_008220_CSF_STATE_BUSY(~0u)},
+ {5051, S_008220_CSF_CE_INDR1_BUSY(~0u)},
+ {5069, S_008220_CSF_CE_INDR2_BUSY(~0u)},
+ {5087, S_008220_CSF_ARBITER_BUSY(~0u)},
+ {5104, S_008220_CSF_INPUT_BUSY(~0u)},
+ {5119, S_008220_OUTSTANDING_READ_TAGS(~0u)},
+ {5141, S_008220_HPD_PROCESSING_EOP_BUSY(~0u)},
+ {5165, S_008220_HQD_DISPATCH_BUSY(~0u)},
+ {5183, S_008220_HQD_IQ_TIMER_BUSY(~0u)},
+ {5201, S_008220_HQD_DMA_OFFLOAD_BUSY(~0u)},
+ {5222, S_008220_HQD_WAIT_SEMAPHORE_BUSY(~0u)},
+ {5246, S_008220_HQD_SIGNAL_SEMAPHORE_BUSY(~0u)},
+ {5272, S_008220_HQD_MESSAGE_BUSY(~0u)},
+ {5289, S_008220_HQD_PQ_FETCHER_BUSY(~0u)},
+ {5309, S_008220_HQD_IB_FETCHER_BUSY(~0u)},
+ {5329, S_008220_HQD_IQ_FETCHER_BUSY(~0u)},
+ {5349, S_008220_HQD_EOP_FETCHER_BUSY(~0u)},
+ {5370, S_008220_HQD_CONSUMED_RPTR_BUSY(~0u)},
+ {5393, S_008220_HQD_FETCHER_ARB_BUSY(~0u)},
+ {5414, S_008220_HQD_ROQ_ALIGN_BUSY(~0u)},
+ {5433, S_008220_HQD_ROQ_EOP_BUSY(~0u)},
+ {5450, S_008220_HQD_ROQ_IQ_BUSY(~0u)},
+ {5466, S_008220_HQD_ROQ_PQ_BUSY(~0u)},
+ {5482, S_008220_HQD_ROQ_IB_BUSY(~0u)},
+ {5498, S_008220_HQD_WPTR_POLL_BUSY(~0u)},
+ {5517, S_008220_HQD_PQ_BUSY(~0u)},
+ {5529, S_008220_HQD_IB_BUSY(~0u)},
+ /* 387 */
+ {5541, S_008224_RING_FETCHING_DATA(~0u)},
+ {5560, S_008224_INDR1_FETCHING_DATA(~0u)},
+ {5580, S_008224_INDR2_FETCHING_DATA(~0u)},
+ {5600, S_008224_STATE_FETCHING_DATA(~0u)},
+ {5620, S_008224_TCIU_WAITING_ON_FREE(~0u)},
+ {5641, S_008224_TCIU_WAITING_ON_TAGS(~0u)},
+ {4547, S_008224_ATCL2IU_WAITING_ON_FREE(~0u)},
+ {4571, S_008224_ATCL2IU_WAITING_ON_TAGS(~0u)},
+ {4595, S_008224_ATCL1_WAITING_ON_TRANS(~0u)},
+ {4618, S_008224_UTCL2IU_WAITING_ON_FREE(~0u)},
+ {4642, S_008224_UTCL2IU_WAITING_ON_TAGS(~0u)},
+ {5662, S_008224_GFX_UTCL1_WAITING_ON_TRANS(~0u)},
+ {5689, S_008224_CMP_UTCL1_WAITING_ON_TRANS(~0u)},
+ {5716, S_008224_RCIU_WAITING_ON_FREE(~0u)},
+ /* 401 */
+ {5737, S_030230_COHER_SIZE_HI_256B(~0u)},
+ /* 402 */
+ {5756, S_0088B0_PRIM_COUNT(~0u)},
+ /* 403 */
+ {5767, S_0088C4_VS_NO_EXTRA_BUFFER(~0u)},
+ {5786, S_0088C4_STREAMOUT_FULL_FLUSH(~0u)},
+ {5807, S_0088C4_ES_LIMIT(~0u)},
+ /* 406 */
+ {5816, S_0088D4_VERT_REUSE(~0u)},
+ /* 407 */
+ {6343, S_008958_PRIM_TYPE(~0u), 29, 26},
+ /* 408 */
+ {203, S_00895C_INDEX_TYPE(~0u), 2, 55},
+ /* 409 */
+ {38, S_008988_SIZE(~0u)},
+ /* 410 */
+ {6395, S_0089B0_OFFCHIP_BUFFERING(~0u)},
+ /* 411 */
+ {6413, S_008A14_CLIP_VTX_REORDER_ENA(~0u)},
+ {6434, S_008A14_NUM_CLIP_SEQ(~0u)},
+ {6447, S_008A14_CLIPPED_PRIM_SEQ_STALL(~0u)},
+ {6470, S_008A14_VE_NAN_PROC_DISABLE(~0u)},
+ /* 415 */
+ {6490, S_008A60_LINE_STIPPLE_VALUE(~0u)},
+ /* 416 */
+ {6509, S_008B10_CURRENT_PTR(~0u)},
+ {6521, S_008B10_CURRENT_COUNT(~0u)},
+ /* 418 */
+ {6535, S_008670_CE_TO_CSF_NOT_RDY_TO_RCV(~0u)},
+ {6560, S_008670_CE_TO_RAM_INIT_FETCHER_NOT_RDY_TO_RCV(~0u)},
+ {6598, S_008670_CE_WAITING_ON_DATA_FROM_RAM_INIT_FETCHER(~0u)},
+ {6639, S_008670_CE_TO_RAM_INIT_NOT_RDY(~0u)},
+ {6662, S_008670_CE_TO_RAM_DUMP_NOT_RDY(~0u)},
+ {6685, S_008670_CE_TO_RAM_WRITE_NOT_RDY(~0u)},
+ {6709, S_008670_CE_TO_INC_FIFO_NOT_RDY_TO_RCV(~0u)},
+ {6739, S_008670_CE_TO_WR_FIFO_NOT_RDY_TO_RCV(~0u)},
+ {6768, S_008670_CE_WAITING_ON_BUFFER_DATA(~0u)},
+ {6794, S_008670_CE_WAITING_ON_CE_BUFFER_FLAG(~0u)},
+ {6823, S_008670_CE_WAITING_ON_DE_COUNTER(~0u)},
+ {6848, S_008670_CE_WAITING_ON_DE_COUNTER_UNDERFLOW(~0u)},
+ {5620, S_008670_TCIU_WAITING_ON_FREE(~0u)},
+ {5641, S_008670_TCIU_WAITING_ON_TAGS(~0u)},
+ {6883, S_008670_CE_STALLED_ON_TC_WR_CONFIRM(~0u)},
+ {6911, S_008670_CE_STALLED_ON_ATOMIC_RTN_DATA(~0u)},
+ {4547, S_008670_ATCL2IU_WAITING_ON_FREE(~0u)},
+ {4571, S_008670_ATCL2IU_WAITING_ON_TAGS(~0u)},
+ {4595, S_008670_ATCL1_WAITING_ON_TRANS(~0u)},
+ {4618, S_008670_UTCL2IU_WAITING_ON_FREE(~0u)},
+ {4642, S_008670_UTCL2IU_WAITING_ON_TAGS(~0u)},
+ {4666, S_008670_UTCL1_WAITING_ON_TRANS(~0u)},
+ /* 440 */
+ {6941, S_008674_RBIU_TO_DMA_NOT_RDY_TO_RCV(~0u)},
+ {6968, S_008674_RBIU_TO_SEM_NOT_RDY_TO_RCV(~0u)},
+ {6995, S_008674_RBIU_TO_MEMWR_NOT_RDY_TO_RCV(~0u)},
+ {7024, S_008674_ME_HAS_ACTIVE_CE_BUFFER_FLAG(~0u)},
+ {7053, S_008674_ME_HAS_ACTIVE_DE_BUFFER_FLAG(~0u)},
+ {7082, S_008674_ME_STALLED_ON_TC_WR_CONFIRM(~0u)},
+ {7110, S_008674_ME_STALLED_ON_ATOMIC_RTN_DATA(~0u)},
+ {7140, S_008674_ME_WAITING_ON_TC_READ_DATA(~0u)},
+ {7167, S_008674_ME_WAITING_ON_REG_READ_DATA(~0u)},
+ {7195, S_008674_RCIU_WAITING_ON_GDS_FREE(~0u)},
+ {7220, S_008674_RCIU_WAITING_ON_GRBM_FREE(~0u)},
+ {7246, S_008674_RCIU_WAITING_ON_VGT_FREE(~0u)},
+ {7271, S_008674_RCIU_STALLED_ON_ME_READ(~0u)},
+ {7295, S_008674_RCIU_STALLED_ON_DMA_READ(~0u)},
+ {7320, S_008674_RCIU_STALLED_ON_APPEND_READ(~0u)},
+ {7348, S_008674_RCIU_HALTED_BY_REG_VIOLATION(~0u)},
+ /* 456 */
+ {7377, S_008678_PFP_TO_CSF_NOT_RDY_TO_RCV(~0u)},
+ {7403, S_008678_PFP_TO_MEQ_NOT_RDY_TO_RCV(~0u)},
+ {7429, S_008678_PFP_TO_RCIU_NOT_RDY_TO_RCV(~0u)},
+ {7456, S_008678_PFP_TO_VGT_WRITES_PENDING(~0u)},
+ {7482, S_008678_PFP_RCIU_READ_PENDING(~0u)},
+ {7504, S_008678_PFP_WAITING_ON_BUFFER_DATA(~0u)},
+ {7531, S_008678_ME_WAIT_ON_CE_COUNTER(~0u)},
+ {7553, S_008678_ME_WAIT_ON_AVAIL_BUFFER(~0u)},
+ {7577, S_008678_GFX_CNTX_NOT_AVAIL_TO_ME(~0u)},
+ {7602, S_008678_ME_RCIU_NOT_RDY_TO_RCV(~0u)},
+ {7625, S_008678_ME_TO_CONST_NOT_RDY_TO_RCV(~0u)},
+ {7652, S_008678_ME_WAITING_DATA_FROM_PFP(~0u)},
+ {7677, S_008678_ME_WAITING_ON_PARTIAL_FLUSH(~0u)},
+ {7705, S_008678_MEQ_TO_ME_NOT_RDY_TO_RCV(~0u)},
+ {7730, S_008678_STQ_TO_ME_NOT_RDY_TO_RCV(~0u)},
+ {7755, S_008678_ME_WAITING_DATA_FROM_STQ(~0u)},
+ {7780, S_008678_PFP_STALLED_ON_TC_WR_CONFIRM(~0u)},
+ {7809, S_008678_PFP_STALLED_ON_ATOMIC_RTN_DATA(~0u)},
+ {7840, S_008678_EOPD_FIFO_NEEDS_SC_EOP_DONE(~0u)},
+ {7868, S_008678_EOPD_FIFO_NEEDS_WR_CONFIRM(~0u)},
+ {7895, S_008678_STRMO_WR_OF_PRIM_DATA_PENDING(~0u)},
+ {7925, S_008678_PIPE_STATS_WR_DATA_PENDING(~0u)},
+ {7952, S_008678_APPEND_RDY_WAIT_ON_CS_DONE(~0u)},
+ {7979, S_008678_APPEND_RDY_WAIT_ON_PS_DONE(~0u)},
+ {8006, S_008678_APPEND_WAIT_ON_WR_CONFIRM(~0u)},
+ {8032, S_008678_APPEND_ACTIVE_PARTITION(~0u)},
+ {8056, S_008678_APPEND_WAITING_TO_SEND_MEMWRITE(~0u)},
+ {8088, S_008678_SURF_SYNC_NEEDS_IDLE_CNTXS(~0u)},
+ {8115, S_008678_SURF_SYNC_NEEDS_ALL_CLEAN(~0u)},
+ /* 485 */
+ {4732, S_008680_ROQ_RING_BUSY(~0u)},
+ {4746, S_008680_ROQ_INDIRECT1_BUSY(~0u)},
+ {4765, S_008680_ROQ_INDIRECT2_BUSY(~0u)},
+ {4784, S_008680_ROQ_STATE_BUSY(~0u)},
+ {8141, S_008680_DC_BUSY(~0u)},
+ {3767, S_008680_ATCL2IU_BUSY(~0u)},
+ {8149, S_008680_PFP_BUSY(~0u)},
+ {8158, S_008680_MEQ_BUSY(~0u)},
+ {8167, S_008680_ME_BUSY(~0u)},
+ {8175, S_008680_QUERY_BUSY(~0u)},
+ {4860, S_008680_SEMAPHORE_BUSY(~0u)},
+ {4875, S_008680_INTERRUPT_BUSY(~0u)},
+ {8186, S_008680_SURFACE_SYNC_BUSY(~0u)},
+ {1393, S_008680_DMA_BUSY(~0u)},
+ {8204, S_008680_RCIU_BUSY(~0u)},
+ {3742, S_008680_SCRATCH_RAM_BUSY(~0u)},
+ {8214, S_008680_CPC_CPG_BUSY(~0u)},
+ {8227, S_008680_CE_BUSY(~0u)},
+ {3732, S_008680_TCIU_BUSY(~0u)},
+ {4799, S_008680_ROQ_CE_RING_BUSY(~0u)},
+ {4816, S_008680_ROQ_CE_INDIRECT1_BUSY(~0u)},
+ {4838, S_008680_ROQ_CE_INDIRECT2_BUSY(~0u)},
+ {1469, S_008680_CP_BUSY(~0u)},
+ {3806, S_008680_UTCL2IU_BUSY(~0u)},
+ /* 509 */
+ {8235, S_030800_INSTANCE_INDEX(~0u)},
+ {8250, S_030800_SH_INDEX(~0u)},
+ {8259, S_030800_SE_INDEX(~0u)},
+ {8268, S_030800_SH_BROADCAST_WRITES(~0u)},
+ {8288, S_030800_INSTANCE_BROADCAST_WRITES(~0u)},
+ {8314, S_030800_SE_BROADCAST_WRITES(~0u)},
+ /* 515 */
+ {6343, S_030908_PRIM_TYPE(~0u), 29, 57},
+ /* 516 */
+ {203, S_03090C_INDEX_TYPE(~0u), 2, 55},
+ {8334, S_03090C_PRIMGEN_EN(~0u)},
+ /* 518 */
+ {38, S_030938_SIZE(~0u)},
+ /* 519 */
+ {6395, S_03093C_OFFCHIP_BUFFERING(~0u)},
+ {8393, S_03093C_OFFCHIP_GRANULARITY(~0u), 4, 86},
+ /* 521 */
+ {6490, S_030A00_LINE_STIPPLE_VALUE(~0u)},
+ /* 522 */
+ {6509, S_030A04_CURRENT_PTR(~0u)},
+ {6521, S_030A04_CURRENT_COUNT(~0u)},
+ /* 524 */
+ {445, S_030A10_X(~0u)},
+ {91, S_030A10_Y(~0u)},
+ /* 526 */
+ {445, S_030A14_X(~0u)},
+ {91, S_030A14_Y(~0u)},
+ /* 528 */
+ {445, S_030A18_X(~0u)},
+ {91, S_030A18_Y(~0u)},
+ /* 530 */
+ {445, S_030A2C_X(~0u)},
+ {91, S_030A2C_Y(~0u)},
+ /* 532 */
+ {8413, S_008BF0_ENABLE_PA_SC_OUT_OF_ORDER(~0u)},
+ {8439, S_008BF0_DISABLE_SC_DB_TILE_FIX(~0u)},
+ {8462, S_008BF0_DISABLE_AA_MASK_FULL_FIX(~0u)},
+ {8487, S_008BF0_ENABLE_1XMSAA_SAMPLE_LOCATIONS(~0u)},
+ {8518, S_008BF0_ENABLE_1XMSAA_SAMPLE_LOC_CENTROID(~0u)},
+ {8552, S_008BF0_DISABLE_SCISSOR_FIX(~0u)},
+ {8572, S_008BF0_DISABLE_PW_BUBBLE_COLLAPSE(~0u)},
+ {8599, S_008BF0_SEND_UNLIT_STILES_TO_PACKER(~0u)},
+ {8627, S_008BF0_DISABLE_DUALGRAD_PERF_OPTIMIZATION(~0u)},
+ /* 541 */
+ {8662, S_008C08_INST_INVALIDATE(~0u)},
+ {8678, S_008C08_DATA_INVALIDATE(~0u)},
+ /* 543 */
+ {8662, S_030D20_INST_INVALIDATE(~0u)},
+ {8678, S_030D20_DATA_INVALIDATE(~0u)},
+ {8694, S_030D20_INVALIDATE_VOLATILE(~0u)},
+ {8714, S_030D20_TARGET_INST(~0u)},
+ {8726, S_030D20_TARGET_DATA(~0u)},
+ {8667, S_030D20_INVALIDATE(~0u)},
+ {8738, S_030D20_WRITEBACK(~0u)},
+ {8748, S_030D20_VOL(~0u)},
+ {8752, S_030D20_COMPLETE(~0u)},
+ /* 552 */
+ {8761, S_008C0C_RET(~0u)},
+ {8765, S_008C0C_RUI(~0u)},
+ {8769, S_008C0C_RNG(~0u)},
+ /* 555 */
+ {8342, S_008DFC_EN(~0u)},
+ {8832, S_008DFC_TGT(~0u), 33, 90},
+ {8836, S_008DFC_COMPR(~0u)},
+ {3049, S_008DFC_DONE(~0u)},
+ {8842, S_008DFC_VM(~0u)},
+ {8862, S_008DFC_ENCODING(~0u), 63, 123},
+ /* 561 */
+ {8871, S_030E04_ADDRESS(~0u)},
+ /* 562 */
+ {8879, S_030F04_COUNT_HI(~0u)},
+ /* 563 */
+ {8888, S_008F04_BASE_ADDRESS_HI(~0u)},
+ {8904, S_008F04_STRIDE(~0u)},
+ {8911, S_008F04_CACHE_SWIZZLE(~0u)},
+ {8925, S_008F04_SWIZZLE_ENABLE(~0u)},
+ /* 567 */
+ {8879, S_030F0C_COUNT_HI(~0u)},
+ /* 568 */
+ {9030, S_008F0C_DST_SEL_X(~0u), 8, 186},
+ {9040, S_008F0C_DST_SEL_Y(~0u), 8, 186},
+ {9050, S_008F0C_DST_SEL_Z(~0u), 8, 186},
+ {9060, S_008F0C_DST_SEL_W(~0u), 8, 186},
+ {9244, S_008F0C_NUM_FORMAT(~0u), 8, 194},
+ {9636, S_008F0C_DATA_FORMAT(~0u), 16, 202},
+ {9648, S_008F0C_ELEMENT_SIZE(~0u)},
+ {9661, S_008F0C_INDEX_STRIDE(~0u)},
+ {9674, S_008F0C_ADD_TID_ENABLE(~0u)},
+ {9689, S_008F0C_ATC(~0u)},
+ {9693, S_008F0C_HASH_ENABLE(~0u)},
+ {9705, S_008F0C_HEAP(~0u)},
+ {9710, S_008F0C_MTYPE(~0u)},
+ {209, S_008F0C_TYPE(~0u), 4, 218},
+ {9785, S_008F0C_USER_VM_ENABLE(~0u)},
+ {9800, S_008F0C_USER_VM_MODE(~0u)},
+ {9813, S_008F0C_NV(~0u)},
+ /* 585 */
+ {8879, S_030F14_COUNT_HI(~0u)},
+ /* 586 */
+ {8888, S_008F14_BASE_ADDRESS_HI(~0u)},
+ {9816, S_008F14_MIN_LOD(~0u)},
+ {11449, S_008F14_DATA_FORMAT_GFX6(~0u), 64, 222},
+ {11833, S_008F14_NUM_FORMAT_GFX6(~0u), 16, 286},
+ {9710, S_008F14_MTYPE(~0u)},
+ {12421, S_008F14_DATA_FORMAT_GFX9(~0u), 64, 302},
+ {12514, S_008F14_NUM_FORMAT_GFX9(~0u), 11, 366},
+ {12749, S_008F14_NUM_FORMAT_FMASK(~0u), 13, 377},
+ {12999, S_008F14_NUM_FORMAT_ASTC_2D(~0u), 14, 390},
+ {13198, S_008F14_NUM_FORMAT_ASTC_3D(~0u), 10, 404},
+ {9813, S_008F14_NV(~0u)},
+ {13217, S_008F14_META_DIRECT(~0u)},
+ /* 598 */
+ {13229, S_008F18_WIDTH(~0u)},
+ {13235, S_008F18_HEIGHT(~0u)},
+ {13242, S_008F18_PERF_MOD(~0u)},
+ {13251, S_008F18_INTERLACED(~0u)},
+ /* 602 */
+ {8879, S_030F1C_COUNT_HI(~0u)},
+ /* 603 */
+ {9030, S_008F1C_DST_SEL_X(~0u), 8, 186},
+ {9040, S_008F1C_DST_SEL_Y(~0u), 8, 186},
+ {9050, S_008F1C_DST_SEL_Z(~0u), 8, 186},
+ {9060, S_008F1C_DST_SEL_W(~0u), 8, 186},
+ {13262, S_008F1C_BASE_LEVEL(~0u)},
+ {13273, S_008F1C_LAST_LEVEL(~0u)},
+ {13284, S_008F1C_TILING_INDEX(~0u)},
+ {13297, S_008F1C_POW2_PAD(~0u)},
+ {9710, S_008F1C_MTYPE(~0u)},
+ {9689, S_008F1C_ATC(~0u)},
+ {209, S_008F1C_TYPE(~0u), 16, 414},
+ {13608, S_008F1C_SW_MODE(~0u)},
+ /* 615 */
+ {13616, S_008F20_DEPTH(~0u)},
+ {13622, S_008F20_PITCH_GFX6(~0u)},
+ {13633, S_008F20_PITCH_GFX9(~0u)},
+ {13740, S_008F20_BC_SWIZZLE(~0u), 6, 430},
+ /* 619 */
+ {13751, S_008F24_BASE_ARRAY(~0u)},
+ {13762, S_008F24_LAST_ARRAY(~0u)},
+ {13773, S_008F24_ARRAY_PITCH(~0u)},
+ {13785, S_008F24_META_DATA_ADDRESS(~0u)},
+ {13803, S_008F24_META_LINEAR(~0u)},
+ {13815, S_008F24_META_PIPE_ALIGNED(~0u)},
+ {13833, S_008F24_META_RB_ALIGNED(~0u)},
+ {13849, S_008F24_MAX_MIP(~0u)},
+ /* 627 */
+ {13857, S_008F28_MIN_LOD_WARN(~0u)},
+ {13870, S_008F28_COUNTER_BANK_ID(~0u)},
+ {13886, S_008F28_LOD_HDW_CNT_EN(~0u)},
+ {13901, S_008F28_COMPRESSION_EN(~0u)},
+ {13916, S_008F28_ALPHA_IS_ON_MSB(~0u)},
+ {13932, S_008F28_COLOR_TRANSFORM(~0u)},
+ {13948, S_008F28_LOST_ALPHA_BITS(~0u)},
+ {13964, S_008F28_LOST_COLOR_BITS(~0u)},
+ /* 635 */
+ {14162, S_008F30_CLAMP_X(~0u), 8, 436},
+ {14170, S_008F30_CLAMP_Y(~0u), 8, 436},
+ {14178, S_008F30_CLAMP_Z(~0u), 8, 436},
+ {14186, S_008F30_MAX_ANISO_RATIO(~0u)},
+ {14434, S_008F30_DEPTH_COMPARE_FUNC(~0u), 8, 444},
+ {14453, S_008F30_FORCE_UNNORMALIZED(~0u)},
+ {14472, S_008F30_ANISO_THRESHOLD(~0u)},
+ {14488, S_008F30_MC_COORD_TRUNC(~0u)},
+ {14503, S_008F30_FORCE_DEGAMMA(~0u)},
+ {14517, S_008F30_ANISO_BIAS(~0u)},
+ {14528, S_008F30_TRUNC_COORD(~0u)},
+ {14540, S_008F30_DISABLE_CUBE_WRAP(~0u)},
+ {14558, S_008F30_FILTER_MODE(~0u)},
+ {14570, S_008F30_COMPAT_MODE(~0u)},
+ /* 649 */
+ {9816, S_008F34_MIN_LOD(~0u)},
+ {14582, S_008F34_MAX_LOD(~0u)},
+ {14590, S_008F34_PERF_MIP(~0u)},
+ {14599, S_008F34_PERF_Z(~0u)},
+ /* 653 */
+ {14606, S_008F38_LOD_BIAS(~0u)},
+ {14615, S_008F38_LOD_BIAS_SEC(~0u)},
+ {14677, S_008F38_XY_MAG_FILTER(~0u), 2, 452},
+ {14752, S_008F38_XY_MIN_FILTER(~0u), 4, 454},
+ {14832, S_008F38_Z_FILTER(~0u), 3, 458},
+ {14841, S_008F38_MIP_FILTER(~0u), 3, 458},
+ {14852, S_008F38_MIP_POINT_PRECLAMP(~0u)},
+ {14871, S_008F38_DISABLE_LSB_CEIL(~0u)},
+ {14888, S_008F38_FILTER_PREC_FIX(~0u)},
+ {14904, S_008F38_ANISO_OVERRIDE(~0u)},
+ {14919, S_008F38_BLEND_ZERO_PRT(~0u)},
+ /* 664 */
+ {14934, S_008F3C_BORDER_COLOR_PTR(~0u)},
+ {14951, S_008F3C_UPGRADED_DEPTH(~0u)},
+ {15093, S_008F3C_BORDER_COLOR_TYPE(~0u), 4, 461},
+ {15111, S_008F3C_SKIP_DEGAMMA(~0u)},
+ /* 668 */
+ {15124, S_0090DC_VS_LOW_THRESHOLD(~0u)},
+ {15141, S_0090DC_GS_LOW_THRESHOLD(~0u)},
+ {15158, S_0090DC_ES_LOW_THRESHOLD(~0u)},
+ {15175, S_0090DC_HS_LOW_THRESHOLD(~0u)},
+ {15192, S_0090DC_LS_LOW_THRESHOLD(~0u)},
+ /* 673 */
+ {15209, S_0090E0_PS_CU_EN(~0u)},
+ {15218, S_0090E0_VS_CU_EN(~0u)},
+ /* 675 */
+ {15227, S_0090E4_GS_CU_EN(~0u)},
+ {15236, S_0090E4_ES_CU_EN(~0u)},
+ /* 677 */
+ {15245, S_0090E8_LSHS_CU_EN(~0u)},
+ /* 678 */
+ {15256, S_0090EC_MAX_WAVE_ID(~0u)},
+ /* 679 */
+ {15256, S_0090E8_MAX_WAVE_ID(~0u)},
+ /* 680 */
+ {15273, S_0090F0_RING_ORDER_TS0(~0u), 1, 465},
+ {15288, S_0090F0_RING_ORDER_TS1(~0u)},
+ {15303, S_0090F0_RING_ORDER_TS2(~0u)},
+ /* 683 */
+ {15318, S_00C700_PIPE_ORDER_TS0(~0u)},
+ {15333, S_00C700_PIPE_ORDER_TS1(~0u)},
+ {15348, S_00C700_PIPE_ORDER_TS2(~0u)},
+ {15363, S_00C700_PIPE_ORDER_TS3(~0u)},
+ {15378, S_00C700_TS0_DUR_MULT(~0u)},
+ {15391, S_00C700_TS1_DUR_MULT(~0u)},
+ {15404, S_00C700_TS2_DUR_MULT(~0u)},
+ {15417, S_00C700_TS3_DUR_MULT(~0u)},
+ /* 691 */
+ {15430, S_0090F4_TS0_DURATION(~0u)},
+ {15443, S_0090F4_TS1_DURATION(~0u)},
+ /* 693 */
+ {15456, S_0090F8_TS2_DURATION(~0u)},
+ /* 694 */
+ {38, S_008F40_SIZE(~0u)},
+ /* 695 */
+ {669, S_008F44_OFFSET(~0u)},
+ /* 696 */
+ {8879, S_030FFC_COUNT_HI(~0u)},
+ /* 697 */
+ {15469, S_009100_GPR_WRITE_PRIORITY(~0u)},
+ {15488, S_009100_EXP_PRIORITY_ORDER(~0u)},
+ {15507, S_009100_ENABLE_SQG_TOP_EVENTS(~0u)},
+ {15529, S_009100_ENABLE_SQG_BOP_EVENTS(~0u)},
+ {15551, S_009100_RSRC_MGMT_RESET(~0u)},
+ /* 702 */
+ {15820, S_00913C_VTX_DONE_DELAY(~0u), 16, 466},
+ {15835, S_00913C_INTERP_ONE_PRIM_PER_ROW(~0u)},
+ {15859, S_00913C_PC_LIMIT_ENABLE(~0u)},
+ {15875, S_00913C_PC_LIMIT_STRICT(~0u)},
+ {15891, S_00913C_PC_LIMIT_SIZE(~0u)},
+ /* 707 */
+ {15905, S_00936C_TYPE_A(~0u)},
+ {15912, S_00936C_VGPR_A(~0u)},
+ {15919, S_00936C_SGPR_A(~0u)},
+ {15926, S_00936C_LDS_A(~0u)},
+ {15932, S_00936C_WAVES_A(~0u)},
+ {15940, S_00936C_EN_A(~0u)},
+ {15945, S_00936C_TYPE_B(~0u)},
+ {15952, S_00936C_VGPR_B(~0u)},
+ {15959, S_00936C_SGPR_B(~0u)},
+ {15966, S_00936C_LDS_B(~0u)},
+ {15972, S_00936C_WAVES_B(~0u)},
+ {15980, S_00936C_EN_B(~0u)},
+ /* 719 */
+ {15985, S_009858_MSAA1_X(~0u)},
+ {15993, S_009858_MSAA1_Y(~0u)},
+ {16001, S_009858_MSAA2_X(~0u)},
+ {16009, S_009858_MSAA2_Y(~0u)},
+ {16017, S_009858_MSAA4_X(~0u)},
+ {16025, S_009858_MSAA4_Y(~0u)},
+ {16033, S_009858_MSAA8_X(~0u)},
+ {16041, S_009858_MSAA8_Y(~0u)},
+ {16049, S_009858_MSAA16_X(~0u)},
+ {16058, S_009858_MSAA16_Y(~0u)},
+ /* 729 */
+ {16067, S_0098F8_NUM_PIPES(~0u)},
+ {16077, S_0098F8_PIPE_INTERLEAVE_SIZE_GFX6(~0u)},
+ {16103, S_0098F8_BANK_INTERLEAVE_SIZE(~0u)},
+ {16124, S_0098F8_NUM_SHADER_ENGINES_GFX6(~0u)},
+ {16148, S_0098F8_SHADER_ENGINE_TILE_SIZE(~0u)},
+ {16172, S_0098F8_NUM_GPUS_GFX6(~0u)},
+ {16186, S_0098F8_MULTI_GPU_TILE_SIZE(~0u)},
+ {16206, S_0098F8_ROW_SIZE(~0u)},
+ {16215, S_0098F8_NUM_LOWER_PIPES(~0u)},
+ {16231, S_0098F8_PIPE_INTERLEAVE_SIZE_GFX9(~0u)},
+ {16257, S_0098F8_MAX_COMPRESSED_FRAGS(~0u)},
+ {16278, S_0098F8_NUM_BANKS(~0u)},
+ {16288, S_0098F8_NUM_SHADER_ENGINES_GFX9(~0u)},
+ {16312, S_0098F8_NUM_GPUS_GFX9(~0u)},
+ {16326, S_0098F8_NUM_RB_PER_SE(~0u)},
+ {16340, S_0098F8_SE_ENABLE(~0u)},
+ /* 745 */
+ {16467, S_009910_MICRO_TILE_MODE(~0u), 4, 482},
+ {16712, S_009910_ARRAY_MODE(~0u), 16, 486},
+ {17074, S_009910_PIPE_CONFIG(~0u), 15, 502},
+ {17264, S_009910_TILE_SPLIT(~0u), 7, 517},
+ {17367, S_009910_BANK_WIDTH(~0u), 4, 524},
+ {17474, S_009910_BANK_HEIGHT(~0u), 4, 528},
+ {17586, S_009910_MACRO_TILE_ASPECT(~0u), 4, 532},
+ {16278, S_009910_NUM_BANKS(~0u), 4, 536},
+ {17704, S_009910_MICRO_TILE_MODE_NEW(~0u), 4, 540},
+ {17724, S_009910_SAMPLE_SPLIT(~0u)},
+ /* 755 */
+ {17367, S_009990_BANK_WIDTH(~0u)},
+ {17474, S_009990_BANK_HEIGHT(~0u)},
+ {17586, S_009990_MACRO_TILE_ASPECT(~0u)},
+ {16278, S_009990_NUM_BANKS(~0u)},
+ /* 759 */
+ {17737, S_00B004_MEM_BASE(~0u)},
+ /* 760 */
+ {17737, S_00B00C_MEM_BASE(~0u)},
+ /* 761 */
+ {15212, S_00B01C_CU_EN(~0u)},
+ {17746, S_00B01C_WAVE_LIMIT(~0u)},
+ {17757, S_00B01C_LOCK_LOW_THRESHOLD(~0u)},
+ {17776, S_00B01C_SIMD_DISABLE(~0u)},
+ /* 765 */
+ {17737, S_00B024_MEM_BASE(~0u)},
+ /* 766 */
+ {17789, S_00B028_VGPRS(~0u)},
+ {17795, S_00B028_SGPRS(~0u)},
+ {15479, S_00B028_PRIORITY(~0u)},
+ {17844, S_00B028_FLOAT_MODE(~0u), 241, 544},
+ {17855, S_00B028_PRIV(~0u)},
+ {17860, S_00B028_DX10_CLAMP(~0u)},
+ {17871, S_00B028_DEBUG_MODE(~0u)},
+ {17882, S_00B028_IEEE_MODE(~0u)},
+ {17892, S_00B028_CU_GROUP_DISABLE(~0u)},
+ {17909, S_00B028_CACHE_CTL(~0u)},
+ {17919, S_00B028_CDBG_USER(~0u)},
+ {17929, S_00B028_FP16_OVFL(~0u)},
+ /* 778 */
+ {17939, S_00B02C_SCRATCH_EN(~0u)},
+ {17950, S_00B02C_USER_SGPR(~0u)},
+ {17960, S_00B02C_TRAP_PRESENT(~0u)},
+ {17973, S_00B02C_WAVE_CNT_EN(~0u)},
+ {17985, S_00B02C_EXTRA_LDS_SIZE(~0u)},
+ {18000, S_00B02C_EXCP_EN_SI(~0u)},
+ {18011, S_00B02C_EXCP_EN(~0u)},
+ {18019, S_00B02C_LOAD_COLLISION_WAVEID(~0u)},
+ {18041, S_00B02C_LOAD_INTRAWAVE_COLLISION(~0u)},
+ {18066, S_00B02C_SKIP_USGPR0(~0u)},
+ {18078, S_00B02C_USER_SGPR_MSB(~0u)},
+ /* 789 */
+ {17737, S_00B104_MEM_BASE(~0u)},
+ /* 790 */
+ {17737, S_00B10C_MEM_BASE(~0u)},
+ /* 791 */
+ {15212, S_00B118_CU_EN(~0u)},
+ {17746, S_00B118_WAVE_LIMIT(~0u)},
+ {17757, S_00B118_LOCK_LOW_THRESHOLD(~0u)},
+ {17776, S_00B118_SIMD_DISABLE(~0u)},
+ /* 795 */
+ {5810, S_00B11C_LIMIT(~0u)},
+ /* 796 */
+ {17737, S_00B124_MEM_BASE(~0u)},
+ /* 797 */
+ {17789, S_00B128_VGPRS(~0u)},
+ {17795, S_00B128_SGPRS(~0u)},
+ {15479, S_00B128_PRIORITY(~0u)},
+ {17844, S_00B128_FLOAT_MODE(~0u)},
+ {17855, S_00B128_PRIV(~0u)},
+ {17860, S_00B128_DX10_CLAMP(~0u)},
+ {17871, S_00B128_DEBUG_MODE(~0u)},
+ {17882, S_00B128_IEEE_MODE(~0u)},
+ {18092, S_00B128_VGPR_COMP_CNT(~0u)},
+ {18106, S_00B128_CU_GROUP_ENABLE(~0u)},
+ {17909, S_00B128_CACHE_CTL(~0u)},
+ {17919, S_00B128_CDBG_USER(~0u)},
+ {17929, S_00B128_FP16_OVFL(~0u)},
+ /* 810 */
+ {17939, S_00B12C_SCRATCH_EN(~0u)},
+ {17950, S_00B12C_USER_SGPR(~0u)},
+ {17960, S_00B12C_TRAP_PRESENT(~0u)},
+ {18122, S_00B12C_OC_LDS_EN(~0u)},
+ {18132, S_00B12C_SO_BASE0_EN(~0u)},
+ {18144, S_00B12C_SO_BASE1_EN(~0u)},
+ {18156, S_00B12C_SO_BASE2_EN(~0u)},
+ {18168, S_00B12C_SO_BASE3_EN(~0u)},
+ {18180, S_00B12C_SO_EN(~0u)},
+ {18000, S_00B12C_EXCP_EN_SI(~0u)},
+ {18011, S_00B12C_EXCP_EN(~0u)},
+ {18186, S_00B12C_DISPATCH_DRAW_EN(~0u)},
+ {18203, S_00B12C_PC_BASE_EN(~0u)},
+ {18066, S_00B12C_SKIP_USGPR0(~0u)},
+ {18078, S_00B12C_USER_SGPR_MSB(~0u)},
+ /* 825 */
+ {17737, S_00B204_MEM_BASE(~0u)},
+ /* 826 */
+ {17737, S_00B20C_MEM_BASE(~0u)},
+ /* 827 */
+ {15212, S_00B21C_CU_EN(~0u)},
+ {17746, S_00B21C_WAVE_LIMIT(~0u)},
+ {17757, S_00B21C_LOCK_LOW_THRESHOLD(~0u)},
+ {18214, S_00B21C_GROUP_FIFO_DEPTH(~0u)},
+ {17776, S_00B21C_SIMD_DISABLE(~0u)},
+ /* 832 */
+ {17737, S_00B224_MEM_BASE(~0u)},
+ /* 833 */
+ {17789, S_00B228_VGPRS(~0u)},
+ {17795, S_00B228_SGPRS(~0u)},
+ {15479, S_00B228_PRIORITY(~0u)},
+ {17844, S_00B228_FLOAT_MODE(~0u)},
+ {17855, S_00B228_PRIV(~0u)},
+ {17860, S_00B228_DX10_CLAMP(~0u)},
+ {17871, S_00B228_DEBUG_MODE(~0u)},
+ {17882, S_00B228_IEEE_MODE(~0u)},
+ {18106, S_00B228_CU_GROUP_ENABLE(~0u)},
+ {17909, S_00B228_CACHE_CTL(~0u)},
+ {17919, S_00B228_CDBG_USER(~0u)},
+ {18231, S_00B228_GS_VGPR_COMP_CNT(~0u)},
+ {17929, S_00B228_FP16_OVFL(~0u)},
+ /* 846 */
+ {17939, S_00B22C_SCRATCH_EN(~0u)},
+ {17950, S_00B22C_USER_SGPR(~0u)},
+ {17960, S_00B22C_TRAP_PRESENT(~0u)},
+ {18000, S_00B22C_EXCP_EN_SI(~0u)},
+ {18011, S_00B22C_EXCP_EN(~0u)},
+ {18248, S_00B22C_ES_VGPR_COMP_CNT(~0u)},
+ {18122, S_00B22C_OC_LDS_EN(~0u)},
+ {17991, S_00B22C_LDS_SIZE(~0u)},
+ {18066, S_00B22C_SKIP_USGPR0(~0u)},
+ {18078, S_00B22C_USER_SGPR_MSB(~0u)},
+ /* 856 */
+ {17737, S_00B304_MEM_BASE(~0u)},
+ /* 857 */
+ {17737, S_00B30C_MEM_BASE(~0u)},
+ /* 858 */
+ {15212, S_00B31C_CU_EN(~0u)},
+ {17746, S_00B31C_WAVE_LIMIT(~0u)},
+ {17757, S_00B31C_LOCK_LOW_THRESHOLD(~0u)},
+ {18214, S_00B31C_GROUP_FIFO_DEPTH(~0u)},
+ /* 862 */
+ {17737, S_00B324_MEM_BASE(~0u)},
+ /* 863 */
+ {17789, S_00B328_VGPRS(~0u)},
+ {17795, S_00B328_SGPRS(~0u)},
+ {15479, S_00B328_PRIORITY(~0u)},
+ {17844, S_00B328_FLOAT_MODE(~0u)},
+ {17855, S_00B328_PRIV(~0u)},
+ {17860, S_00B328_DX10_CLAMP(~0u)},
+ {17871, S_00B328_DEBUG_MODE(~0u)},
+ {17882, S_00B328_IEEE_MODE(~0u)},
+ {18092, S_00B328_VGPR_COMP_CNT(~0u)},
+ {18106, S_00B328_CU_GROUP_ENABLE(~0u)},
+ {17909, S_00B328_CACHE_CTL(~0u)},
+ {17919, S_00B328_CDBG_USER(~0u)},
+ /* 875 */
+ {17939, S_00B32C_SCRATCH_EN(~0u)},
+ {17950, S_00B32C_USER_SGPR(~0u)},
+ {17960, S_00B32C_TRAP_PRESENT(~0u)},
+ {18122, S_00B32C_OC_LDS_EN(~0u)},
+ {18000, S_00B32C_EXCP_EN_SI(~0u)},
+ {18011, S_00B32C_EXCP_EN(~0u)},
+ {17991, S_00B32C_LDS_SIZE(~0u)},
+ /* 882 */
+ {17737, S_00B404_MEM_BASE(~0u)},
+ /* 883 */
+ {17737, S_00B40C_MEM_BASE(~0u)},
+ /* 884 */
+ {17746, S_00B41C_WAVE_LIMIT(~0u)},
+ {17757, S_00B41C_LOCK_LOW_THRESHOLD(~0u)},
+ {18214, S_00B41C_GROUP_FIFO_DEPTH(~0u)},
+ {17776, S_00B41C_SIMD_DISABLE(~0u)},
+ {15212, S_00B41C_CU_EN(~0u)},
+ /* 889 */
+ {17737, S_00B424_MEM_BASE(~0u)},
+ /* 890 */
+ {17789, S_00B428_VGPRS(~0u)},
+ {17795, S_00B428_SGPRS(~0u)},
+ {15479, S_00B428_PRIORITY(~0u)},
+ {17844, S_00B428_FLOAT_MODE(~0u)},
+ {17855, S_00B428_PRIV(~0u)},
+ {17860, S_00B428_DX10_CLAMP(~0u)},
+ {17871, S_00B428_DEBUG_MODE(~0u)},
+ {17882, S_00B428_IEEE_MODE(~0u)},
+ {17909, S_00B428_CACHE_CTL(~0u)},
+ {17919, S_00B428_CDBG_USER(~0u)},
+ {18265, S_00B428_LS_VGPR_COMP_CNT(~0u)},
+ {17929, S_00B428_FP16_OVFL(~0u)},
+ /* 902 */
+ {17939, S_00B42C_SCRATCH_EN(~0u)},
+ {17950, S_00B42C_USER_SGPR(~0u)},
+ {17960, S_00B42C_TRAP_PRESENT(~0u)},
+ {18122, S_00B42C_OC_LDS_EN(~0u)},
+ {18282, S_00B42C_TG_SIZE_EN(~0u)},
+ {18000, S_00B42C_EXCP_EN_SI(~0u)},
+ {18293, S_00B42C_EXCP_EN_CIK_VI(~0u)},
+ {18011, S_00B42C_EXCP_EN(~0u)},
+ {17991, S_00B42C_LDS_SIZE(~0u)},
+ {18066, S_00B42C_SKIP_USGPR0(~0u)},
+ {18078, S_00B42C_USER_SGPR_MSB(~0u)},
+ /* 913 */
+ {17737, S_00B504_MEM_BASE(~0u)},
+ /* 914 */
+ {17737, S_00B50C_MEM_BASE(~0u)},
+ /* 915 */
+ {15212, S_00B51C_CU_EN(~0u)},
+ {17746, S_00B51C_WAVE_LIMIT(~0u)},
+ {17757, S_00B51C_LOCK_LOW_THRESHOLD(~0u)},
+ {18214, S_00B51C_GROUP_FIFO_DEPTH(~0u)},
+ /* 919 */
+ {17737, S_00B524_MEM_BASE(~0u)},
+ /* 920 */
+ {17789, S_00B528_VGPRS(~0u)},
+ {17795, S_00B528_SGPRS(~0u)},
+ {15479, S_00B528_PRIORITY(~0u)},
+ {17844, S_00B528_FLOAT_MODE(~0u)},
+ {17855, S_00B528_PRIV(~0u)},
+ {17860, S_00B528_DX10_CLAMP(~0u)},
+ {17871, S_00B528_DEBUG_MODE(~0u)},
+ {17882, S_00B528_IEEE_MODE(~0u)},
+ {18092, S_00B528_VGPR_COMP_CNT(~0u)},
+ {17909, S_00B528_CACHE_CTL(~0u)},
+ {17919, S_00B528_CDBG_USER(~0u)},
+ /* 931 */
+ {17939, S_00B52C_SCRATCH_EN(~0u)},
+ {17950, S_00B52C_USER_SGPR(~0u)},
+ {17960, S_00B52C_TRAP_PRESENT(~0u)},
+ {17991, S_00B52C_LDS_SIZE(~0u)},
+ {18000, S_00B52C_EXCP_EN_SI(~0u)},
+ {18011, S_00B52C_EXCP_EN(~0u)},
+ /* 937 */
+ {18308, S_00B800_COMPUTE_SHADER_EN(~0u)},
+ {18326, S_00B800_PARTIAL_TG_EN(~0u)},
+ {18340, S_00B800_FORCE_START_AT_000(~0u)},
+ {18359, S_00B800_ORDERED_APPEND_ENBL(~0u)},
+ {18379, S_00B800_ORDERED_APPEND_MODE(~0u)},
+ {18399, S_00B800_USE_THREAD_DIMENSIONS(~0u)},
+ {18421, S_00B800_ORDER_MODE(~0u)},
+ {18432, S_00B800_DISPATCH_CACHE_CNTL(~0u)},
+ {18452, S_00B800_SCALAR_L1_INV_VOL(~0u)},
+ {18470, S_00B800_VECTOR_L1_INV_VOL(~0u)},
+ {18488, S_00B800_DATA_ATC(~0u)},
+ {18497, S_00B800_RESTORE(~0u)},
+ {953, S_00B800_RESERVED(~0u)},
+ /* 950 */
+ {18505, S_00B81C_NUM_THREAD_FULL(~0u)},
+ {18521, S_00B81C_NUM_THREAD_PARTIAL(~0u)},
+ /* 952 */
+ {18505, S_00B820_NUM_THREAD_FULL(~0u)},
+ {18521, S_00B820_NUM_THREAD_PARTIAL(~0u)},
+ /* 954 */
+ {18505, S_00B824_NUM_THREAD_FULL(~0u)},
+ {18521, S_00B824_NUM_THREAD_PARTIAL(~0u)},
+ /* 956 */
+ {15256, S_00B82C_MAX_WAVE_ID(~0u)},
+ /* 957 */
+ {18540, S_00B828_PIPELINESTAT_ENABLE(~0u)},
+ /* 958 */
+ {18560, S_00B82C_PERFCOUNT_ENABLE(~0u)},
+ /* 959 */
+ {391, S_00B834_DATA(~0u)},
+ {18577, S_00B834_INST_ATC(~0u)},
+ /* 961 */
+ {391, S_00B83C_DATA(~0u)},
+ /* 962 */
+ {391, S_00B844_DATA(~0u)},
+ /* 963 */
+ {17789, S_00B848_VGPRS(~0u)},
+ {17795, S_00B848_SGPRS(~0u)},
+ {15479, S_00B848_PRIORITY(~0u)},
+ {17844, S_00B848_FLOAT_MODE(~0u)},
+ {17855, S_00B848_PRIV(~0u)},
+ {17860, S_00B848_DX10_CLAMP(~0u)},
+ {17871, S_00B848_DEBUG_MODE(~0u)},
+ {17882, S_00B848_IEEE_MODE(~0u)},
+ {18586, S_00B848_BULKY(~0u)},
+ {17919, S_00B848_CDBG_USER(~0u)},
+ {17929, S_00B848_FP16_OVFL(~0u)},
+ /* 974 */
+ {17939, S_00B84C_SCRATCH_EN(~0u)},
+ {17950, S_00B84C_USER_SGPR(~0u)},
+ {17960, S_00B84C_TRAP_PRESENT(~0u)},
+ {18592, S_00B84C_TGID_X_EN(~0u)},
+ {18602, S_00B84C_TGID_Y_EN(~0u)},
+ {18612, S_00B84C_TGID_Z_EN(~0u)},
+ {18282, S_00B84C_TG_SIZE_EN(~0u)},
+ {18622, S_00B84C_TIDIG_COMP_CNT(~0u)},
+ {18637, S_00B84C_EXCP_EN_MSB(~0u)},
+ {17991, S_00B84C_LDS_SIZE(~0u)},
+ {18011, S_00B84C_EXCP_EN(~0u)},
+ {18066, S_00B84C_SKIP_USGPR0(~0u)},
+ /* 986 */
+ {391, S_00B850_DATA(~0u)},
+ /* 987 */
+ {18649, S_00B854_WAVES_PER_SH_SI(~0u)},
+ {18665, S_00B854_WAVES_PER_SH(~0u)},
+ {18678, S_00B854_TG_PER_CU(~0u)},
+ {18688, S_00B854_LOCK_THRESHOLD(~0u)},
+ {18703, S_00B854_SIMD_DEST_CNTL(~0u)},
+ {18718, S_00B854_FORCE_SIMD_DIST(~0u)},
+ {18734, S_00B854_CU_GROUP_COUNT(~0u)},
+ {17776, S_00B854_SIMD_DISABLE(~0u)},
+ /* 995 */
+ {18749, S_00B858_SH0_CU_EN(~0u)},
+ {18759, S_00B858_SH1_CU_EN(~0u)},
+ /* 997 */
+ {18749, S_00B85C_SH0_CU_EN(~0u)},
+ {18759, S_00B85C_SH1_CU_EN(~0u)},
+ /* 999 */
+ {18769, S_00B860_WAVES(~0u)},
+ {18775, S_00B860_WAVESIZE(~0u)},
+ /* 1001 */
+ {18749, S_00B864_SH0_CU_EN(~0u)},
+ {18759, S_00B864_SH1_CU_EN(~0u)},
+ /* 1003 */
+ {18749, S_00B868_SH0_CU_EN(~0u)},
+ {18759, S_00B868_SH1_CU_EN(~0u)},
+ /* 1005 */
+ {18784, S_00B87C_SEND_SEID(~0u)},
+ {16795, S_00B87C_RESERVED2(~0u)},
+ {18794, S_00B87C_RESERVED3(~0u)},
+ {18804, S_00B87C_RESERVED4(~0u)},
+ {18814, S_00B87C_WAVE_ID_BASE(~0u)},
+ /* 1010 */
+ {18827, S_00B888_PAYLOAD(~0u)},
+ {18835, S_00B888_IS_EVENT(~0u)},
+ {18844, S_00B888_IS_STATE(~0u)},
+ /* 1013 */
+ {906, S_00B890_ADDR(~0u)},
+ /* 1014 */
+ {9689, S_00B894_ATC(~0u)},
+ {9710, S_00B894_MTYPE(~0u)},
+ /* 1016 */
+ {18853, S_034404_PERFCOUNTER_HI(~0u)},
+ /* 1017 */
+ {18868, S_036004_PERF_SEL2(~0u)},
+ {18878, S_036004_PERF_SEL3(~0u)},
+ {18888, S_036004_CNTR_SEL2(~0u)},
+ {18898, S_036004_CNTR_SEL3(~0u)},
+ {18908, S_036004_CNTR_MODE3(~0u)},
+ {18919, S_036004_CNTR_MODE2(~0u)},
+ /* 1023 */
+ {18930, S_036008_PERF_SEL(~0u)},
+ {18939, S_036008_PERF_SEL1(~0u)},
+ {18949, S_036008_CNTR_MODE(~0u)},
+ {18959, S_036008_CNTR_SEL0(~0u)},
+ {18969, S_036008_CNTR_SEL1(~0u)},
+ {18979, S_036008_SPM_MODE(~0u)},
+ {18988, S_036008_CNTR_MODE1(~0u)},
+ {18999, S_036008_CNTR_MODE0(~0u)},
+ /* 1031 */
+ {18868, S_036010_PERF_SEL2(~0u)},
+ {18878, S_036010_PERF_SEL3(~0u)},
+ {18888, S_036010_CNTR_SEL2(~0u)},
+ {18898, S_036010_CNTR_SEL3(~0u)},
+ {18908, S_036010_CNTR_MODE3(~0u)},
+ {18919, S_036010_CNTR_MODE2(~0u)},
+ /* 1037 */
+ {18868, S_036018_PERF_SEL2(~0u)},
+ {18878, S_036018_PERF_SEL3(~0u)},
+ {18888, S_036018_CNTR_SEL2(~0u)},
+ {18898, S_036018_CNTR_SEL3(~0u)},
+ {18908, S_036018_CNTR_MODE3(~0u)},
+ {18919, S_036018_CNTR_MODE2(~0u)},
+ /* 1043 */
+ {18930, S_03601C_PERF_SEL(~0u)},
+ {18939, S_03601C_PERF_SEL1(~0u)},
+ {18949, S_03601C_CNTR_MODE(~0u)},
+ {18959, S_03601C_CNTR_SEL0(~0u)},
+ {18969, S_03601C_CNTR_SEL1(~0u)},
+ {18979, S_03601C_SPM_MODE(~0u)},
+ {18988, S_03601C_CNTR_MODE1(~0u)},
+ {18999, S_03601C_CNTR_MODE0(~0u)},
+ /* 1051 */
+ {19057, S_036020_PERFMON_STATE(~0u), 3, 785},
+ {19071, S_036020_SPM_PERFMON_STATE(~0u)},
+ {19089, S_036020_PERFMON_ENABLE_MODE(~0u)},
+ {19109, S_036020_PERFMON_SAMPLE_ENABLE(~0u)},
+ /* 1055 */
+ {18930, S_036024_PERF_SEL(~0u)},
+ {18939, S_036024_PERF_SEL1(~0u)},
+ {18949, S_036024_CNTR_MODE(~0u)},
+ {18959, S_036024_CNTR_SEL0(~0u)},
+ {18969, S_036024_CNTR_SEL1(~0u)},
+ {18979, S_036024_SPM_MODE(~0u)},
+ {18988, S_036024_CNTR_MODE1(~0u)},
+ {18999, S_036024_CNTR_MODE0(~0u)},
+ /* 1063 */
+ {18930, S_036100_PERF_SEL(~0u)},
+ {19131, S_036100_DB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19158, S_036100_CB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19185, S_036100_VGT_BUSY_USER_DEFINED_MASK(~0u)},
+ {19212, S_036100_TA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19238, S_036100_SX_BUSY_USER_DEFINED_MASK(~0u)},
+ {19264, S_036100_SPI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19291, S_036100_SC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19317, S_036100_PA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19343, S_036100_GRBM_BUSY_USER_DEFINED_MASK(~0u)},
+ {19371, S_036100_DB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19397, S_036100_CB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19423, S_036100_CP_BUSY_USER_DEFINED_MASK(~0u)},
+ {19449, S_036100_IA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19475, S_036100_GDS_BUSY_USER_DEFINED_MASK(~0u)},
+ {19502, S_036100_BCI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19529, S_036100_RLC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19556, S_036100_TC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19582, S_036100_WD_BUSY_USER_DEFINED_MASK(~0u)},
+ {19608, S_036100_UTCL2_BUSY_USER_DEFINED_MASK(~0u)},
+ {19637, S_036100_EA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19663, S_036100_RMI_BUSY_USER_DEFINED_MASK(~0u)},
+ /* 1085 */
+ {18930, S_036108_PERF_SEL(~0u)},
+ {19131, S_036108_DB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19158, S_036108_CB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19212, S_036108_TA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19238, S_036108_SX_BUSY_USER_DEFINED_MASK(~0u)},
+ {19264, S_036108_SPI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19291, S_036108_SC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19371, S_036108_DB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19397, S_036108_CB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19185, S_036108_VGT_BUSY_USER_DEFINED_MASK(~0u)},
+ {19317, S_036108_PA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19502, S_036108_BCI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19663, S_036108_RMI_BUSY_USER_DEFINED_MASK(~0u)},
+ /* 1098 */
+ {18930, S_03610C_PERF_SEL(~0u)},
+ {19131, S_03610C_DB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19158, S_03610C_CB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19212, S_03610C_TA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19238, S_03610C_SX_BUSY_USER_DEFINED_MASK(~0u)},
+ {19264, S_03610C_SPI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19291, S_03610C_SC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19371, S_03610C_DB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19397, S_03610C_CB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19185, S_03610C_VGT_BUSY_USER_DEFINED_MASK(~0u)},
+ {19317, S_03610C_PA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19502, S_03610C_BCI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19663, S_03610C_RMI_BUSY_USER_DEFINED_MASK(~0u)},
+ /* 1111 */
+ {18930, S_036110_PERF_SEL(~0u)},
+ {19131, S_036110_DB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19158, S_036110_CB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19212, S_036110_TA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19238, S_036110_SX_BUSY_USER_DEFINED_MASK(~0u)},
+ {19264, S_036110_SPI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19291, S_036110_SC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19371, S_036110_DB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19397, S_036110_CB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19185, S_036110_VGT_BUSY_USER_DEFINED_MASK(~0u)},
+ {19317, S_036110_PA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19502, S_036110_BCI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19663, S_036110_RMI_BUSY_USER_DEFINED_MASK(~0u)},
+ /* 1124 */
+ {18930, S_036114_PERF_SEL(~0u)},
+ {19131, S_036114_DB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19158, S_036114_CB_CLEAN_USER_DEFINED_MASK(~0u)},
+ {19212, S_036114_TA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19238, S_036114_SX_BUSY_USER_DEFINED_MASK(~0u)},
+ {19264, S_036114_SPI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19291, S_036114_SC_BUSY_USER_DEFINED_MASK(~0u)},
+ {19371, S_036114_DB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19397, S_036114_CB_BUSY_USER_DEFINED_MASK(~0u)},
+ {19185, S_036114_VGT_BUSY_USER_DEFINED_MASK(~0u)},
+ {19317, S_036114_PA_BUSY_USER_DEFINED_MASK(~0u)},
+ {19502, S_036114_BCI_BUSY_USER_DEFINED_MASK(~0u)},
+ {19663, S_036114_RMI_BUSY_USER_DEFINED_MASK(~0u)},
+ /* 1137 */
+ {18930, S_036200_PERF_SEL(~0u)},
+ {19690, S_036200_PERF_MODE(~0u)},
+ /* 1139 */
+ {18930, S_036210_PERF_SEL(~0u)},
+ {18939, S_036210_PERF_SEL1(~0u)},
+ {18949, S_036210_CNTR_MODE(~0u)},
+ {19700, S_036210_PERF_MODE1(~0u)},
+ {19690, S_036210_PERF_MODE(~0u)},
+ /* 1144 */
+ {18868, S_036220_PERF_SEL2(~0u)},
+ {18878, S_036220_PERF_SEL3(~0u)},
+ {19711, S_036220_PERF_MODE3(~0u)},
+ {19722, S_036220_PERF_MODE2(~0u)},
+ /* 1148 */
+ {18930, S_036230_PERF_SEL(~0u)},
+ {18939, S_036230_PERF_SEL1(~0u)},
+ {18949, S_036230_CNTR_MODE(~0u)},
+ {19700, S_036230_PERF_MODE1(~0u)},
+ {19690, S_036230_PERF_MODE(~0u)},
+ /* 1153 */
+ {18868, S_036240_PERF_SEL2(~0u)},
+ {18878, S_036240_PERF_SEL3(~0u)},
+ {19711, S_036240_PERF_MODE3(~0u)},
+ {19722, S_036240_PERF_MODE2(~0u)},
+ /* 1157 */
+ {19733, S_036250_PERF_SEID_IGNORE_MASK(~0u)},
+ /* 1158 */
+ {18930, S_036400_PERF_SEL(~0u)},
+ {18939, S_036400_PERF_SEL1(~0u)},
+ {18949, S_036400_CNTR_MODE(~0u)},
+ /* 1161 */
+ {18868, S_036404_PERF_SEL2(~0u)},
+ {18878, S_036404_PERF_SEL3(~0u)},
+ /* 1163 */
+ {18930, S_036500_PERF_SEL(~0u)},
+ {18939, S_036500_PERF_SEL1(~0u)},
+ {18949, S_036500_CNTR_MODE(~0u)},
+ /* 1166 */
+ {18868, S_036504_PERF_SEL2(~0u)},
+ {18878, S_036504_PERF_SEL3(~0u)},
+ /* 1168 */
+ {18930, S_036600_PERF_SEL(~0u)},
+ {18939, S_036600_PERF_SEL1(~0u)},
+ {18949, S_036600_CNTR_MODE(~0u)},
+ {19700, S_036600_PERF_MODE1(~0u)},
+ {19690, S_036600_PERF_MODE(~0u)},
+ /* 1173 */
+ {18868, S_036610_PERF_SEL2(~0u)},
+ {18878, S_036610_PERF_SEL3(~0u)},
+ {19711, S_036610_PERF_MODE3(~0u)},
+ {19722, S_036610_PERF_MODE2(~0u)},
+ /* 1177 */
+ {19755, S_036628_BIN0_MIN(~0u)},
+ {19764, S_036628_BIN0_MAX(~0u)},
+ {19773, S_036628_BIN1_MIN(~0u)},
+ {19782, S_036628_BIN1_MAX(~0u)},
+ {19791, S_036628_BIN2_MIN(~0u)},
+ {19800, S_036628_BIN2_MAX(~0u)},
+ {19809, S_036628_BIN3_MIN(~0u)},
+ {19818, S_036628_BIN3_MAX(~0u)},
+ /* 1185 */
+ {18930, S_036700_PERF_SEL(~0u)},
+ {19827, S_036700_SQC_BANK_MASK(~0u)},
+ {19841, S_036700_SQC_CLIENT_MASK(~0u)},
+ {18979, S_036700_SPM_MODE(~0u)},
+ {19857, S_036700_SIMD_MASK(~0u)},
+ {19690, S_036700_PERF_MODE(~0u)},
+ /* 1191 */
+ {19867, S_036780_PS_EN(~0u)},
+ {19873, S_036780_VS_EN(~0u)},
+ {19879, S_036780_GS_EN(~0u)},
+ {19885, S_036780_ES_EN(~0u)},
+ {19891, S_036780_HS_EN(~0u)},
+ {19897, S_036780_LS_EN(~0u)},
+ {19903, S_036780_CS_EN(~0u)},
+ {19909, S_036780_CNTR_RATE(~0u)},
+ {19919, S_036780_DISABLE_FLUSH(~0u)},
+ /* 1200 */
+ {19933, S_036784_SH0_MASK(~0u)},
+ {19942, S_036784_SH1_MASK(~0u)},
+ /* 1202 */
+ {19951, S_036788_FORCE_EN(~0u)},
+ /* 1203 */
+ {19960, S_036900_PERFCOUNTER_SELECT(~0u)},
+ {19979, S_036900_PERFCOUNTER_SELECT1(~0u)},
+ {18949, S_036900_CNTR_MODE(~0u)},
+ /* 1206 */
+ {19999, S_036910_PERFCOUNTER_SELECT2(~0u)},
+ {20019, S_036910_PERFCOUNTER_SELECT3(~0u)},
+ /* 1208 */
+ {19960, S_036A00_PERFCOUNTER_SELECT(~0u)},
+ {19979, S_036A00_PERFCOUNTER_SELECT1(~0u)},
+ {18949, S_036A00_CNTR_MODE(~0u)},
+ /* 1211 */
+ {19999, S_036A10_PERFCOUNTER_SELECT2(~0u)},
+ {20019, S_036A10_PERFCOUNTER_SELECT3(~0u)},
+ /* 1213 */
+ {18930, S_036B00_PERF_SEL(~0u)},
+ {18939, S_036B00_PERF_SEL1(~0u)},
+ {18949, S_036B00_CNTR_MODE(~0u)},
+ {19700, S_036B00_PERF_MODE1(~0u)},
+ {19690, S_036B00_PERF_MODE(~0u)},
+ /* 1218 */
+ {18868, S_036B04_PERF_SEL2(~0u)},
+ {18878, S_036B04_PERF_SEL3(~0u)},
+ {19711, S_036B04_PERF_MODE3(~0u)},
+ {19722, S_036B04_PERF_MODE2(~0u)},
+ /* 1222 */
+ {18930, S_036C00_PERF_SEL(~0u)},
+ {18939, S_036C00_PERF_SEL1(~0u)},
+ {18949, S_036C00_CNTR_MODE(~0u)},
+ {19700, S_036C00_PERF_MODE1(~0u)},
+ {19690, S_036C00_PERF_MODE(~0u)},
+ /* 1227 */
+ {18868, S_036C04_PERF_SEL2(~0u)},
+ {18878, S_036C04_PERF_SEL3(~0u)},
+ {19711, S_036C04_PERF_MODE3(~0u)},
+ {19722, S_036C04_PERF_MODE2(~0u)},
+ /* 1231 */
+ {18930, S_036D00_PERF_SEL(~0u)},
+ {18939, S_036D00_PERF_SEL1(~0u)},
+ {18949, S_036D00_CNTR_MODE(~0u)},
+ {19700, S_036D00_PERF_MODE1(~0u)},
+ {19690, S_036D00_PERF_MODE(~0u)},
+ /* 1236 */
+ {18868, S_036D04_PERF_SEL2(~0u)},
+ {18878, S_036D04_PERF_SEL3(~0u)},
+ {19711, S_036D04_PERF_MODE3(~0u)},
+ {19722, S_036D04_PERF_MODE2(~0u)},
+ /* 1240 */
+ {18930, S_036E00_PERF_SEL(~0u)},
+ {18939, S_036E00_PERF_SEL1(~0u)},
+ {18949, S_036E00_CNTR_MODE(~0u)},
+ {19700, S_036E00_PERF_MODE1(~0u)},
+ {19690, S_036E00_PERF_MODE(~0u)},
+ /* 1245 */
+ {18868, S_036E04_PERF_SEL2(~0u)},
+ {18878, S_036E04_PERF_SEL3(~0u)},
+ {19722, S_036E04_PERF_MODE2(~0u)},
+ {19711, S_036E04_PERF_MODE3(~0u)},
+ /* 1249 */
+ {18930, S_036E40_PERF_SEL(~0u)},
+ {18939, S_036E40_PERF_SEL1(~0u)},
+ {18949, S_036E40_CNTR_MODE(~0u)},
+ {19700, S_036E40_PERF_MODE1(~0u)},
+ {19690, S_036E40_PERF_MODE(~0u)},
+ /* 1254 */
+ {18868, S_036E44_PERF_SEL2(~0u)},
+ {18878, S_036E44_PERF_SEL3(~0u)},
+ {19722, S_036E44_PERF_MODE2(~0u)},
+ {19711, S_036E44_PERF_MODE3(~0u)},
+ /* 1258 */
+ {20039, S_037000_OP_FILTER_ENABLE(~0u)},
+ {20056, S_037000_OP_FILTER_SEL(~0u)},
+ {20070, S_037000_FORMAT_FILTER_ENABLE(~0u)},
+ {20091, S_037000_FORMAT_FILTER_SEL(~0u)},
+ {20109, S_037000_CLEAR_FILTER_ENABLE(~0u)},
+ {20129, S_037000_CLEAR_FILTER_SEL(~0u)},
+ {20146, S_037000_MRT_FILTER_ENABLE(~0u)},
+ {20164, S_037000_MRT_FILTER_SEL(~0u)},
+ {20179, S_037000_NUM_SAMPLES_FILTER_ENABLE(~0u)},
+ {20205, S_037000_NUM_SAMPLES_FILTER_SEL(~0u)},
+ {20228, S_037000_NUM_FRAGMENTS_FILTER_ENABLE(~0u)},
+ {20256, S_037000_NUM_FRAGMENTS_FILTER_SEL(~0u)},
+ /* 1270 */
+ {18930, S_037004_PERF_SEL(~0u)},
+ {18939, S_037004_PERF_SEL1(~0u)},
+ {18949, S_037004_CNTR_MODE(~0u)},
+ {19700, S_037004_PERF_MODE1(~0u)},
+ {19690, S_037004_PERF_MODE(~0u)},
+ /* 1275 */
+ {18868, S_037008_PERF_SEL2(~0u)},
+ {18878, S_037008_PERF_SEL3(~0u)},
+ {19711, S_037008_PERF_MODE3(~0u)},
+ {19722, S_037008_PERF_MODE2(~0u)},
+ /* 1279 */
+ {18930, S_037100_PERF_SEL(~0u)},
+ {18939, S_037100_PERF_SEL1(~0u)},
+ {18949, S_037100_CNTR_MODE(~0u)},
+ {19700, S_037100_PERF_MODE1(~0u)},
+ {19690, S_037100_PERF_MODE(~0u)},
+ /* 1284 */
+ {18868, S_037104_PERF_SEL2(~0u)},
+ {18878, S_037104_PERF_SEL3(~0u)},
+ {19711, S_037104_PERF_MODE3(~0u)},
+ {19722, S_037104_PERF_MODE2(~0u)},
+ /* 1288 */
+ {20281, S_028000_DEPTH_CLEAR_ENABLE(~0u)},
+ {20300, S_028000_STENCIL_CLEAR_ENABLE(~0u)},
+ {20321, S_028000_DEPTH_COPY(~0u)},
+ {20332, S_028000_STENCIL_COPY(~0u)},
+ {20345, S_028000_RESUMMARIZE_ENABLE(~0u)},
+ {20364, S_028000_STENCIL_COMPRESS_DISABLE(~0u)},
+ {20389, S_028000_DEPTH_COMPRESS_DISABLE(~0u)},
+ {20412, S_028000_COPY_CENTROID(~0u)},
+ {20426, S_028000_COPY_SAMPLE(~0u)},
+ {20438, S_028000_DECOMPRESS_ENABLE(~0u)},
+ /* 1298 */
+ {20456, S_028004_ZPASS_INCREMENT_DISABLE(~0u)},
+ {20480, S_028004_PERFECT_ZPASS_COUNTS(~0u)},
+ {20501, S_028004_SAMPLE_RATE(~0u)},
+ {20513, S_028004_ZPASS_ENABLE(~0u)},
+ {20526, S_028004_ZFAIL_ENABLE(~0u)},
+ {20539, S_028004_SFAIL_ENABLE(~0u)},
+ {20552, S_028004_DBFAIL_ENABLE(~0u)},
+ {20566, S_028004_SLICE_EVEN_ENABLE(~0u)},
+ {20584, S_028004_SLICE_ODD_ENABLE(~0u)},
+ /* 1307 */
+ {20601, S_028008_SLICE_START(~0u)},
+ {20613, S_028008_SLICE_MAX(~0u)},
+ {20623, S_028008_Z_READ_ONLY(~0u)},
+ {20635, S_028008_STENCIL_READ_ONLY(~0u)},
+ {20653, S_028008_MIPID(~0u)},
+ /* 1312 */
+ {20711, S_02800C_FORCE_HIZ_ENABLE(~0u), 4, 788},
+ {20728, S_02800C_FORCE_HIS_ENABLE0(~0u), 4, 788},
+ {20746, S_02800C_FORCE_HIS_ENABLE1(~0u), 4, 788},
+ {20764, S_02800C_FORCE_SHADER_Z_ORDER(~0u)},
+ {20785, S_02800C_FAST_Z_DISABLE(~0u)},
+ {20800, S_02800C_FAST_STENCIL_DISABLE(~0u)},
+ {20821, S_02800C_NOOP_CULL_DISABLE(~0u)},
+ {20839, S_02800C_FORCE_COLOR_KILL(~0u)},
+ {20856, S_02800C_FORCE_Z_READ(~0u)},
+ {20869, S_02800C_FORCE_STENCIL_READ(~0u)},
+ {20888, S_02800C_FORCE_FULL_Z_RANGE(~0u), 4, 788},
+ {20907, S_02800C_FORCE_QC_SMASK_CONFLICT(~0u)},
+ {20931, S_02800C_DISABLE_VIEWPORT_CLAMP(~0u)},
+ {20954, S_02800C_IGNORE_SC_ZRANGE(~0u)},
+ {20971, S_02800C_DISABLE_FULLY_COVERED(~0u)},
+ {21056, S_02800C_FORCE_Z_LIMIT_SUMM(~0u), 4, 792},
+ {21075, S_02800C_MAX_TILES_IN_DTT(~0u)},
+ {21092, S_02800C_DISABLE_TILE_RATE_TILES(~0u)},
+ {21116, S_02800C_FORCE_Z_DIRTY(~0u)},
+ {21130, S_02800C_FORCE_STENCIL_DIRTY(~0u)},
+ {21150, S_02800C_FORCE_Z_VALID(~0u)},
+ {21164, S_02800C_FORCE_STENCIL_VALID(~0u)},
+ {21184, S_02800C_PRESERVE_COMPRESSION(~0u)},
+ /* 1335 */
+ {21258, S_028010_PARTIAL_SQUAD_LAUNCH_CONTROL(~0u), 4, 796},
+ {21287, S_028010_PARTIAL_SQUAD_LAUNCH_COUNTDOWN(~0u)},
+ {21318, S_028010_DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION(~0u)},
+ {21354, S_028010_DISABLE_SMEM_EXPCLEAR_OPTIMIZATION(~0u)},
+ {21389, S_028010_DISABLE_COLOR_ON_VALIDATION(~0u)},
+ {21417, S_028010_DECOMPRESS_Z_ON_FLUSH(~0u)},
+ {21439, S_028010_DISABLE_REG_SNOOP(~0u)},
+ {21457, S_028010_DEPTH_BOUNDS_HIER_DEPTH_DISABLE(~0u)},
+ {21489, S_028010_SEPARATE_HIZS_FUNC_ENABLE(~0u)},
+ {21515, S_028010_HIZ_ZFUNC(~0u)},
+ {21525, S_028010_HIS_SFUNC_FF(~0u)},
+ {21538, S_028010_HIS_SFUNC_BF(~0u)},
+ {21551, S_028010_PRESERVE_ZRANGE(~0u)},
+ {21567, S_028010_PRESERVE_SRESULTS(~0u)},
+ {21585, S_028010_DISABLE_FAST_PASS(~0u)},
+ {21603, S_028010_ALLOW_PARTIAL_RES_HIER_KILL(~0u)},
+ /* 1351 */
+ {21631, S_028028_CLEAR(~0u)},
+ /* 1352 */
+ {21637, S_028030_TL_X(~0u)},
+ {21642, S_028030_TL_Y(~0u)},
+ /* 1354 */
+ {21647, S_028034_BR_X(~0u)},
+ {21652, S_028034_BR_Y(~0u)},
+ /* 1356 */
+ {21657, S_02803C_ADDR5_SWIZZLE_MASK(~0u)},
+ {16712, S_02803C_ARRAY_MODE(~0u), 7, 800},
+ {17074, S_02803C_PIPE_CONFIG(~0u), 18, 807},
+ {17367, S_02803C_BANK_WIDTH(~0u), 4, 524},
+ {17474, S_02803C_BANK_HEIGHT(~0u), 4, 528},
+ {17586, S_02803C_MACRO_TILE_ASPECT(~0u), 4, 532},
+ {16278, S_02803C_NUM_BANKS(~0u), 4, 536},
+ /* 1363 */
+ {9248, S_028040_FORMAT(~0u), 4, 825},
+ {21809, S_028040_NUM_SAMPLES(~0u)},
+ {17264, S_028040_TILE_SPLIT(~0u), 7, 517},
+ {21821, S_028040_TILE_MODE_INDEX(~0u)},
+ {21837, S_028040_DECOMPRESS_ON_N_ZPLANES(~0u)},
+ {21861, S_028040_ALLOW_EXPCLEAR(~0u)},
+ {21876, S_028040_READ_SIZE(~0u)},
+ {21886, S_028040_TILE_SURFACE_ENABLE(~0u)},
+ {21906, S_028040_CLEAR_DISALLOWED(~0u)},
+ {21923, S_028040_ZRANGE_PRECISION(~0u)},
+ /* 1373 */
+ {9248, S_028044_FORMAT(~0u), 2, 829},
+ {17264, S_028044_TILE_SPLIT(~0u), 7, 517},
+ {21821, S_028044_TILE_MODE_INDEX(~0u)},
+ {21861, S_028044_ALLOW_EXPCLEAR(~0u)},
+ {21966, S_028044_TILE_STENCIL_DISABLE(~0u)},
+ {21906, S_028044_CLEAR_DISALLOWED(~0u)},
+ /* 1379 */
+ {21987, S_028058_PITCH_TILE_MAX(~0u)},
+ {22002, S_028058_HEIGHT_TILE_MAX(~0u)},
+ /* 1381 */
+ {22018, S_02805C_SLICE_TILE_MAX(~0u)},
+ /* 1382 */
+ {8871, S_028084_ADDRESS(~0u)},
+ /* 1383 */
+ {22033, S_0281E8_DEST_BASE_HI_256B(~0u)},
+ /* 1384 */
+ {22033, S_0281EC_DEST_BASE_HI_256B(~0u)},
+ /* 1385 */
+ {22033, S_0281F0_DEST_BASE_HI_256B(~0u)},
+ /* 1386 */
+ {22033, S_0281F4_DEST_BASE_HI_256B(~0u)},
+ /* 1387 */
+ {22051, S_028200_WINDOW_X_OFFSET(~0u)},
+ {22067, S_028200_WINDOW_Y_OFFSET(~0u)},
+ /* 1389 */
+ {21637, S_028204_TL_X(~0u)},
+ {21642, S_028204_TL_Y(~0u)},
+ {22083, S_028204_WINDOW_OFFSET_DISABLE(~0u)},
+ /* 1392 */
+ {21647, S_028208_BR_X(~0u)},
+ {21652, S_028208_BR_Y(~0u)},
+ /* 1394 */
+ {22105, S_02820C_CLIP_RULE(~0u)},
+ /* 1395 */
+ {21637, S_028210_TL_X(~0u)},
+ {21642, S_028210_TL_Y(~0u)},
+ /* 1397 */
+ {21647, S_028214_BR_X(~0u)},
+ {21652, S_028214_BR_Y(~0u)},
+ /* 1399 */
+ {22115, S_028230_ER_TRI(~0u)},
+ {14642, S_028230_ER_POINT(~0u)},
+ {22122, S_028230_ER_RECT(~0u)},
+ {22130, S_028230_ER_LINE_LR(~0u)},
+ {22141, S_028230_ER_LINE_RL(~0u)},
+ {22152, S_028230_ER_LINE_TB(~0u)},
+ {22163, S_028230_ER_LINE_BT(~0u)},
+ /* 1406 */
+ {22174, S_028234_HW_SCREEN_OFFSET_X(~0u)},
+ {22193, S_028234_HW_SCREEN_OFFSET_Y(~0u)},
+ /* 1408 */
+ {22212, S_028238_TARGET0_ENABLE(~0u)},
+ {22227, S_028238_TARGET1_ENABLE(~0u)},
+ {22242, S_028238_TARGET2_ENABLE(~0u)},
+ {22257, S_028238_TARGET3_ENABLE(~0u)},
+ {22272, S_028238_TARGET4_ENABLE(~0u)},
+ {22287, S_028238_TARGET5_ENABLE(~0u)},
+ {22302, S_028238_TARGET6_ENABLE(~0u)},
+ {22317, S_028238_TARGET7_ENABLE(~0u)},
+ /* 1416 */
+ {22332, S_02823C_OUTPUT0_ENABLE(~0u)},
+ {22347, S_02823C_OUTPUT1_ENABLE(~0u)},
+ {22362, S_02823C_OUTPUT2_ENABLE(~0u)},
+ {22377, S_02823C_OUTPUT3_ENABLE(~0u)},
+ {22392, S_02823C_OUTPUT4_ENABLE(~0u)},
+ {22407, S_02823C_OUTPUT5_ENABLE(~0u)},
+ {22422, S_02823C_OUTPUT6_ENABLE(~0u)},
+ {22437, S_02823C_OUTPUT7_ENABLE(~0u)},
+ /* 1424 */
+ {21637, S_028240_TL_X(~0u)},
+ {21642, S_028240_TL_Y(~0u)},
+ {22083, S_028240_WINDOW_OFFSET_DISABLE(~0u)},
+ /* 1427 */
+ {21647, S_028244_BR_X(~0u)},
+ {21652, S_028244_BR_Y(~0u)},
+ /* 1429 */
+ {21637, S_028250_TL_X(~0u)},
+ {21642, S_028250_TL_Y(~0u)},
+ {22083, S_028250_WINDOW_OFFSET_DISABLE(~0u)},
+ /* 1432 */
+ {21647, S_028254_BR_X(~0u)},
+ {21652, S_028254_BR_Y(~0u)},
+ /* 1434 */
+ {22544, S_028350_RB_MAP_PKR0(~0u), 4, 831},
+ {22556, S_028350_RB_MAP_PKR1(~0u), 4, 831},
+ {22668, S_028350_RB_XSEL2(~0u), 4, 835},
+ {22677, S_028350_RB_XSEL(~0u)},
+ {22685, S_028350_RB_YSEL(~0u)},
+ {22789, S_028350_PKR_MAP(~0u), 4, 839},
+ {22897, S_028350_PKR_XSEL(~0u), 4, 843},
+ {23006, S_028350_PKR_YSEL(~0u), 4, 847},
+ {23119, S_028350_PKR_XSEL2(~0u), 4, 851},
+ {23221, S_028350_SC_MAP(~0u), 4, 855},
+ {23367, S_028350_SC_XSEL(~0u), 4, 859},
+ {23514, S_028350_SC_YSEL(~0u), 4, 863},
+ {23614, S_028350_SE_MAP(~0u), 4, 867},
+ {23760, S_028350_SE_XSEL_GFX6(~0u), 4, 871},
+ {23912, S_028350_SE_YSEL_GFX6(~0u), 4, 875},
+ {23925, S_028350_SE_XSEL_GFX9(~0u)},
+ {23938, S_028350_SE_YSEL_GFX9(~0u)},
+ /* 1451 */
+ {24063, S_028354_SE_PAIR_MAP(~0u), 4, 879},
+ {24234, S_028354_SE_PAIR_XSEL_GFX6(~0u), 4, 883},
+ {24411, S_028354_SE_PAIR_YSEL_GFX6(~0u), 4, 887},
+ {24429, S_028354_SE_PAIR_XSEL_GFX9(~0u)},
+ {24447, S_028354_SE_PAIR_YSEL_GFX9(~0u)},
+ /* 1456 */
+ {20566, S_028358_SLICE_EVEN_ENABLE(~0u)},
+ {20584, S_028358_SLICE_ODD_ENABLE(~0u)},
+ /* 1458 */
+ {24465, S_028424_OVERWRITE_COMBINER_DISABLE(~0u)},
+ {24492, S_028424_OVERWRITE_COMBINER_MRT_SHARING_DISABLE(~0u)},
+ {24531, S_028424_OVERWRITE_COMBINER_WATERMARK(~0u)},
+ /* 1461 */
+ {24797, S_02842C_STENCILFAIL(~0u), 16, 891},
+ {24809, S_02842C_STENCILZPASS(~0u), 16, 891},
+ {24822, S_02842C_STENCILZFAIL(~0u), 16, 891},
+ {24835, S_02842C_STENCILFAIL_BF(~0u), 16, 891},
+ {24850, S_02842C_STENCILZPASS_BF(~0u), 16, 891},
+ {24866, S_02842C_STENCILZFAIL_BF(~0u), 16, 891},
+ /* 1467 */
+ {24882, S_028430_STENCILTESTVAL(~0u)},
+ {24897, S_028430_STENCILMASK(~0u)},
+ {24909, S_028430_STENCILWRITEMASK(~0u)},
+ {24926, S_028430_STENCILOPVAL(~0u)},
+ /* 1471 */
+ {24939, S_028434_STENCILTESTVAL_BF(~0u)},
+ {24957, S_028434_STENCILMASK_BF(~0u)},
+ {24972, S_028434_STENCILWRITEMASK_BF(~0u)},
+ {24992, S_028434_STENCILOPVAL_BF(~0u)},
+ /* 1475 */
+ {669, S_028644_OFFSET(~0u)},
+ {25015, S_028644_DEFAULT_VAL(~0u), 1, 907},
+ {25027, S_028644_FLAT_SHADE(~0u)},
+ {25038, S_028644_CYL_WRAP(~0u)},
+ {25047, S_028644_PT_SPRITE_TEX(~0u)},
+ {25061, S_028644_DUP(~0u)},
+ {25065, S_028644_FP16_INTERP_MODE(~0u)},
+ {25082, S_028644_USE_DEFAULT_ATTR1(~0u)},
+ {25100, S_028644_DEFAULT_VAL_ATTR1(~0u)},
+ {25118, S_028644_PT_SPRITE_TEX_ATTR1(~0u)},
+ {25138, S_028644_ATTR0_VALID(~0u)},
+ {25150, S_028644_ATTR1_VALID(~0u)},
+ /* 1487 */
+ {25162, S_0286C4_VS_EXPORT_COUNT(~0u)},
+ {25178, S_0286C4_VS_HALF_PACK(~0u)},
+ {25191, S_0286C4_VS_EXPORTS_FOG(~0u)},
+ {25206, S_0286C4_VS_OUT_FOG_VEC_ADDR(~0u)},
+ /* 1491 */
+ {25226, S_0286CC_PERSP_SAMPLE_ENA(~0u)},
+ {25243, S_0286CC_PERSP_CENTER_ENA(~0u)},
+ {25260, S_0286CC_PERSP_CENTROID_ENA(~0u)},
+ {25279, S_0286CC_PERSP_PULL_MODEL_ENA(~0u)},
+ {25300, S_0286CC_LINEAR_SAMPLE_ENA(~0u)},
+ {25318, S_0286CC_LINEAR_CENTER_ENA(~0u)},
+ {25336, S_0286CC_LINEAR_CENTROID_ENA(~0u)},
+ {25356, S_0286CC_LINE_STIPPLE_TEX_ENA(~0u)},
+ {25377, S_0286CC_POS_X_FLOAT_ENA(~0u)},
+ {25393, S_0286CC_POS_Y_FLOAT_ENA(~0u)},
+ {25409, S_0286CC_POS_Z_FLOAT_ENA(~0u)},
+ {25425, S_0286CC_POS_W_FLOAT_ENA(~0u)},
+ {25441, S_0286CC_FRONT_FACE_ENA(~0u)},
+ {25456, S_0286CC_ANCILLARY_ENA(~0u)},
+ {25470, S_0286CC_SAMPLE_COVERAGE_ENA(~0u)},
+ {25490, S_0286CC_POS_FIXED_PT_ENA(~0u)},
+ /* 1507 */
+ {25226, S_0286D0_PERSP_SAMPLE_ENA(~0u)},
+ {25243, S_0286D0_PERSP_CENTER_ENA(~0u)},
+ {25260, S_0286D0_PERSP_CENTROID_ENA(~0u)},
+ {25279, S_0286D0_PERSP_PULL_MODEL_ENA(~0u)},
+ {25300, S_0286D0_LINEAR_SAMPLE_ENA(~0u)},
+ {25318, S_0286D0_LINEAR_CENTER_ENA(~0u)},
+ {25336, S_0286D0_LINEAR_CENTROID_ENA(~0u)},
+ {25356, S_0286D0_LINE_STIPPLE_TEX_ENA(~0u)},
+ {25377, S_0286D0_POS_X_FLOAT_ENA(~0u)},
+ {25393, S_0286D0_POS_Y_FLOAT_ENA(~0u)},
+ {25409, S_0286D0_POS_Z_FLOAT_ENA(~0u)},
+ {25425, S_0286D0_POS_W_FLOAT_ENA(~0u)},
+ {25441, S_0286D0_FRONT_FACE_ENA(~0u)},
+ {25456, S_0286D0_ANCILLARY_ENA(~0u)},
+ {25470, S_0286D0_SAMPLE_COVERAGE_ENA(~0u)},
+ {25490, S_0286D0_POS_FIXED_PT_ENA(~0u)},
+ /* 1523 */
+ {25507, S_0286D4_FLAT_SHADE_ENA(~0u)},
+ {25522, S_0286D4_PNT_SPRITE_ENA(~0u)},
+ {25645, S_0286D4_PNT_SPRITE_OVRD_X(~0u), 5, 908},
+ {25663, S_0286D4_PNT_SPRITE_OVRD_Y(~0u), 5, 908},
+ {25681, S_0286D4_PNT_SPRITE_OVRD_Z(~0u), 5, 908},
+ {25699, S_0286D4_PNT_SPRITE_OVRD_W(~0u), 5, 908},
+ {25717, S_0286D4_PNT_SPRITE_TOP_1(~0u)},
+ /* 1530 */
+ {25734, S_0286D8_NUM_INTERP(~0u)},
+ {25745, S_0286D8_PARAM_GEN(~0u)},
+ {25755, S_0286D8_FOG_ADDR(~0u)},
+ {25764, S_0286D8_BC_OPTIMIZE_DISABLE(~0u)},
+ {25784, S_0286D8_PASS_FOG_THROUGH_PS(~0u)},
+ {25804, S_0286D8_OFFCHIP_PARAM_EN(~0u)},
+ {25821, S_0286D8_LATE_PC_DEALLOC(~0u)},
+ /* 1537 */
+ {25837, S_0286E0_PERSP_CENTER_CNTL(~0u)},
+ {25855, S_0286E0_PERSP_CENTROID_CNTL(~0u)},
+ {25875, S_0286E0_LINEAR_CENTER_CNTL(~0u)},
+ {25894, S_0286E0_LINEAR_CENTROID_CNTL(~0u)},
+ {25964, S_0286E0_POS_FLOAT_LOCATION(~0u), 1, 913},
+ {25983, S_0286E0_POS_FLOAT_ULC(~0u)},
+ {25997, S_0286E0_FRONT_FACE_ALL_BITS(~0u)},
+ /* 1544 */
+ {18769, S_0286E8_WAVES(~0u)},
+ {18775, S_0286E8_WAVESIZE(~0u)},
+ /* 1546 */
+ {26017, S_028704_NUM_PS_WAVES(~0u)},
+ {26030, S_028704_NUM_VS_WAVES(~0u)},
+ {26043, S_028704_NUM_GS_WAVES(~0u)},
+ {26056, S_028704_NUM_ES_WAVES(~0u)},
+ {26069, S_028704_NUM_HS_WAVES(~0u)},
+ /* 1551 */
+ {26082, S_028708_NUM_LS_WAVES(~0u)},
+ /* 1552 */
+ {26183, S_02870C_POS0_EXPORT_FORMAT(~0u), 5, 914},
+ {26202, S_02870C_POS1_EXPORT_FORMAT(~0u), 5, 914},
+ {26221, S_02870C_POS2_EXPORT_FORMAT(~0u), 5, 914},
+ {26240, S_02870C_POS3_EXPORT_FORMAT(~0u), 5, 914},
+ /* 1556 */
+ {26459, S_028710_Z_EXPORT_FORMAT(~0u), 10, 919},
+ /* 1557 */
+ {26475, S_028714_COL0_EXPORT_FORMAT(~0u), 10, 919},
+ {26494, S_028714_COL1_EXPORT_FORMAT(~0u), 10, 919},
+ {26513, S_028714_COL2_EXPORT_FORMAT(~0u), 10, 919},
+ {26532, S_028714_COL3_EXPORT_FORMAT(~0u), 10, 919},
+ {26551, S_028714_COL4_EXPORT_FORMAT(~0u), 10, 919},
+ {26570, S_028714_COL5_EXPORT_FORMAT(~0u), 10, 919},
+ {26589, S_028714_COL6_EXPORT_FORMAT(~0u), 10, 919},
+ {26608, S_028714_COL7_EXPORT_FORMAT(~0u), 10, 919},
+ /* 1565 */
+ {26862, S_028754_MRT0(~0u), 11, 929},
+ {26867, S_028754_MRT1(~0u)},
+ {26872, S_028754_MRT2(~0u)},
+ {26877, S_028754_MRT3(~0u)},
+ {26882, S_028754_MRT4(~0u)},
+ {26887, S_028754_MRT5(~0u)},
+ {26892, S_028754_MRT6(~0u)},
+ {26897, S_028754_MRT7(~0u)},
+ /* 1573 */
+ {26982, S_028758_MRT0_EPSILON(~0u), 16, 940},
+ {26995, S_028758_MRT1_EPSILON(~0u)},
+ {27008, S_028758_MRT2_EPSILON(~0u)},
+ {27021, S_028758_MRT3_EPSILON(~0u)},
+ {27034, S_028758_MRT4_EPSILON(~0u)},
+ {27047, S_028758_MRT5_EPSILON(~0u)},
+ {27060, S_028758_MRT6_EPSILON(~0u)},
+ {27073, S_028758_MRT7_EPSILON(~0u)},
+ /* 1581 */
+ {27086, S_02875C_MRT0_COLOR_OPT_DISABLE(~0u)},
+ {27109, S_02875C_MRT0_ALPHA_OPT_DISABLE(~0u)},
+ {27132, S_02875C_MRT1_COLOR_OPT_DISABLE(~0u)},
+ {27155, S_02875C_MRT1_ALPHA_OPT_DISABLE(~0u)},
+ {27178, S_02875C_MRT2_COLOR_OPT_DISABLE(~0u)},
+ {27201, S_02875C_MRT2_ALPHA_OPT_DISABLE(~0u)},
+ {27224, S_02875C_MRT3_COLOR_OPT_DISABLE(~0u)},
+ {27247, S_02875C_MRT3_ALPHA_OPT_DISABLE(~0u)},
+ {27270, S_02875C_MRT4_COLOR_OPT_DISABLE(~0u)},
+ {27293, S_02875C_MRT4_ALPHA_OPT_DISABLE(~0u)},
+ {27316, S_02875C_MRT5_COLOR_OPT_DISABLE(~0u)},
+ {27339, S_02875C_MRT5_ALPHA_OPT_DISABLE(~0u)},
+ {27362, S_02875C_MRT6_COLOR_OPT_DISABLE(~0u)},
+ {27385, S_02875C_MRT6_ALPHA_OPT_DISABLE(~0u)},
+ {27408, S_02875C_MRT7_COLOR_OPT_DISABLE(~0u)},
+ {27431, S_02875C_MRT7_ALPHA_OPT_DISABLE(~0u)},
+ {27454, S_02875C_PIXEN_ZERO_OPT_DISABLE(~0u)},
+ /* 1598 */
+ {27745, S_028760_COLOR_SRC_OPT(~0u), 8, 956},
+ {27759, S_028760_COLOR_DST_OPT(~0u)},
+ {27907, S_028760_COLOR_COMB_FCN(~0u), 8, 964},
+ {27922, S_028760_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028760_ALPHA_DST_OPT(~0u)},
+ {27950, S_028760_ALPHA_COMB_FCN(~0u)},
+ /* 1604 */
+ {27745, S_028764_COLOR_SRC_OPT(~0u)},
+ {27759, S_028764_COLOR_DST_OPT(~0u)},
+ {27907, S_028764_COLOR_COMB_FCN(~0u)},
+ {27922, S_028764_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028764_ALPHA_DST_OPT(~0u)},
+ {27950, S_028764_ALPHA_COMB_FCN(~0u)},
+ /* 1610 */
+ {27745, S_028768_COLOR_SRC_OPT(~0u)},
+ {27759, S_028768_COLOR_DST_OPT(~0u)},
+ {27907, S_028768_COLOR_COMB_FCN(~0u)},
+ {27922, S_028768_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028768_ALPHA_DST_OPT(~0u)},
+ {27950, S_028768_ALPHA_COMB_FCN(~0u)},
+ /* 1616 */
+ {27745, S_02876C_COLOR_SRC_OPT(~0u)},
+ {27759, S_02876C_COLOR_DST_OPT(~0u)},
+ {27907, S_02876C_COLOR_COMB_FCN(~0u)},
+ {27922, S_02876C_ALPHA_SRC_OPT(~0u)},
+ {27936, S_02876C_ALPHA_DST_OPT(~0u)},
+ {27950, S_02876C_ALPHA_COMB_FCN(~0u)},
+ /* 1622 */
+ {27745, S_028770_COLOR_SRC_OPT(~0u)},
+ {27759, S_028770_COLOR_DST_OPT(~0u)},
+ {27907, S_028770_COLOR_COMB_FCN(~0u)},
+ {27922, S_028770_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028770_ALPHA_DST_OPT(~0u)},
+ {27950, S_028770_ALPHA_COMB_FCN(~0u)},
+ /* 1628 */
+ {27745, S_028774_COLOR_SRC_OPT(~0u)},
+ {27759, S_028774_COLOR_DST_OPT(~0u)},
+ {27907, S_028774_COLOR_COMB_FCN(~0u)},
+ {27922, S_028774_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028774_ALPHA_DST_OPT(~0u)},
+ {27950, S_028774_ALPHA_COMB_FCN(~0u)},
+ /* 1634 */
+ {27745, S_028778_COLOR_SRC_OPT(~0u)},
+ {27759, S_028778_COLOR_DST_OPT(~0u)},
+ {27907, S_028778_COLOR_COMB_FCN(~0u)},
+ {27922, S_028778_ALPHA_SRC_OPT(~0u)},
+ {27936, S_028778_ALPHA_DST_OPT(~0u)},
+ {27950, S_028778_ALPHA_COMB_FCN(~0u)},
+ /* 1640 */
+ {27745, S_02877C_COLOR_SRC_OPT(~0u)},
+ {27759, S_02877C_COLOR_DST_OPT(~0u)},
+ {27907, S_02877C_COLOR_COMB_FCN(~0u)},
+ {27922, S_02877C_ALPHA_SRC_OPT(~0u)},
+ {27936, S_02877C_ALPHA_DST_OPT(~0u)},
+ {27950, S_02877C_ALPHA_COMB_FCN(~0u)},
+ /* 1646 */
+ {28359, S_028780_COLOR_SRCBLEND(~0u), 21, 972},
+ {27907, S_028780_COLOR_COMB_FCN(~0u), 5, 993},
+ {28464, S_028780_COLOR_DESTBLEND(~0u), 21, 972},
+ {28480, S_028780_ALPHA_SRCBLEND(~0u), 21, 972},
+ {27950, S_028780_ALPHA_COMB_FCN(~0u), 5, 993},
+ {28495, S_028780_ALPHA_DESTBLEND(~0u), 21, 972},
+ {28511, S_028780_SEPARATE_ALPHA_BLEND(~0u)},
+ {842, S_028780_ENABLE(~0u)},
+ {28532, S_028780_DISABLE_ROP3(~0u)},
+ /* 1655 */
+ {28545, S_0287CC_SRC_STATE_ID(~0u)},
+ /* 1656 */
+ {28558, S_0287E4_BASE_ADDR_GFX6(~0u)},
+ {28573, S_0287E4_BASE_ADDR_GFX9(~0u)},
+ /* 1658 */
+ {28666, S_0287F0_SOURCE_SELECT(~0u), 4, 998},
+ {28712, S_0287F0_MAJOR_MODE(~0u), 2, 1002},
+ {28723, S_0287F0_NOT_EOP(~0u)},
+ {28731, S_0287F0_USE_OPAQUE(~0u)},
+ {28742, S_0287F0_SPRITE_EN_R6XX(~0u)},
+ {28757, S_0287F0_UNROLLED_INST(~0u)},
+ {28771, S_0287F0_GRBM_SKEW_NO_DEC(~0u)},
+ {28788, S_0287F0_REG_RT_INDEX(~0u)},
+ /* 1666 */
+ {28801, S_0287F8_ADDRESS_LOW(~0u)},
+ /* 1667 */
+ {28813, S_028800_STENCIL_ENABLE(~0u)},
+ {20719, S_028800_Z_ENABLE(~0u)},
+ {28828, S_028800_Z_WRITE_ENABLE(~0u)},
+ {28843, S_028800_DEPTH_BOUNDS_ENABLE(~0u)},
+ {21519, S_028800_ZFUNC(~0u), 8, 1004},
+ {28958, S_028800_BACKFACE_ENABLE(~0u)},
+ {29061, S_028800_STENCILFUNC(~0u), 8, 1012},
+ {29073, S_028800_STENCILFUNC_BF(~0u), 8, 1012},
+ {29088, S_028800_ENABLE_COLOR_WRITES_ON_DEPTH_FAIL(~0u)},
+ {29122, S_028800_DISABLE_COLOR_WRITES_ON_DEPTH_PASS(~0u)},
+ /* 1677 */
+ {29157, S_028804_MAX_ANCHOR_SAMPLES(~0u)},
+ {29176, S_028804_PS_ITER_SAMPLES(~0u)},
+ {29192, S_028804_MASK_EXPORT_NUM_SAMPLES(~0u)},
+ {29216, S_028804_ALPHA_TO_MASK_NUM_SAMPLES(~0u)},
+ {29242, S_028804_HIGH_QUALITY_INTERSECTIONS(~0u)},
+ {29269, S_028804_INCOHERENT_EQAA_READS(~0u)},
+ {29291, S_028804_INTERPOLATE_COMP_Z(~0u)},
+ {29310, S_028804_INTERPOLATE_SRC_Z(~0u)},
+ {29328, S_028804_STATIC_ANCHOR_ASSOCIATIONS(~0u)},
+ {29355, S_028804_ALPHA_TO_MASK_EQAA_DISABLE(~0u)},
+ {29382, S_028804_OVERRASTERIZATION_AMOUNT(~0u)},
+ {29407, S_028804_ENABLE_POSTZ_OVERRASTERIZATION(~0u)},
+ /* 1689 */
+ {29438, S_028808_DISABLE_DUAL_QUAD(~0u)},
+ {29456, S_028808_DEGAMMA_ENABLE(~0u)},
+ {9808, S_028808_MODE(~0u), 7, 1020},
+ {28540, S_028808_ROP3(~0u), 256, 1027},
+ /* 1693 */
+ {29761, S_02880C_Z_EXPORT_ENABLE(~0u)},
+ {29777, S_02880C_STENCIL_TEST_VAL_EXPORT_ENABLE(~0u)},
+ {29808, S_02880C_STENCIL_OP_VAL_EXPORT_ENABLE(~0u)},
+ {20777, S_02880C_Z_ORDER(~0u), 4, 1283},
+ {29887, S_02880C_KILL_ENABLE(~0u)},
+ {29899, S_02880C_COVERAGE_TO_MASK_ENABLE(~0u)},
+ {29923, S_02880C_MASK_EXPORT_ENABLE(~0u)},
+ {29942, S_02880C_EXEC_ON_HIER_FAIL(~0u)},
+ {29960, S_02880C_EXEC_ON_NOOP(~0u)},
+ {29973, S_02880C_ALPHA_TO_MASK_DISABLE(~0u)},
+ {29995, S_02880C_DEPTH_BEFORE_SHADER(~0u)},
+ {30085, S_02880C_CONSERVATIVE_Z_EXPORT(~0u), 4, 1287},
+ {30107, S_02880C_DUAL_QUAD_DISABLE(~0u)},
+ {30125, S_02880C_PRIMITIVE_ORDERED_PIXEL_SHADER(~0u)},
+ {30156, S_02880C_EXEC_IF_OVERLAPPED(~0u)},
+ {30175, S_02880C_POPS_OVERLAP_NUM_SAMPLES(~0u)},
+ /* 1709 */
+ {30200, S_028810_UCP_ENA_0(~0u)},
+ {30210, S_028810_UCP_ENA_1(~0u)},
+ {30220, S_028810_UCP_ENA_2(~0u)},
+ {30230, S_028810_UCP_ENA_3(~0u)},
+ {30240, S_028810_UCP_ENA_4(~0u)},
+ {30250, S_028810_UCP_ENA_5(~0u)},
+ {30260, S_028810_PS_UCP_Y_SCALE_NEG(~0u)},
+ {30279, S_028810_PS_UCP_MODE(~0u)},
+ {30291, S_028810_CLIP_DISABLE(~0u)},
+ {30304, S_028810_UCP_CULL_ONLY_ENA(~0u)},
+ {30322, S_028810_BOUNDARY_EDGE_FLAG_ENA(~0u)},
+ {30345, S_028810_DX_CLIP_SPACE_DEF(~0u)},
+ {30363, S_028810_DIS_CLIP_ERR_DETECT(~0u)},
+ {30383, S_028810_VTX_KILL_OR(~0u)},
+ {30395, S_028810_DX_RASTERIZATION_KILL(~0u)},
+ {30417, S_028810_DX_LINEAR_ATTR_CLIP_ENA(~0u)},
+ {30441, S_028810_VTE_VPORT_PROVOKE_DISABLE(~0u)},
+ {30467, S_028810_ZCLIP_NEAR_DISABLE(~0u)},
+ {30486, S_028810_ZCLIP_FAR_DISABLE(~0u)},
+ /* 1728 */
+ {30504, S_028814_CULL_FRONT(~0u)},
+ {30515, S_028814_CULL_BACK(~0u)},
+ {30525, S_028814_FACE(~0u)},
+ {30540, S_028814_POLY_MODE(~0u), 2, 1291},
+ {30606, S_028814_POLYMODE_FRONT_PTYPE(~0u), 3, 1293},
+ {30627, S_028814_POLYMODE_BACK_PTYPE(~0u), 3, 1293},
+ {30647, S_028814_POLY_OFFSET_FRONT_ENABLE(~0u)},
+ {30672, S_028814_POLY_OFFSET_BACK_ENABLE(~0u)},
+ {30696, S_028814_POLY_OFFSET_PARA_ENABLE(~0u)},
+ {30720, S_028814_VTX_WINDOW_OFFSET_ENABLE(~0u)},
+ {30745, S_028814_PROVOKING_VTX_LAST(~0u)},
+ {30764, S_028814_PERSP_CORR_DIS(~0u)},
+ {30779, S_028814_MULTI_PRIM_IB_ENA(~0u)},
+ {30797, S_028814_RIGHT_TRIANGLE_ALTERNATE_GRADIENT_REF(~0u)},
+ {30835, S_028814_NEW_QUAD_DECOMPOSITION(~0u)},
+ /* 1743 */
+ {30858, S_028818_VPORT_X_SCALE_ENA(~0u)},
+ {30876, S_028818_VPORT_X_OFFSET_ENA(~0u)},
+ {30895, S_028818_VPORT_Y_SCALE_ENA(~0u)},
+ {30913, S_028818_VPORT_Y_OFFSET_ENA(~0u)},
+ {30932, S_028818_VPORT_Z_SCALE_ENA(~0u)},
+ {30950, S_028818_VPORT_Z_OFFSET_ENA(~0u)},
+ {30969, S_028818_VTX_XY_FMT(~0u)},
+ {30980, S_028818_VTX_Z_FMT(~0u)},
+ {30990, S_028818_VTX_W0_FMT(~0u)},
+ {31001, S_028818_PERFCOUNTER_REF(~0u)},
+ /* 1753 */
+ {31017, S_02881C_CLIP_DIST_ENA_0(~0u)},
+ {31033, S_02881C_CLIP_DIST_ENA_1(~0u)},
+ {31049, S_02881C_CLIP_DIST_ENA_2(~0u)},
+ {31065, S_02881C_CLIP_DIST_ENA_3(~0u)},
+ {31081, S_02881C_CLIP_DIST_ENA_4(~0u)},
+ {31097, S_02881C_CLIP_DIST_ENA_5(~0u)},
+ {31113, S_02881C_CLIP_DIST_ENA_6(~0u)},
+ {31129, S_02881C_CLIP_DIST_ENA_7(~0u)},
+ {31145, S_02881C_CULL_DIST_ENA_0(~0u)},
+ {31161, S_02881C_CULL_DIST_ENA_1(~0u)},
+ {31177, S_02881C_CULL_DIST_ENA_2(~0u)},
+ {31193, S_02881C_CULL_DIST_ENA_3(~0u)},
+ {31209, S_02881C_CULL_DIST_ENA_4(~0u)},
+ {31225, S_02881C_CULL_DIST_ENA_5(~0u)},
+ {31241, S_02881C_CULL_DIST_ENA_6(~0u)},
+ {31257, S_02881C_CULL_DIST_ENA_7(~0u)},
+ {31273, S_02881C_USE_VTX_POINT_SIZE(~0u)},
+ {31292, S_02881C_USE_VTX_EDGE_FLAG(~0u)},
+ {31310, S_02881C_USE_VTX_RENDER_TARGET_INDX(~0u)},
+ {31337, S_02881C_USE_VTX_VIEWPORT_INDX(~0u)},
+ {31359, S_02881C_USE_VTX_KILL_FLAG(~0u)},
+ {31377, S_02881C_VS_OUT_MISC_VEC_ENA(~0u)},
+ {31397, S_02881C_VS_OUT_CCDIST0_VEC_ENA(~0u)},
+ {31420, S_02881C_VS_OUT_CCDIST1_VEC_ENA(~0u)},
+ {31443, S_02881C_VS_OUT_MISC_SIDE_BUS_ENA(~0u)},
+ {31468, S_02881C_USE_VTX_GS_CUT_FLAG(~0u)},
+ {31488, S_02881C_USE_VTX_LINE_WIDTH(~0u)},
+ {31507, S_02881C_USE_VTX_SHD_OBJPRIM_ID(~0u)},
+ /* 1781 */
+ {31530, S_028820_VTE_XY_INF_DISCARD(~0u)},
+ {31549, S_028820_VTE_Z_INF_DISCARD(~0u)},
+ {31567, S_028820_VTE_W_INF_DISCARD(~0u)},
+ {31585, S_028820_VTE_0XNANINF_IS_0(~0u)},
+ {31603, S_028820_VTE_XY_NAN_RETAIN(~0u)},
+ {31621, S_028820_VTE_Z_NAN_RETAIN(~0u)},
+ {31638, S_028820_VTE_W_NAN_RETAIN(~0u)},
+ {31655, S_028820_VTE_W_RECIP_NAN_IS_0(~0u)},
+ {31676, S_028820_VS_XY_NAN_TO_INF(~0u)},
+ {31693, S_028820_VS_XY_INF_RETAIN(~0u)},
+ {31710, S_028820_VS_Z_NAN_TO_INF(~0u)},
+ {31726, S_028820_VS_Z_INF_RETAIN(~0u)},
+ {31742, S_028820_VS_W_NAN_TO_INF(~0u)},
+ {31758, S_028820_VS_W_INF_RETAIN(~0u)},
+ {31774, S_028820_VS_CLIP_DIST_INF_DISCARD(~0u)},
+ {31799, S_028820_VTE_NO_OUTPUT_NEG_0(~0u)},
+ /* 1797 */
+ {31819, S_028824_LINE_STIPPLE_RESET(~0u)},
+ {31838, S_028824_EXPAND_FULL_LENGTH(~0u)},
+ {31857, S_028824_FRACTIONAL_ACCUM(~0u)},
+ {31874, S_028824_DIAMOND_ADJUST(~0u)},
+ /* 1801 */
+ {31889, S_02882C_TRIANGLE_FILTER_DISABLE(~0u)},
+ {31913, S_02882C_LINE_FILTER_DISABLE(~0u)},
+ {31933, S_02882C_POINT_FILTER_DISABLE(~0u)},
+ {31954, S_02882C_RECTANGLE_FILTER_DISABLE(~0u)},
+ {31979, S_02882C_TRIANGLE_EXPAND_ENA(~0u)},
+ {31999, S_02882C_LINE_EXPAND_ENA(~0u)},
+ {32015, S_02882C_POINT_EXPAND_ENA(~0u)},
+ {32032, S_02882C_RECTANGLE_EXPAND_ENA(~0u)},
+ {32053, S_02882C_PRIM_EXPAND_CONSTANT(~0u)},
+ {32074, S_02882C_XMAX_RIGHT_EXCLUSION(~0u)},
+ {32095, S_02882C_YMAX_BOTTOM_EXCLUSION(~0u)},
+ /* 1812 */
+ {32117, S_028830_SMALL_PRIM_FILTER_ENABLE(~0u)},
+ {31889, S_028830_TRIANGLE_FILTER_DISABLE(~0u)},
+ {31913, S_028830_LINE_FILTER_DISABLE(~0u)},
+ {31933, S_028830_POINT_FILTER_DISABLE(~0u)},
+ {31954, S_028830_RECTANGLE_FILTER_DISABLE(~0u)},
+ {32142, S_028830_SRBSL_ENABLE(~0u)},
+ /* 1818 */
+ {13235, S_028A00_HEIGHT(~0u)},
+ {13229, S_028A00_WIDTH(~0u)},
+ /* 1820 */
+ {32155, S_028A04_MIN_SIZE(~0u)},
+ {32164, S_028A04_MAX_SIZE(~0u)},
+ /* 1822 */
+ {13229, S_028A08_WIDTH(~0u)},
+ /* 1823 */
+ {32173, S_028A0C_LINE_PATTERN(~0u)},
+ {32186, S_028A0C_REPEAT_COUNT(~0u)},
+ {32199, S_028A0C_PATTERN_BIT_ORDER(~0u)},
+ {32217, S_028A0C_AUTO_RESET_CNTL(~0u)},
+ /* 1827 */
+ {32338, S_028A10_PATH_SELECT(~0u), 5, 1296},
+ /* 1828 */
+ {32350, S_028A14_TESS_MODE(~0u)},
+ /* 1829 */
+ {32360, S_028A20_REUSE_DEPTH(~0u)},
+ /* 1830 */
+ {6343, S_028A24_PRIM_TYPE(~0u), 18, 1301},
+ {32727, S_028A24_RETAIN_ORDER(~0u)},
+ {32740, S_028A24_RETAIN_QUADS(~0u)},
+ {32821, S_028A24_PRIM_ORDER(~0u), 5, 1319},
+ /* 1834 */
+ {32832, S_028A28_FIRST_DECR(~0u)},
+ /* 1835 */
+ {32838, S_028A2C_DECR(~0u)},
+ /* 1836 */
+ {32843, S_028A30_COMP_X_EN(~0u)},
+ {32853, S_028A30_COMP_Y_EN(~0u)},
+ {32863, S_028A30_COMP_Z_EN(~0u)},
+ {32873, S_028A30_COMP_W_EN(~0u)},
+ {8904, S_028A30_STRIDE(~0u)},
+ {32883, S_028A30_SHIFT(~0u)},
+ /* 1842 */
+ {32843, S_028A34_COMP_X_EN(~0u)},
+ {32853, S_028A34_COMP_Y_EN(~0u)},
+ {32863, S_028A34_COMP_Z_EN(~0u)},
+ {32873, S_028A34_COMP_W_EN(~0u)},
+ {8904, S_028A34_STRIDE(~0u)},
+ {32883, S_028A34_SHIFT(~0u)},
+ /* 1848 */
+ {33048, S_028A38_X_CONV(~0u), 9, 1324},
+ {22058, S_028A38_X_OFFSET(~0u)},
+ {33055, S_028A38_Y_CONV(~0u), 9, 1324},
+ {22074, S_028A38_Y_OFFSET(~0u)},
+ {33062, S_028A38_Z_CONV(~0u), 9, 1324},
+ {33069, S_028A38_Z_OFFSET(~0u)},
+ {33078, S_028A38_W_CONV(~0u), 9, 1324},
+ {33085, S_028A38_W_OFFSET(~0u)},
+ /* 1856 */
+ {33048, S_028A3C_X_CONV(~0u), 9, 1324},
+ {22058, S_028A3C_X_OFFSET(~0u)},
+ {33055, S_028A3C_Y_CONV(~0u), 9, 1324},
+ {22074, S_028A3C_Y_OFFSET(~0u)},
+ {33062, S_028A3C_Z_CONV(~0u), 9, 1324},
+ {33069, S_028A3C_Z_OFFSET(~0u)},
+ {33078, S_028A3C_W_CONV(~0u), 9, 1324},
+ {33085, S_028A3C_W_OFFSET(~0u)},
+ /* 1864 */
+ {9808, S_028A40_MODE(~0u), 6, 1333},
+ {8965, S_028A40_RESERVED_0(~0u)},
+ {33212, S_028A40_CUT_MODE(~0u), 4, 1339},
+ {8983, S_028A40_RESERVED_1(~0u)},
+ {33221, S_028A40_GS_C_PACK_EN(~0u)},
+ {33234, S_028A40_RESERVED_2(~0u)},
+ {33245, S_028A40_ES_PASSTHRU(~0u)},
+ {33257, S_028A40_COMPUTE_MODE(~0u)},
+ {33270, S_028A40_FAST_COMPUTE_MODE(~0u)},
+ {33288, S_028A40_ELEMENT_INFO_EN(~0u)},
+ {33304, S_028A40_PARTIAL_THD_AT_EOI(~0u)},
+ {33323, S_028A40_SUPPRESS_CUTS(~0u)},
+ {33337, S_028A40_ES_WRITE_OPTIMIZE(~0u)},
+ {33355, S_028A40_GS_WRITE_OPTIMIZE(~0u)},
+ {33406, S_028A40_ONCHIP(~0u), 4, 1343},
+ {33413, S_028A40_RESERVED_3(~0u)},
+ {33424, S_028A40_RESERVED_4(~0u)},
+ {33435, S_028A40_RESERVED_5(~0u)},
+ /* 1882 */
+ {33446, S_028A44_ES_VERTS_PER_SUBGRP(~0u)},
+ {33466, S_028A44_GS_PRIMS_PER_SUBGRP(~0u)},
+ {33486, S_028A44_GS_INST_PRIMS_IN_SUBGRP(~0u)},
+ /* 1885 */
+ {33510, S_028A48_MSAA_ENABLE(~0u)},
+ {33522, S_028A48_VPORT_SCISSOR_ENABLE(~0u)},
+ {33543, S_028A48_LINE_STIPPLE_ENABLE(~0u)},
+ {33563, S_028A48_SEND_UNLIT_STILES_TO_PKR(~0u)},
+ {33588, S_028A48_SCALE_LINE_WIDTH_PAD(~0u)},
+ {33609, S_028A48_ALTERNATE_RBS_PER_TILE(~0u)},
+ {33632, S_028A48_COARSE_TILE_STARTS_ON_EVEN_RB(~0u)},
+ /* 1892 */
+ {33662, S_028A4C_WALK_SIZE(~0u)},
+ {33672, S_028A4C_WALK_ALIGNMENT(~0u)},
+ {33687, S_028A4C_WALK_ALIGN8_PRIM_FITS_ST(~0u)},
+ {33712, S_028A4C_WALK_FENCE_ENABLE(~0u)},
+ {33730, S_028A4C_WALK_FENCE_SIZE(~0u)},
+ {33746, S_028A4C_SUPERTILE_WALK_ORDER_ENABLE(~0u)},
+ {33751, S_028A4C_TILE_WALK_ORDER_ENABLE(~0u)},
+ {33774, S_028A4C_TILE_COVER_DISABLE(~0u)},
+ {33793, S_028A4C_TILE_COVER_NO_SCISSOR(~0u)},
+ {33815, S_028A4C_ZMM_LINE_EXTENT(~0u)},
+ {33831, S_028A4C_ZMM_LINE_OFFSET(~0u)},
+ {33847, S_028A4C_ZMM_RECT_EXTENT(~0u)},
+ {33863, S_028A4C_KILL_PIX_POST_HI_Z(~0u)},
+ {33882, S_028A4C_KILL_PIX_POST_DETAIL_MASK(~0u)},
+ {33908, S_028A4C_PS_ITER_SAMPLE(~0u)},
+ {33923, S_028A4C_MULTI_SHADER_ENGINE_PRIM_DISCARD_ENABLE(~0u)},
+ {33963, S_028A4C_MULTI_GPU_SUPERTILE_ENABLE(~0u)},
+ {33990, S_028A4C_GPU_ID_OVERRIDE_ENABLE(~0u)},
+ {34013, S_028A4C_GPU_ID_OVERRIDE(~0u)},
+ {34029, S_028A4C_MULTI_GPU_PRIM_DISCARD_ENABLE(~0u)},
+ {34059, S_028A4C_FORCE_EOV_CNTDWN_ENABLE(~0u)},
+ {34083, S_028A4C_FORCE_EOV_REZ_ENABLE(~0u)},
+ {34104, S_028A4C_OUT_OF_ORDER_PRIMITIVE_ENABLE(~0u)},
+ {34134, S_028A4C_OUT_OF_ORDER_WATER_MARK(~0u)},
+ /* 1916 */
+ {34158, S_028A54_GS_PER_ES(~0u)},
+ /* 1917 */
+ {34168, S_028A58_ES_PER_GS(~0u)},
+ /* 1918 */
+ {34178, S_028A5C_GS_PER_VS(~0u)},
+ /* 1919 */
+ {669, S_028A60_OFFSET(~0u)},
+ /* 1920 */
+ {669, S_028A64_OFFSET(~0u)},
+ /* 1921 */
+ {669, S_028A68_OFFSET(~0u)},
+ /* 1922 */
+ {34256, S_028A6C_OUTPRIM_TYPE(~0u), 3, 1347},
+ {34269, S_028A6C_OUTPRIM_TYPE_1(~0u)},
+ {34284, S_028A6C_OUTPRIM_TYPE_2(~0u)},
+ {34299, S_028A6C_OUTPRIM_TYPE_3(~0u)},
+ {34314, S_028A6C_UNIQUE_TYPE_PER_STREAM(~0u)},
+ /* 1927 */
+ {203, S_028A7C_INDEX_TYPE(~0u), 3, 1350},
+ {34451, S_028A7C_SWAP_MODE(~0u), 4, 1353},
+ {34512, S_028A7C_BUF_TYPE(~0u), 3, 1357},
+ {34554, S_028A7C_RDREQ_POLICY_CIK(~0u), 2, 1360},
+ {34571, S_028A7C_RDREQ_POLICY(~0u)},
+ {9689, S_028A7C_ATC(~0u)},
+ {28723, S_028A7C_NOT_EOP(~0u)},
+ {34584, S_028A7C_REQ_PATH(~0u)},
+ {9710, S_028A7C_MTYPE(~0u)},
+ {8334, S_028A7C_PRIMGEN_EN(~0u)},
+ /* 1937 */
+ {34593, S_028A84_PRIMITIVEID_EN(~0u)},
+ {34608, S_028A84_DISABLE_RESET_ON_EOI(~0u)},
+ {34629, S_028A84_NGG_DISABLE_PROVOK_REUSE(~0u)},
+ /* 1940 */
+ {35689, S_028A90_EVENT_TYPE(~0u), 63, 1362},
+ {35700, S_028A90_ADDRESS_HI_GFX6(~0u)},
+ {35716, S_028A90_EXTENDED_EVENT(~0u)},
+ {35731, S_028A90_ADDRESS_HI_GFX9(~0u)},
+ /* 1944 */
+ {35747, S_028A94_RESET_EN(~0u)},
+ /* 1945 */
+ {35756, S_028AA8_PRIMGROUP_SIZE(~0u)},
+ {35771, S_028AA8_PARTIAL_VS_WAVE_ON(~0u)},
+ {35790, S_028AA8_SWITCH_ON_EOP(~0u)},
+ {35804, S_028AA8_PARTIAL_ES_WAVE_ON(~0u)},
+ {35823, S_028AA8_SWITCH_ON_EOI(~0u)},
+ {35837, S_028AA8_WD_SWITCH_ON_EOP(~0u)},
+ {35854, S_028AA8_MAX_PRIMGRP_IN_WAVE(~0u)},
+ /* 1952 */
+ {35874, S_028AAC_ITEMSIZE(~0u)},
+ /* 1953 */
+ {35874, S_028AB0_ITEMSIZE(~0u)},
+ /* 1954 */
+ {35883, S_028AB4_REUSE_OFF(~0u)},
+ /* 1955 */
+ {35893, S_028AB8_VTX_CNT_EN(~0u)},
+ /* 1956 */
+ {13808, S_028ABC_LINEAR(~0u)},
+ {35904, S_028ABC_FULL_CACHE(~0u)},
+ {35915, S_028ABC_HTILE_USES_PRELOAD_WIN(~0u)},
+ {35938, S_028ABC_PRELOAD(~0u)},
+ {35946, S_028ABC_PREFETCH_WIDTH(~0u)},
+ {35961, S_028ABC_PREFETCH_HEIGHT(~0u)},
+ {35977, S_028ABC_DST_OUTSIDE_ZERO_TO_ONE(~0u)},
+ {36001, S_028ABC_TC_COMPATIBLE(~0u)},
+ {13820, S_028ABC_PIPE_ALIGNED(~0u)},
+ {13838, S_028ABC_RB_ALIGNED(~0u)},
+ /* 1966 */
+ {36015, S_028AC0_COMPAREFUNC0(~0u), 8, 1012},
+ {36028, S_028AC0_COMPAREVALUE0(~0u)},
+ {36042, S_028AC0_COMPAREMASK0(~0u)},
+ {20738, S_028AC0_ENABLE0(~0u)},
+ /* 1970 */
+ {36055, S_028AC4_COMPAREFUNC1(~0u), 8, 1012},
+ {36068, S_028AC4_COMPAREVALUE1(~0u)},
+ {36082, S_028AC4_COMPAREMASK1(~0u)},
+ {20756, S_028AC4_ENABLE1(~0u)},
+ /* 1974 */
+ {36095, S_028AC8_START_X(~0u)},
+ {36103, S_028AC8_START_Y(~0u)},
+ {36111, S_028AC8_MAX_X(~0u)},
+ {36117, S_028AC8_MAX_Y(~0u)},
+ /* 1978 */
+ {8904, S_028AD4_STRIDE(~0u)},
+ /* 1979 */
+ {8904, S_028AE4_STRIDE(~0u)},
+ /* 1980 */
+ {8904, S_028AF4_STRIDE(~0u)},
+ /* 1981 */
+ {8904, S_028B04_STRIDE(~0u)},
+ /* 1982 */
+ {36123, S_028B30_VERTEX_STRIDE(~0u)},
+ /* 1983 */
+ {36137, S_028B38_MAX_VERT_OUT(~0u)},
+ /* 1984 */
+ {36150, S_028B50_ACCUM_ISOLINE(~0u)},
+ {36164, S_028B50_ACCUM_TRI(~0u)},
+ {36174, S_028B50_ACCUM_QUAD(~0u)},
+ {36185, S_028B50_DONUT_SPLIT(~0u)},
+ {36197, S_028B50_TRAP_SPLIT(~0u)},
+ /* 1989 */
+ {19897, S_028B54_LS_EN(~0u), 3, 1425},
+ {19891, S_028B54_HS_EN(~0u)},
+ {19885, S_028B54_ES_EN(~0u), 3, 1428},
+ {19879, S_028B54_GS_EN(~0u)},
+ {19873, S_028B54_VS_EN(~0u), 3, 1431},
+ {36331, S_028B54_DYNAMIC_HS(~0u)},
+ {18186, S_028B54_DISPATCH_DRAW_EN(~0u)},
+ {36342, S_028B54_DIS_DEALLOC_ACCUM_0(~0u)},
+ {36362, S_028B54_DIS_DEALLOC_ACCUM_1(~0u)},
+ {36382, S_028B54_VS_WAVE_ID_EN(~0u)},
+ {8334, S_028B54_PRIMGEN_EN(~0u)},
+ {36396, S_028B54_ORDERED_ID_MODE(~0u)},
+ {35854, S_028B54_MAX_PRIMGRP_IN_WAVE(~0u)},
+ {36412, S_028B54_GS_FAST_LAUNCH(~0u)},
+ /* 2003 */
+ {36427, S_028B58_NUM_PATCHES(~0u)},
+ {36439, S_028B58_HS_NUM_INPUT_CP(~0u)},
+ {36455, S_028B58_HS_NUM_OUTPUT_CP(~0u)},
+ /* 2006 */
+ {35874, S_028B5C_ITEMSIZE(~0u)},
+ /* 2007 */
+ {35874, S_028B60_ITEMSIZE(~0u)},
+ /* 2008 */
+ {35874, S_028B64_ITEMSIZE(~0u)},
+ /* 2009 */
+ {35874, S_028B68_ITEMSIZE(~0u)},
+ /* 2010 */
+ {209, S_028B6C_TYPE(~0u), 3, 1434},
+ {36561, S_028B6C_PARTITIONING(~0u), 4, 1437},
+ {36638, S_028B6C_TOPOLOGY(~0u), 4, 1441},
+ {36647, S_028B6C_RESERVED_REDUC_AXIS(~0u)},
+ {36667, S_028B6C_DEPRECATED(~0u)},
+ {36678, S_028B6C_NUM_DS_WAVES_PER_SIMD(~0u)},
+ {36700, S_028B6C_DISABLE_DONUTS(~0u)},
+ {34554, S_028B6C_RDREQ_POLICY_CIK(~0u), 3, 1445},
+ {34571, S_028B6C_RDREQ_POLICY(~0u)},
+ {36839, S_028B6C_DISTRIBUTION_MODE(~0u), 4, 1448},
+ {9710, S_028B6C_MTYPE(~0u)},
+ /* 2021 */
+ {36857, S_028B70_ALPHA_TO_MASK_ENABLE(~0u)},
+ {36878, S_028B70_ALPHA_TO_MASK_OFFSET0(~0u)},
+ {36900, S_028B70_ALPHA_TO_MASK_OFFSET1(~0u)},
+ {36922, S_028B70_ALPHA_TO_MASK_OFFSET2(~0u)},
+ {36944, S_028B70_ALPHA_TO_MASK_OFFSET3(~0u)},
+ {36966, S_028B70_OFFSET_ROUND(~0u)},
+ /* 2027 */
+ {36979, S_028B78_POLY_OFFSET_NEG_NUM_DB_BITS(~0u)},
+ {37007, S_028B78_POLY_OFFSET_DB_IS_FLOAT_FMT(~0u)},
+ /* 2029 */
+ {842, S_028B90_ENABLE(~0u)},
+ {18102, S_028B90_CNT(~0u)},
+ /* 2031 */
+ {37035, S_028B94_STREAMOUT_0_EN(~0u)},
+ {37050, S_028B94_STREAMOUT_1_EN(~0u)},
+ {37065, S_028B94_STREAMOUT_2_EN(~0u)},
+ {37080, S_028B94_STREAMOUT_3_EN(~0u)},
+ {37095, S_028B94_RAST_STREAM(~0u)},
+ {37107, S_028B94_RAST_STREAM_MASK(~0u)},
+ {37124, S_028B94_USE_RAST_STREAM_MASK(~0u)},
+ {37145, S_028B94_EN_PRIMS_NEEDED_CNT(~0u)},
+ /* 2039 */
+ {37165, S_028B98_STREAM_0_BUFFER_EN(~0u)},
+ {37184, S_028B98_STREAM_1_BUFFER_EN(~0u)},
+ {37203, S_028B98_STREAM_2_BUFFER_EN(~0u)},
+ {37222, S_028B98_STREAM_3_BUFFER_EN(~0u)},
+ /* 2043 */
+ {37241, S_028BD4_DISTANCE_0(~0u)},
+ {37252, S_028BD4_DISTANCE_1(~0u)},
+ {37263, S_028BD4_DISTANCE_2(~0u)},
+ {37274, S_028BD4_DISTANCE_3(~0u)},
+ {37285, S_028BD4_DISTANCE_4(~0u)},
+ {37296, S_028BD4_DISTANCE_5(~0u)},
+ {37307, S_028BD4_DISTANCE_6(~0u)},
+ {37318, S_028BD4_DISTANCE_7(~0u)},
+ /* 2051 */
+ {37329, S_028BD8_DISTANCE_8(~0u)},
+ {37340, S_028BD8_DISTANCE_9(~0u)},
+ {37351, S_028BD8_DISTANCE_10(~0u)},
+ {37363, S_028BD8_DISTANCE_11(~0u)},
+ {37375, S_028BD8_DISTANCE_12(~0u)},
+ {37387, S_028BD8_DISTANCE_13(~0u)},
+ {37399, S_028BD8_DISTANCE_14(~0u)},
+ {37411, S_028BD8_DISTANCE_15(~0u)},
+ /* 2059 */
+ {37423, S_028BDC_EXPAND_LINE_WIDTH(~0u)},
+ {37441, S_028BDC_LAST_PIXEL(~0u)},
+ {37452, S_028BDC_PERPENDICULAR_ENDCAP_ENA(~0u)},
+ {37477, S_028BDC_DX10_DIAMOND_TEST_ENA(~0u)},
+ /* 2063 */
+ {37499, S_028BE0_MSAA_NUM_SAMPLES(~0u)},
+ {37516, S_028BE0_AA_MASK_CENTROID_DTMN(~0u)},
+ {37538, S_028BE0_MAX_SAMPLE_DIST(~0u)},
+ {37554, S_028BE0_MSAA_EXPOSED_SAMPLES(~0u)},
+ {37575, S_028BE0_DETAIL_TO_EXPOSED_MODE(~0u)},
+ {37598, S_028BE0_COVERAGE_TO_SHADER_SELECT(~0u)},
+ /* 2069 */
+ {37624, S_028BE4_PIX_CENTER(~0u)},
+ {37685, S_028BE4_ROUND_MODE(~0u), 4, 1452},
+ {37901, S_028BE4_QUANT_MODE(~0u), 8, 1456},
+ /* 2072 */
+ {37912, S_028BF8_S0_X(~0u)},
+ {37917, S_028BF8_S0_Y(~0u)},
+ {37922, S_028BF8_S1_X(~0u)},
+ {37927, S_028BF8_S1_Y(~0u)},
+ {37932, S_028BF8_S2_X(~0u)},
+ {37937, S_028BF8_S2_Y(~0u)},
+ {37942, S_028BF8_S3_X(~0u)},
+ {37947, S_028BF8_S3_Y(~0u)},
+ /* 2080 */
+ {37952, S_028BFC_S4_X(~0u)},
+ {37957, S_028BFC_S4_Y(~0u)},
+ {37962, S_028BFC_S5_X(~0u)},
+ {37967, S_028BFC_S5_Y(~0u)},
+ {37972, S_028BFC_S6_X(~0u)},
+ {37977, S_028BFC_S6_Y(~0u)},
+ {37982, S_028BFC_S7_X(~0u)},
+ {37987, S_028BFC_S7_Y(~0u)},
+ /* 2088 */
+ {37992, S_028C00_S8_X(~0u)},
+ {37997, S_028C00_S8_Y(~0u)},
+ {38002, S_028C00_S9_X(~0u)},
+ {38007, S_028C00_S9_Y(~0u)},
+ {38012, S_028C00_S10_X(~0u)},
+ {38018, S_028C00_S10_Y(~0u)},
+ {38024, S_028C00_S11_X(~0u)},
+ {38030, S_028C00_S11_Y(~0u)},
+ /* 2096 */
+ {38036, S_028C04_S12_X(~0u)},
+ {38042, S_028C04_S12_Y(~0u)},
+ {38048, S_028C04_S13_X(~0u)},
+ {38054, S_028C04_S13_Y(~0u)},
+ {38060, S_028C04_S14_X(~0u)},
+ {38066, S_028C04_S14_Y(~0u)},
+ {38072, S_028C04_S15_X(~0u)},
+ {38078, S_028C04_S15_Y(~0u)},
+ /* 2104 */
+ {37912, S_028C08_S0_X(~0u)},
+ {37917, S_028C08_S0_Y(~0u)},
+ {37922, S_028C08_S1_X(~0u)},
+ {37927, S_028C08_S1_Y(~0u)},
+ {37932, S_028C08_S2_X(~0u)},
+ {37937, S_028C08_S2_Y(~0u)},
+ {37942, S_028C08_S3_X(~0u)},
+ {37947, S_028C08_S3_Y(~0u)},
+ /* 2112 */
+ {37952, S_028C0C_S4_X(~0u)},
+ {37957, S_028C0C_S4_Y(~0u)},
+ {37962, S_028C0C_S5_X(~0u)},
+ {37967, S_028C0C_S5_Y(~0u)},
+ {37972, S_028C0C_S6_X(~0u)},
+ {37977, S_028C0C_S6_Y(~0u)},
+ {37982, S_028C0C_S7_X(~0u)},
+ {37987, S_028C0C_S7_Y(~0u)},
+ /* 2120 */
+ {37992, S_028C10_S8_X(~0u)},
+ {37997, S_028C10_S8_Y(~0u)},
+ {38002, S_028C10_S9_X(~0u)},
+ {38007, S_028C10_S9_Y(~0u)},
+ {38012, S_028C10_S10_X(~0u)},
+ {38018, S_028C10_S10_Y(~0u)},
+ {38024, S_028C10_S11_X(~0u)},
+ {38030, S_028C10_S11_Y(~0u)},
+ /* 2128 */
+ {38036, S_028C14_S12_X(~0u)},
+ {38042, S_028C14_S12_Y(~0u)},
+ {38048, S_028C14_S13_X(~0u)},
+ {38054, S_028C14_S13_Y(~0u)},
+ {38060, S_028C14_S14_X(~0u)},
+ {38066, S_028C14_S14_Y(~0u)},
+ {38072, S_028C14_S15_X(~0u)},
+ {38078, S_028C14_S15_Y(~0u)},
+ /* 2136 */
+ {37912, S_028C18_S0_X(~0u)},
+ {37917, S_028C18_S0_Y(~0u)},
+ {37922, S_028C18_S1_X(~0u)},
+ {37927, S_028C18_S1_Y(~0u)},
+ {37932, S_028C18_S2_X(~0u)},
+ {37937, S_028C18_S2_Y(~0u)},
+ {37942, S_028C18_S3_X(~0u)},
+ {37947, S_028C18_S3_Y(~0u)},
+ /* 2144 */
+ {37952, S_028C1C_S4_X(~0u)},
+ {37957, S_028C1C_S4_Y(~0u)},
+ {37962, S_028C1C_S5_X(~0u)},
+ {37967, S_028C1C_S5_Y(~0u)},
+ {37972, S_028C1C_S6_X(~0u)},
+ {37977, S_028C1C_S6_Y(~0u)},
+ {37982, S_028C1C_S7_X(~0u)},
+ {37987, S_028C1C_S7_Y(~0u)},
+ /* 2152 */
+ {37992, S_028C20_S8_X(~0u)},
+ {37997, S_028C20_S8_Y(~0u)},
+ {38002, S_028C20_S9_X(~0u)},
+ {38007, S_028C20_S9_Y(~0u)},
+ {38012, S_028C20_S10_X(~0u)},
+ {38018, S_028C20_S10_Y(~0u)},
+ {38024, S_028C20_S11_X(~0u)},
+ {38030, S_028C20_S11_Y(~0u)},
+ /* 2160 */
+ {38036, S_028C24_S12_X(~0u)},
+ {38042, S_028C24_S12_Y(~0u)},
+ {38048, S_028C24_S13_X(~0u)},
+ {38054, S_028C24_S13_Y(~0u)},
+ {38060, S_028C24_S14_X(~0u)},
+ {38066, S_028C24_S14_Y(~0u)},
+ {38072, S_028C24_S15_X(~0u)},
+ {38078, S_028C24_S15_Y(~0u)},
+ /* 2168 */
+ {37912, S_028C28_S0_X(~0u)},
+ {37917, S_028C28_S0_Y(~0u)},
+ {37922, S_028C28_S1_X(~0u)},
+ {37927, S_028C28_S1_Y(~0u)},
+ {37932, S_028C28_S2_X(~0u)},
+ {37937, S_028C28_S2_Y(~0u)},
+ {37942, S_028C28_S3_X(~0u)},
+ {37947, S_028C28_S3_Y(~0u)},
+ /* 2176 */
+ {37952, S_028C2C_S4_X(~0u)},
+ {37957, S_028C2C_S4_Y(~0u)},
+ {37962, S_028C2C_S5_X(~0u)},
+ {37967, S_028C2C_S5_Y(~0u)},
+ {37972, S_028C2C_S6_X(~0u)},
+ {37977, S_028C2C_S6_Y(~0u)},
+ {37982, S_028C2C_S7_X(~0u)},
+ {37987, S_028C2C_S7_Y(~0u)},
+ /* 2184 */
+ {37992, S_028C30_S8_X(~0u)},
+ {37997, S_028C30_S8_Y(~0u)},
+ {38002, S_028C30_S9_X(~0u)},
+ {38007, S_028C30_S9_Y(~0u)},
+ {38012, S_028C30_S10_X(~0u)},
+ {38018, S_028C30_S10_Y(~0u)},
+ {38024, S_028C30_S11_X(~0u)},
+ {38030, S_028C30_S11_Y(~0u)},
+ /* 2192 */
+ {38036, S_028C34_S12_X(~0u)},
+ {38042, S_028C34_S12_Y(~0u)},
+ {38048, S_028C34_S13_X(~0u)},
+ {38054, S_028C34_S13_Y(~0u)},
+ {38060, S_028C34_S14_X(~0u)},
+ {38066, S_028C34_S14_Y(~0u)},
+ {38072, S_028C34_S15_X(~0u)},
+ {38078, S_028C34_S15_Y(~0u)},
+ /* 2200 */
+ {38084, S_028C38_AA_MASK_X0Y0(~0u)},
+ {38097, S_028C38_AA_MASK_X1Y0(~0u)},
+ /* 2202 */
+ {38110, S_028C3C_AA_MASK_X0Y1(~0u)},
+ {38123, S_028C3C_AA_MASK_X1Y1(~0u)},
+ /* 2204 */
+ {38136, S_028C40_REALIGN_DQUADS_AFTER_N_WAVES(~0u)},
+ {18019, S_028C40_LOAD_COLLISION_WAVEID(~0u)},
+ {18041, S_028C40_LOAD_INTRAWAVE_COLLISION(~0u)},
+ /* 2207 */
+ {38165, S_028C58_VTX_REUSE_DEPTH(~0u)},
+ /* 2208 */
+ {38181, S_028C5C_DEALLOC_DIST(~0u)},
+ /* 2209 */
+ {21993, S_028C64_TILE_MAX(~0u)},
+ {38194, S_028C64_FMASK_TILE_MAX(~0u)},
+ /* 2211 */
+ {21993, S_028C68_TILE_MAX(~0u)},
+ /* 2212 */
+ {20601, S_028C6C_SLICE_START(~0u)},
+ {20613, S_028C6C_SLICE_MAX(~0u)},
+ {38209, S_028C6C_MIP_LEVEL(~0u)},
+ /* 2215 */
+ {38270, S_028C70_ENDIAN(~0u), 4, 1464},
+ {9248, S_028C70_FORMAT(~0u), 23, 1468},
+ {16489, S_028C70_LINEAR_GENERAL(~0u)},
+ {38637, S_028C70_NUMBER_TYPE(~0u), 8, 1491},
+ {38693, S_028C70_COMP_SWAP(~0u), 4, 1499},
+ {29505, S_028C70_FAST_CLEAR(~0u)},
+ {21193, S_028C70_COMPRESSION(~0u)},
+ {38703, S_028C70_BLEND_CLAMP(~0u)},
+ {38715, S_028C70_BLEND_BYPASS(~0u)},
+ {38728, S_028C70_SIMPLE_FLOAT(~0u)},
+ {37685, S_028C70_ROUND_MODE(~0u)},
+ {38741, S_028C70_CMASK_IS_LINEAR(~0u)},
+ {38968, S_028C70_BLEND_OPT_DONT_RD_DST(~0u), 8, 1503},
+ {38990, S_028C70_BLEND_OPT_DISCARD_PIXEL(~0u), 8, 1503},
+ {39014, S_028C70_FMASK_COMPRESSION_DISABLE(~0u)},
+ {39040, S_028C70_FMASK_COMPRESS_1FRAG_ONLY(~0u)},
+ {39066, S_028C70_DCC_ENABLE(~0u)},
+ {39077, S_028C70_CMASK_ADDR_TYPE(~0u)},
+ /* 2233 */
+ {21821, S_028C74_TILE_MODE_INDEX(~0u)},
+ {39093, S_028C74_FMASK_TILE_MODE_INDEX(~0u)},
+ {39115, S_028C74_FMASK_BANK_HEIGHT(~0u)},
+ {21809, S_028C74_NUM_SAMPLES(~0u)},
+ {39133, S_028C74_NUM_FRAGMENTS(~0u)},
+ {39147, S_028C74_FORCE_DST_ALPHA_1(~0u)},
+ {39165, S_028C74_MIP0_DEPTH(~0u)},
+ {13803, S_028C74_META_LINEAR(~0u)},
+ {39176, S_028C74_COLOR_SW_MODE(~0u)},
+ {39190, S_028C74_FMASK_SW_MODE(~0u)},
+ {39204, S_028C74_RESOURCE_TYPE(~0u), 4, 1511},
+ {13838, S_028C74_RB_ALIGNED(~0u)},
+ {13820, S_028C74_PIPE_ALIGNED(~0u)},
+ /* 2246 */
+ {24465, S_028C78_OVERWRITE_COMBINER_DISABLE(~0u)},
+ {39218, S_028C78_KEY_CLEAR_ENABLE(~0u)},
+ {39235, S_028C78_MAX_UNCOMPRESSED_BLOCK_SIZE(~0u)},
+ {39263, S_028C78_MIN_COMPRESSED_BLOCK_SIZE(~0u)},
+ {39289, S_028C78_MAX_COMPRESSED_BLOCK_SIZE(~0u)},
+ {13932, S_028C78_COLOR_TRANSFORM(~0u)},
+ {39315, S_028C78_INDEPENDENT_64B_BLOCKS(~0u)},
+ {39338, S_028C78_LOSSY_RGB_PRECISION(~0u)},
+ {39358, S_028C78_LOSSY_ALPHA_PRECISION(~0u)},
+ /* 2255 */
+ {21993, S_028C80_TILE_MAX(~0u)},
+ /* 2256 */
+ {21993, S_028C88_TILE_MAX(~0u)},
+ /* 2257 */
+ {35747, S_03092C_RESET_EN(~0u)},
+ {39380, S_03092C_MATCH_ALL_BITS(~0u)},
+ /* 2259 */
+ {39395, S_030944_BASE_HI(~0u)},
+ /* 2260 */
+ {39395, S_03094C_BASE_HI(~0u)},
+ /* 2261 */
+ {39395, S_030954_BASE_HI(~0u)},
+ /* 2262 */
+ {39395, S_03095C_BASE_HI(~0u)},
+ /* 2263 */
+ {35756, S_030960_PRIMGROUP_SIZE(~0u)},
+ {35771, S_030960_PARTIAL_VS_WAVE_ON(~0u)},
+ {35790, S_030960_SWITCH_ON_EOP(~0u)},
+ {35804, S_030960_PARTIAL_ES_WAVE_ON(~0u)},
+ {35823, S_030960_SWITCH_ON_EOI(~0u)},
+ {35837, S_030960_WD_SWITCH_ON_EOP(~0u)},
+ {39403, S_030960_EN_INST_OPT_BASIC(~0u)},
+ {39421, S_030960_EN_INST_OPT_ADV(~0u)},
+ {39437, S_030960_HW_USE_ONLY(~0u)},
+ /* 2272 */
+ {39449, S_030D24_DWB(~0u)},
+ {21124, S_030D24_DIRTY(~0u)},
+ /* 2274 */
+ {39453, S_030E08_GRAD_ADJ_0(~0u)},
+ {39464, S_030E08_GRAD_ADJ_1(~0u)},
+ {39475, S_030E08_GRAD_ADJ_2(~0u)},
+ {39486, S_030E08_GRAD_ADJ_3(~0u)},
+ /* 2278 */
+ {15469, S_031100_GPR_WRITE_PRIORITY(~0u)},
+ {15488, S_031100_EXP_PRIORITY_ORDER(~0u)},
+ {15507, S_031100_ENABLE_SQG_TOP_EVENTS(~0u)},
+ {15529, S_031100_ENABLE_SQG_BOP_EVENTS(~0u)},
+ {15551, S_031100_RSRC_MGMT_RESET(~0u)},
+ {39497, S_031100_TTRACE_STALL_ALL(~0u)},
+ {39514, S_031100_ALLOC_ARB_LRU_ENA(~0u)},
+ {39532, S_031100_EXP_ARB_LRU_ENA(~0u)},
+ {39548, S_031100_PS_PKR_PRIORITY_CNTL(~0u)},
+ /* 2287 */
+ {15820, S_031104_VTX_DONE_DELAY(~0u)},
+ {15835, S_031104_INTERP_ONE_PRIM_PER_ROW(~0u)},
+ {39569, S_031104_BATON_RESET_DISABLE(~0u)},
+ {15859, S_031104_PC_LIMIT_ENABLE(~0u)},
+ {15875, S_031104_PC_LIMIT_STRICT(~0u)},
+ {39589, S_031104_CRC_SIMD_ID_WADDR_DISABLE(~0u)},
+ {39615, S_031104_LBPW_CU_CHK_MODE(~0u)},
+ {39632, S_031104_LBPW_CU_CHK_CNT(~0u)},
+ {39648, S_031104_CSC_PWR_SAVE_DISABLE(~0u)},
+ {39669, S_031104_CSG_PWR_SAVE_DISABLE(~0u)},
+ {15891, S_031104_PC_LIMIT_SIZE(~0u)},
+ /* 2298 */
+ {39690, S_031108_CONTEXT_SAVE_WAIT_GDS_REQUEST_CYCLE_OVHD(~0u)},
+ {39731, S_031108_CONTEXT_SAVE_WAIT_GDS_GRANT_CYCLE_OVHD(~0u)},
+ /* 2300 */
+ {17939, S_00B1F0_SCRATCH_EN(~0u)},
+ {17950, S_00B1F0_USER_SGPR(~0u)},
+ {17960, S_00B1F0_TRAP_PRESENT(~0u)},
+ {18011, S_00B1F0_EXCP_EN(~0u)},
+ {18092, S_00B1F0_VGPR_COMP_CNT(~0u)},
+ {18122, S_00B1F0_OC_LDS_EN(~0u)},
+ {17991, S_00B1F0_LDS_SIZE(~0u)},
+ {18066, S_00B1F0_SKIP_USGPR0(~0u)},
+ {18078, S_00B1F0_USER_SGPR_MSB(~0u)},
+ /* 2309 */
+ {18214, S_00B204_GROUP_FIFO_DEPTH(~0u)},
+ {39770, S_00B204_SPI_SHADER_LATE_ALLOC_GS(~0u)},
+ /* 2311 */
+ {17737, S_00B214_MEM_BASE(~0u)},
+ /* 2312 */
+ {18214, S_00B404_GROUP_FIFO_DEPTH(~0u)},
+ /* 2313 */
+ {17737, S_00B414_MEM_BASE(~0u)},
+ /* 2314 */
+ {391, S_00B83C_DATA(~0u)},
+ /* 2315 */
+ {391, S_00B844_DATA(~0u)},
+ /* 2316 */
+ {441, S_036028_INDEX(~0u)},
+ {14427, S_036028_ALWAYS(~0u)},
+ {842, S_036028_ENABLE(~0u)},
+ /* 2319 */
+ {441, S_03602C_INDEX(~0u)},
+ {14427, S_03602C_ALWAYS(~0u)},
+ {842, S_03602C_ENABLE(~0u)},
+ /* 2322 */
+ {441, S_036030_INDEX(~0u)},
+ {21631, S_036030_CLEAR(~0u)},
+ {842, S_036030_ENABLE(~0u)},
+ /* 2325 */
+ {441, S_036034_INDEX(~0u)},
+ {21631, S_036034_CLEAR(~0u)},
+ {842, S_036034_ENABLE(~0u)},
+ /* 2328 */
+ {441, S_036038_INDEX(~0u)},
+ {21631, S_036038_CLEAR(~0u)},
+ {842, S_036038_ENABLE(~0u)},
+ /* 2331 */
+ {39395, S_028018_BASE_HI(~0u)},
+ /* 2332 */
+ {39795, S_02801C_X_MAX(~0u)},
+ {39801, S_02801C_Y_MAX(~0u)},
+ /* 2334 */
+ {9248, S_028038_FORMAT(~0u)},
+ {21809, S_028038_NUM_SAMPLES(~0u)},
+ {13608, S_028038_SW_MODE(~0u)},
+ {39807, S_028038_PARTIALLY_RESIDENT(~0u)},
+ {39826, S_028038_FAULT_BEHAVIOR(~0u)},
+ {39841, S_028038_ITERATE_FLUSH(~0u)},
+ {39855, S_028038_MAXMIP(~0u)},
+ {21837, S_028038_DECOMPRESS_ON_N_ZPLANES(~0u)},
+ {21861, S_028038_ALLOW_EXPCLEAR(~0u)},
+ {21876, S_028038_READ_SIZE(~0u)},
+ {21886, S_028038_TILE_SURFACE_ENABLE(~0u)},
+ {21906, S_028038_CLEAR_DISALLOWED(~0u)},
+ {21923, S_028038_ZRANGE_PRECISION(~0u)},
+ /* 2347 */
+ {9248, S_02803C_FORMAT(~0u)},
+ {13608, S_02803C_SW_MODE(~0u)},
+ {39807, S_02803C_PARTIALLY_RESIDENT(~0u)},
+ {39826, S_02803C_FAULT_BEHAVIOR(~0u)},
+ {39841, S_02803C_ITERATE_FLUSH(~0u)},
+ {21861, S_02803C_ALLOW_EXPCLEAR(~0u)},
+ {21966, S_02803C_TILE_STENCIL_DISABLE(~0u)},
+ {21906, S_02803C_CLEAR_DISALLOWED(~0u)},
+ /* 2355 */
+ {39395, S_028044_BASE_HI(~0u)},
+ /* 2356 */
+ {39395, S_02804C_BASE_HI(~0u)},
+ /* 2357 */
+ {39395, S_028054_BASE_HI(~0u)},
+ /* 2358 */
+ {39395, S_02805C_BASE_HI(~0u)},
+ /* 2359 */
+ {39871, S_028060_PUNCHOUT_MODE(~0u), 4, 1515},
+ {39885, S_028060_POPS_DRAIN_PS_ON_OVERLAP(~0u)},
+ {39910, S_028060_DISALLOW_OVERFLOW(~0u)},
+ /* 2362 */
+ {39928, S_028064_PS_INVOKE_MASK(~0u)},
+ /* 2363 */
+ {39943, S_028068_EPITCH(~0u)},
+ /* 2364 */
+ {39943, S_02806C_EPITCH(~0u)},
+ /* 2365 */
+ {842, S_02835C_ENABLE(~0u)},
+ {39950, S_02835C_NUM_SE(~0u)},
+ {16326, S_02835C_NUM_RB_PER_SE(~0u)},
+ {39957, S_02835C_DISABLE_SRBSL_DB_OPTIMIZED_PACKING(~0u)},
+ /* 2369 */
+ {39992, S_028360_PERFMON_ENABLE(~0u)},
+ /* 2370 */
+ {40007, S_0283A0_LEFT_QTR(~0u)},
+ {40016, S_0283A0_LEFT_HALF(~0u)},
+ {40026, S_0283A0_RIGHT_HALF(~0u)},
+ {40037, S_0283A0_RIGHT_QTR(~0u)},
+ /* 2374 */
+ {40007, S_0283A4_LEFT_QTR(~0u)},
+ {40016, S_0283A4_LEFT_HALF(~0u)},
+ {40026, S_0283A4_RIGHT_HALF(~0u)},
+ {40037, S_0283A4_RIGHT_QTR(~0u)},
+ /* 2378 */
+ {40047, S_0283A8_TOP_QTR(~0u)},
+ {40055, S_0283A8_TOP_HALF(~0u)},
+ {40064, S_0283A8_BOT_HALF(~0u)},
+ {40073, S_0283A8_BOT_QTR(~0u)},
+ /* 2382 */
+ {40081, S_0283AC_LEFT_EYE_FOV_LEFT(~0u)},
+ {40099, S_0283AC_LEFT_EYE_FOV_RIGHT(~0u)},
+ {40118, S_0283AC_RIGHT_EYE_FOV_LEFT(~0u)},
+ {40137, S_0283AC_RIGHT_EYE_FOV_RIGHT(~0u)},
+ /* 2386 */
+ {40157, S_0283B0_FOV_TOP(~0u)},
+ {40165, S_0283B0_FOV_BOT(~0u)},
+ /* 2388 */
+ {39943, S_0287A0_EPITCH(~0u)},
+ /* 2389 */
+ {39943, S_0287A4_EPITCH(~0u)},
+ /* 2390 */
+ {39943, S_0287A8_EPITCH(~0u)},
+ /* 2391 */
+ {39943, S_0287AC_EPITCH(~0u)},
+ /* 2392 */
+ {39943, S_0287B0_EPITCH(~0u)},
+ /* 2393 */
+ {39943, S_0287B4_EPITCH(~0u)},
+ /* 2394 */
+ {39943, S_0287B8_EPITCH(~0u)},
+ /* 2395 */
+ {39943, S_0287BC_EPITCH(~0u)},
+ /* 2396 */
+ {40173, S_028834_OBJ_ID_SEL(~0u)},
+ {40184, S_028834_ADD_PIPED_PRIM_ID(~0u)},
+ {40202, S_028834_EN_32BIT_OBJPRIMID(~0u)},
+ /* 2399 */
+ {40221, S_028838_VERTEX_REUSE_OFF(~0u)},
+ {40238, S_028838_INDEX_BUF_EDGE_FLAG_ENA(~0u)},
+ /* 2401 */
+ {40262, S_02883C_DISCARD_0_AREA_TRIANGLES(~0u)},
+ {40287, S_02883C_DISCARD_0_AREA_LINES(~0u)},
+ {40308, S_02883C_DISCARD_0_AREA_POINTS(~0u)},
+ {40330, S_02883C_DISCARD_0_AREA_RECTANGLES(~0u)},
+ {40356, S_02883C_USE_PROVOKING_ZW(~0u)},
+ /* 2406 */
+ {40373, S_028A94_MAX_PRIMS_PER_SUBGROUP(~0u)},
+ /* 2407 */
+ {40396, S_028A98_OBJPRIM_ID_EN(~0u)},
+ {40410, S_028A98_EN_REG_RT_INDEX(~0u)},
+ {40426, S_028A98_EN_PIPELINE_PRIMID(~0u)},
+ {40445, S_028A98_OBJECT_ID_INST_EN(~0u)},
+ /* 2411 */
+ {40463, S_028A9C_COMPOUND_INDEX_EN(~0u)},
+ /* 2412 */
+ {35689, S_028B9C_EVENT_TYPE(~0u)},
+ {8893, S_028B9C_ADDRESS_HI(~0u)},
+ {35716, S_028B9C_EXTENDED_EVENT(~0u)},
+ /* 2415 */
+ {40571, S_028C44_BINNING_MODE(~0u), 4, 1519},
+ {40584, S_028C44_BIN_SIZE_X(~0u)},
+ {40595, S_028C44_BIN_SIZE_Y(~0u)},
+ {40606, S_028C44_BIN_SIZE_X_EXTEND(~0u)},
+ {40624, S_028C44_BIN_SIZE_Y_EXTEND(~0u)},
+ {40642, S_028C44_CONTEXT_STATES_PER_BIN(~0u)},
+ {40665, S_028C44_PERSISTENT_STATES_PER_BIN(~0u)},
+ {40691, S_028C44_DISABLE_START_OF_PRIM(~0u)},
+ {40713, S_028C44_FPOVS_PER_BATCH(~0u)},
+ {40729, S_028C44_OPTIMAL_BIN_SELECTION(~0u)},
+ /* 2425 */
+ {40751, S_028C48_MAX_ALLOC_COUNT(~0u)},
+ {40767, S_028C48_MAX_PRIM_PER_BATCH(~0u)},
+ /* 2427 */
+ {40786, S_028C4C_OVER_RAST_ENABLE(~0u)},
+ {40803, S_028C4C_OVER_RAST_SAMPLE_SELECT(~0u)},
+ {40827, S_028C4C_UNDER_RAST_ENABLE(~0u)},
+ {40845, S_028C4C_UNDER_RAST_SAMPLE_SELECT(~0u)},
+ {40870, S_028C4C_PBB_UNCERTAINTY_REGION_ENABLE(~0u)},
+ {40900, S_028C4C_ZMM_TRI_EXTENT(~0u)},
+ {40915, S_028C4C_ZMM_TRI_OFFSET(~0u)},
+ {40930, S_028C4C_OVERRIDE_OVER_RAST_INNER_TO_NORMAL(~0u)},
+ {40965, S_028C4C_OVERRIDE_UNDER_RAST_INNER_TO_NORMAL(~0u)},
+ {41001, S_028C4C_DEGENERATE_OVERRIDE_INNER_TO_NORMAL_DISABLE(~0u)},
+ {41045, S_028C4C_UNCERTAINTY_REGION_MODE(~0u)},
+ {41069, S_028C4C_OUTER_UNCERTAINTY_EDGERULE_OVERRIDE(~0u)},
+ {41105, S_028C4C_INNER_UNCERTAINTY_EDGERULE_OVERRIDE(~0u)},
+ {41141, S_028C4C_NULL_SQUAD_AA_MASK_ENABLE(~0u)},
+ {41167, S_028C4C_COVERAGE_AA_MASK_ENABLE(~0u)},
+ {41191, S_028C4C_PREZ_AA_MASK_ENABLE(~0u)},
+ {41211, S_028C4C_POSTZ_AA_MASK_ENABLE(~0u)},
+ {41232, S_028C4C_CENTROID_SAMPLE_OVERRIDE(~0u)},
+ /* 2445 */
+ {41257, S_028C50_MAX_DEALLOCS_IN_WAVE(~0u)},
+ /* 2446 */
+ {41278, S_028C64_BASE_256B(~0u)},
+ /* 2447 */
+ {41288, S_028C68_MIP0_HEIGHT(~0u)},
+ {41300, S_028C68_MIP0_WIDTH(~0u)},
+ {13849, S_028C68_MAX_MIP(~0u)},
+ /* 2450 */
+ {41278, S_028C80_BASE_256B(~0u)},
+ /* 2451 */
+ {41278, S_028C88_BASE_256B(~0u)},
+ /* 2452 */
+ {41278, S_028C98_BASE_256B(~0u)},
+};
+
+static const struct si_reg sid_reg_table[] = {
+ {41311, R_2C3_DRAW_INDEX_LOC, 2, 0},
+ {195, R_370_CONTROL, 4, 2},
+ {1111, R_371_DST_ADDR_LO},
+ {1123, R_372_DST_ADDR_HI},
+ {41326, R_3F0_IB_BASE_LO},
+ {41337, R_3F1_IB_BASE_HI},
+ {195, R_3F2_CONTROL, 3, 6},
+ {41348, R_410_CP_DMA_WORD0, 1, 9},
+ {41361, R_411_CP_DMA_WORD1, 5, 10},
+ {41374, R_412_CP_DMA_WORD2, 1, 15},
+ {41387, R_413_CP_DMA_WORD3, 1, 16},
+ {41400, R_414_COMMAND, 11, 17},
+ {41408, R_500_DMA_DATA_WORD0, 4, 28},
+ {1000, R_501_SRC_ADDR_LO},
+ {1099, R_502_SRC_ADDR_HI},
+ {1111, R_503_DST_ADDR_LO},
+ {1123, R_504_DST_ADDR_HI},
+ {41423, R_000E4C_SRBM_STATUS2, 21, 32},
+ {41436, R_000E50_SRBM_STATUS, 20, 53},
+ {41448, R_000E54_SRBM_STATUS3, 16, 73},
+ {41461, R_00D034_SDMA0_STATUS_REG, 29, 89},
+ {41478, R_00D834_SDMA1_STATUS_REG, 29, 89},
+ {41495, R_008008_GRBM_STATUS2, 25, 118},
+ {41508, R_008010_GRBM_STATUS, 25, 143},
+ {41520, R_0084FC_CP_STRMOUT_CNTL, 1, 168},
+ {41536, R_0085F0_CP_COHER_CNTL, 19, 169},
+ {41550, R_0085F4_CP_COHER_SIZE},
+ {41564, R_0085F8_CP_COHER_BASE},
+ {41578, R_008014_GRBM_STATUS_SE0, 12, 188},
+ {41594, R_008018_GRBM_STATUS_SE1, 12, 200},
+ {41610, R_008038_GRBM_STATUS_SE2, 12, 212},
+ {41626, R_00803C_GRBM_STATUS_SE3, 12, 224},
+ {41520, R_0300FC_CP_STRMOUT_CNTL, 1, 236},
+ {41642, R_0301E4_CP_COHER_BASE_HI, 1, 237},
+ {41659, R_0301EC_CP_COHER_START_DELAY, 1, 238},
+ {41536, R_0301F0_CP_COHER_CNTL, 29, 239},
+ {41550, R_0301F4_CP_COHER_SIZE},
+ {41564, R_0301F8_CP_COHER_BASE},
+ {41680, R_0301FC_CP_COHER_STATUS, 4, 268},
+ {41696, R_008210_CP_CPC_STATUS, 17, 272},
+ {41710, R_008214_CP_CPC_BUSY_STAT, 28, 289},
+ {41727, R_008218_CP_CPC_STALLED_STAT1, 17, 317},
+ {41748, R_00821C_CP_CPF_STATUS, 22, 334},
+ {41762, R_008220_CP_CPF_BUSY_STAT, 31, 356},
+ {41779, R_008224_CP_CPF_STALLED_STAT1, 14, 387},
+ {41800, R_030230_CP_COHER_SIZE_HI, 1, 401},
+ {41817, R_0088B0_VGT_VTX_VECT_EJECT_REG, 1, 402},
+ {41840, R_0088C4_VGT_CACHE_INVALIDATION, 3, 403},
+ {41863, R_0088C8_VGT_ESGS_RING_SIZE},
+ {41882, R_0088CC_VGT_GSVS_RING_SIZE},
+ {41901, R_0088D4_VGT_GS_VERTEX_REUSE, 1, 406},
+ {41921, R_008958_VGT_PRIMITIVE_TYPE, 1, 407},
+ {41940, R_00895C_VGT_INDEX_TYPE, 1, 408},
+ {41955, R_008960_VGT_STRMOUT_BUFFER_FILLED_SIZE_0},
+ {41988, R_008964_VGT_STRMOUT_BUFFER_FILLED_SIZE_1},
+ {42021, R_008968_VGT_STRMOUT_BUFFER_FILLED_SIZE_2},
+ {42054, R_00896C_VGT_STRMOUT_BUFFER_FILLED_SIZE_3},
+ {42087, R_008970_VGT_NUM_INDICES},
+ {42103, R_008974_VGT_NUM_INSTANCES},
+ {42121, R_008988_VGT_TF_RING_SIZE, 1, 409},
+ {42138, R_0089B0_VGT_HS_OFFCHIP_PARAM, 1, 410},
+ {42159, R_0089B8_VGT_TF_MEMORY_BASE},
+ {42178, R_008A14_PA_CL_ENHANCE, 4, 411},
+ {42192, R_008A60_PA_SU_LINE_STIPPLE_VALUE, 1, 415},
+ {42217, R_008B10_PA_SC_LINE_STIPPLE_STATE, 2, 416},
+ {42242, R_008670_CP_STALLED_STAT3, 22, 418},
+ {42259, R_008674_CP_STALLED_STAT1, 16, 440},
+ {42276, R_008678_CP_STALLED_STAT2, 29, 456},
+ {42293, R_008680_CP_STAT, 24, 485},
+ {42301, R_030800_GRBM_GFX_INDEX, 6, 509},
+ {41863, R_030900_VGT_ESGS_RING_SIZE},
+ {41882, R_030904_VGT_GSVS_RING_SIZE},
+ {41921, R_030908_VGT_PRIMITIVE_TYPE, 1, 515},
+ {41940, R_03090C_VGT_INDEX_TYPE, 2, 516},
+ {41955, R_030910_VGT_STRMOUT_BUFFER_FILLED_SIZE_0},
+ {41988, R_030914_VGT_STRMOUT_BUFFER_FILLED_SIZE_1},
+ {42021, R_030918_VGT_STRMOUT_BUFFER_FILLED_SIZE_2},
+ {42054, R_03091C_VGT_STRMOUT_BUFFER_FILLED_SIZE_3},
+ {42087, R_030930_VGT_NUM_INDICES},
+ {42103, R_030934_VGT_NUM_INSTANCES},
+ {42121, R_030938_VGT_TF_RING_SIZE, 1, 518},
+ {42138, R_03093C_VGT_HS_OFFCHIP_PARAM, 2, 519},
+ {42159, R_030940_VGT_TF_MEMORY_BASE},
+ {42192, R_030A00_PA_SU_LINE_STIPPLE_VALUE, 1, 521},
+ {42217, R_030A04_PA_SC_LINE_STIPPLE_STATE, 2, 522},
+ {42316, R_030A10_PA_SC_SCREEN_EXTENT_MIN_0, 2, 524},
+ {42342, R_030A14_PA_SC_SCREEN_EXTENT_MAX_0, 2, 526},
+ {42368, R_030A18_PA_SC_SCREEN_EXTENT_MIN_1, 2, 528},
+ {42394, R_030A2C_PA_SC_SCREEN_EXTENT_MAX_1, 2, 530},
+ {42420, R_008BF0_PA_SC_ENHANCE, 9, 532},
+ {42434, R_008C08_SQC_CACHES, 2, 541},
+ {42434, R_030D20_SQC_CACHES, 9, 543},
+ {42445, R_008C0C_SQ_RANDOM_WAVE_PRI, 3, 552},
+ {42464, R_008DFC_SQ_EXP_0, 6, 555},
+ {42473, R_030E00_TA_CS_BC_BASE_ADDR},
+ {42492, R_030E04_TA_CS_BC_BASE_ADDR_HI, 1, 561},
+ {42514, R_030F00_DB_OCCLUSION_COUNT0_LOW},
+ {42538, R_008F00_SQ_BUF_RSRC_WORD0},
+ {42556, R_030F04_DB_OCCLUSION_COUNT0_HI, 1, 562},
+ {42579, R_008F04_SQ_BUF_RSRC_WORD1, 4, 563},
+ {42597, R_030F08_DB_OCCLUSION_COUNT1_LOW},
+ {42621, R_008F08_SQ_BUF_RSRC_WORD2},
+ {42639, R_030F0C_DB_OCCLUSION_COUNT1_HI, 1, 567},
+ {42662, R_008F0C_SQ_BUF_RSRC_WORD3, 17, 568},
+ {42680, R_030F10_DB_OCCLUSION_COUNT2_LOW},
+ {42704, R_008F10_SQ_IMG_RSRC_WORD0},
+ {42722, R_030F14_DB_OCCLUSION_COUNT2_HI, 1, 585},
+ {42745, R_008F14_SQ_IMG_RSRC_WORD1, 12, 586},
+ {42763, R_030F18_DB_OCCLUSION_COUNT3_LOW},
+ {42787, R_008F18_SQ_IMG_RSRC_WORD2, 4, 598},
+ {42805, R_030F1C_DB_OCCLUSION_COUNT3_HI, 1, 602},
+ {42828, R_008F1C_SQ_IMG_RSRC_WORD3, 12, 603},
+ {42846, R_008F20_SQ_IMG_RSRC_WORD4, 4, 615},
+ {42864, R_008F24_SQ_IMG_RSRC_WORD5, 8, 619},
+ {42882, R_008F28_SQ_IMG_RSRC_WORD6, 8, 627},
+ {42900, R_008F2C_SQ_IMG_RSRC_WORD7},
+ {42918, R_008F30_SQ_IMG_SAMP_WORD0, 14, 635},
+ {42936, R_008F34_SQ_IMG_SAMP_WORD1, 4, 649},
+ {42954, R_008F38_SQ_IMG_SAMP_WORD2, 11, 653},
+ {42972, R_008F3C_SQ_IMG_SAMP_WORD3, 4, 664},
+ {42990, R_0090DC_SPI_DYN_GPR_LOCK_EN, 5, 668},
+ {43010, R_0090E0_SPI_STATIC_THREAD_MGMT_1, 2, 673},
+ {43035, R_0090E4_SPI_STATIC_THREAD_MGMT_2, 2, 675},
+ {43060, R_0090E8_SPI_STATIC_THREAD_MGMT_3, 1, 677},
+ {43085, R_0090EC_SPI_PS_MAX_WAVE_ID, 1, 678},
+ {43085, R_0090E8_SPI_PS_MAX_WAVE_ID, 1, 679},
+ {43104, R_0090F0_SPI_ARB_PRIORITY, 3, 680},
+ {43104, R_00C700_SPI_ARB_PRIORITY, 8, 683},
+ {43121, R_0090F4_SPI_ARB_CYCLES_0, 2, 691},
+ {43138, R_0090F8_SPI_ARB_CYCLES_1, 1, 693},
+ {43155, R_008F40_SQ_FLAT_SCRATCH_WORD0, 1, 694},
+ {43177, R_008F44_SQ_FLAT_SCRATCH_WORD1, 1, 695},
+ {43199, R_030FF8_DB_ZPASS_COUNT_LOW},
+ {43218, R_030FFC_DB_ZPASS_COUNT_HI, 1, 696},
+ {43236, R_009100_SPI_CONFIG_CNTL, 5, 697},
+ {43252, R_00913C_SPI_CONFIG_CNTL_1, 5, 702},
+ {43270, R_00936C_SPI_RESOURCE_RESERVE_CU_AB_0, 12, 707},
+ {42473, R_00950C_TA_CS_BC_BASE_ADDR},
+ {43299, R_009858_DB_SUBTILE_CONTROL, 10, 719},
+ {43318, R_0098F8_GB_ADDR_CONFIG, 16, 729},
+ {43333, R_009910_GB_TILE_MODE0, 10, 745},
+ {43347, R_009914_GB_TILE_MODE1, 10, 745},
+ {43361, R_009918_GB_TILE_MODE2, 10, 745},
+ {43375, R_00991C_GB_TILE_MODE3, 10, 745},
+ {43389, R_009920_GB_TILE_MODE4, 10, 745},
+ {43403, R_009924_GB_TILE_MODE5, 10, 745},
+ {43417, R_009928_GB_TILE_MODE6, 10, 745},
+ {43431, R_00992C_GB_TILE_MODE7, 10, 745},
+ {43445, R_009930_GB_TILE_MODE8, 10, 745},
+ {43459, R_009934_GB_TILE_MODE9, 10, 745},
+ {43473, R_009938_GB_TILE_MODE10, 10, 745},
+ {43488, R_00993C_GB_TILE_MODE11, 10, 745},
+ {43503, R_009940_GB_TILE_MODE12, 10, 745},
+ {43518, R_009944_GB_TILE_MODE13, 10, 745},
+ {43533, R_009948_GB_TILE_MODE14, 10, 745},
+ {43548, R_00994C_GB_TILE_MODE15, 10, 745},
+ {43563, R_009950_GB_TILE_MODE16, 10, 745},
+ {43578, R_009954_GB_TILE_MODE17, 10, 745},
+ {43593, R_009958_GB_TILE_MODE18, 10, 745},
+ {43608, R_00995C_GB_TILE_MODE19, 10, 745},
+ {43623, R_009960_GB_TILE_MODE20, 10, 745},
+ {43638, R_009964_GB_TILE_MODE21, 10, 745},
+ {43653, R_009968_GB_TILE_MODE22, 10, 745},
+ {43668, R_00996C_GB_TILE_MODE23, 10, 745},
+ {43683, R_009970_GB_TILE_MODE24, 10, 745},
+ {43698, R_009974_GB_TILE_MODE25, 10, 745},
+ {43713, R_009978_GB_TILE_MODE26, 10, 745},
+ {43728, R_00997C_GB_TILE_MODE27, 10, 745},
+ {43743, R_009980_GB_TILE_MODE28, 10, 745},
+ {43758, R_009984_GB_TILE_MODE29, 10, 745},
+ {43773, R_009988_GB_TILE_MODE30, 10, 745},
+ {43788, R_00998C_GB_TILE_MODE31, 10, 745},
+ {43803, R_009990_GB_MACROTILE_MODE0, 4, 755},
+ {43822, R_009994_GB_MACROTILE_MODE1, 4, 755},
+ {43841, R_009998_GB_MACROTILE_MODE2, 4, 755},
+ {43860, R_00999C_GB_MACROTILE_MODE3, 4, 755},
+ {43879, R_0099A0_GB_MACROTILE_MODE4, 4, 755},
+ {43898, R_0099A4_GB_MACROTILE_MODE5, 4, 755},
+ {43917, R_0099A8_GB_MACROTILE_MODE6, 4, 755},
+ {43936, R_0099AC_GB_MACROTILE_MODE7, 4, 755},
+ {43955, R_0099B0_GB_MACROTILE_MODE8, 4, 755},
+ {43974, R_0099B4_GB_MACROTILE_MODE9, 4, 755},
+ {43993, R_0099B8_GB_MACROTILE_MODE10, 4, 755},
+ {44013, R_0099BC_GB_MACROTILE_MODE11, 4, 755},
+ {44033, R_0099C0_GB_MACROTILE_MODE12, 4, 755},
+ {44053, R_0099C4_GB_MACROTILE_MODE13, 4, 755},
+ {44073, R_0099C8_GB_MACROTILE_MODE14, 4, 755},
+ {44093, R_0099CC_GB_MACROTILE_MODE15, 4, 755},
+ {44113, R_00B000_SPI_SHADER_TBA_LO_PS},
+ {44134, R_00B004_SPI_SHADER_TBA_HI_PS, 1, 759},
+ {44155, R_00B008_SPI_SHADER_TMA_LO_PS},
+ {44176, R_00B00C_SPI_SHADER_TMA_HI_PS, 1, 760},
+ {44197, R_00B01C_SPI_SHADER_PGM_RSRC3_PS, 4, 761},
+ {44221, R_00B020_SPI_SHADER_PGM_LO_PS},
+ {44242, R_00B024_SPI_SHADER_PGM_HI_PS, 1, 765},
+ {44263, R_00B028_SPI_SHADER_PGM_RSRC1_PS, 12, 766},
+ {44287, R_00B02C_SPI_SHADER_PGM_RSRC2_PS, 11, 778},
+ {44311, R_00B030_SPI_SHADER_USER_DATA_PS_0},
+ {44337, R_00B034_SPI_SHADER_USER_DATA_PS_1},
+ {44363, R_00B038_SPI_SHADER_USER_DATA_PS_2},
+ {44389, R_00B03C_SPI_SHADER_USER_DATA_PS_3},
+ {44415, R_00B040_SPI_SHADER_USER_DATA_PS_4},
+ {44441, R_00B044_SPI_SHADER_USER_DATA_PS_5},
+ {44467, R_00B048_SPI_SHADER_USER_DATA_PS_6},
+ {44493, R_00B04C_SPI_SHADER_USER_DATA_PS_7},
+ {44519, R_00B050_SPI_SHADER_USER_DATA_PS_8},
+ {44545, R_00B054_SPI_SHADER_USER_DATA_PS_9},
+ {44571, R_00B058_SPI_SHADER_USER_DATA_PS_10},
+ {44598, R_00B05C_SPI_SHADER_USER_DATA_PS_11},
+ {44625, R_00B060_SPI_SHADER_USER_DATA_PS_12},
+ {44652, R_00B064_SPI_SHADER_USER_DATA_PS_13},
+ {44679, R_00B068_SPI_SHADER_USER_DATA_PS_14},
+ {44706, R_00B06C_SPI_SHADER_USER_DATA_PS_15},
+ {44733, R_00B100_SPI_SHADER_TBA_LO_VS},
+ {44754, R_00B104_SPI_SHADER_TBA_HI_VS, 1, 789},
+ {44775, R_00B108_SPI_SHADER_TMA_LO_VS},
+ {44796, R_00B10C_SPI_SHADER_TMA_HI_VS, 1, 790},
+ {44817, R_00B118_SPI_SHADER_PGM_RSRC3_VS, 4, 791},
+ {44841, R_00B11C_SPI_SHADER_LATE_ALLOC_VS, 1, 795},
+ {44866, R_00B120_SPI_SHADER_PGM_LO_VS},
+ {44887, R_00B124_SPI_SHADER_PGM_HI_VS, 1, 796},
+ {44908, R_00B128_SPI_SHADER_PGM_RSRC1_VS, 13, 797},
+ {44932, R_00B12C_SPI_SHADER_PGM_RSRC2_VS, 15, 810},
+ {44956, R_00B130_SPI_SHADER_USER_DATA_VS_0},
+ {44982, R_00B134_SPI_SHADER_USER_DATA_VS_1},
+ {45008, R_00B138_SPI_SHADER_USER_DATA_VS_2},
+ {45034, R_00B13C_SPI_SHADER_USER_DATA_VS_3},
+ {45060, R_00B140_SPI_SHADER_USER_DATA_VS_4},
+ {45086, R_00B144_SPI_SHADER_USER_DATA_VS_5},
+ {45112, R_00B148_SPI_SHADER_USER_DATA_VS_6},
+ {45138, R_00B14C_SPI_SHADER_USER_DATA_VS_7},
+ {45164, R_00B150_SPI_SHADER_USER_DATA_VS_8},
+ {45190, R_00B154_SPI_SHADER_USER_DATA_VS_9},
+ {45216, R_00B158_SPI_SHADER_USER_DATA_VS_10},
+ {45243, R_00B15C_SPI_SHADER_USER_DATA_VS_11},
+ {45270, R_00B160_SPI_SHADER_USER_DATA_VS_12},
+ {45297, R_00B164_SPI_SHADER_USER_DATA_VS_13},
+ {45324, R_00B168_SPI_SHADER_USER_DATA_VS_14},
+ {45351, R_00B16C_SPI_SHADER_USER_DATA_VS_15},
+ {45378, R_00B200_SPI_SHADER_TBA_LO_GS},
+ {45399, R_00B204_SPI_SHADER_TBA_HI_GS, 1, 825},
+ {45420, R_00B208_SPI_SHADER_TMA_LO_GS},
+ {45441, R_00B20C_SPI_SHADER_TMA_HI_GS, 1, 826},
+ {45462, R_00B21C_SPI_SHADER_PGM_RSRC3_GS, 5, 827},
+ {45486, R_00B220_SPI_SHADER_PGM_LO_GS},
+ {45507, R_00B224_SPI_SHADER_PGM_HI_GS, 1, 832},
+ {45528, R_00B228_SPI_SHADER_PGM_RSRC1_GS, 13, 833},
+ {45552, R_00B22C_SPI_SHADER_PGM_RSRC2_GS, 10, 846},
+ {45576, R_00B230_SPI_SHADER_USER_DATA_GS_0},
+ {45602, R_00B234_SPI_SHADER_USER_DATA_GS_1},
+ {45628, R_00B238_SPI_SHADER_USER_DATA_GS_2},
+ {45654, R_00B23C_SPI_SHADER_USER_DATA_GS_3},
+ {45680, R_00B240_SPI_SHADER_USER_DATA_GS_4},
+ {45706, R_00B244_SPI_SHADER_USER_DATA_GS_5},
+ {45732, R_00B248_SPI_SHADER_USER_DATA_GS_6},
+ {45758, R_00B24C_SPI_SHADER_USER_DATA_GS_7},
+ {45784, R_00B250_SPI_SHADER_USER_DATA_GS_8},
+ {45810, R_00B254_SPI_SHADER_USER_DATA_GS_9},
+ {45836, R_00B258_SPI_SHADER_USER_DATA_GS_10},
+ {45863, R_00B25C_SPI_SHADER_USER_DATA_GS_11},
+ {45890, R_00B260_SPI_SHADER_USER_DATA_GS_12},
+ {45917, R_00B264_SPI_SHADER_USER_DATA_GS_13},
+ {45944, R_00B268_SPI_SHADER_USER_DATA_GS_14},
+ {45971, R_00B26C_SPI_SHADER_USER_DATA_GS_15},
+ {45998, R_00B300_SPI_SHADER_TBA_LO_ES},
+ {46019, R_00B304_SPI_SHADER_TBA_HI_ES, 1, 856},
+ {46040, R_00B308_SPI_SHADER_TMA_LO_ES},
+ {46061, R_00B30C_SPI_SHADER_TMA_HI_ES, 1, 857},
+ {46082, R_00B31C_SPI_SHADER_PGM_RSRC3_ES, 4, 858},
+ {46106, R_00B320_SPI_SHADER_PGM_LO_ES},
+ {46127, R_00B324_SPI_SHADER_PGM_HI_ES, 1, 862},
+ {46148, R_00B328_SPI_SHADER_PGM_RSRC1_ES, 12, 863},
+ {46172, R_00B32C_SPI_SHADER_PGM_RSRC2_ES, 7, 875},
+ {46196, R_00B330_SPI_SHADER_USER_DATA_ES_0},
+ {46222, R_00B334_SPI_SHADER_USER_DATA_ES_1},
+ {46248, R_00B338_SPI_SHADER_USER_DATA_ES_2},
+ {46274, R_00B33C_SPI_SHADER_USER_DATA_ES_3},
+ {46300, R_00B340_SPI_SHADER_USER_DATA_ES_4},
+ {46326, R_00B344_SPI_SHADER_USER_DATA_ES_5},
+ {46352, R_00B348_SPI_SHADER_USER_DATA_ES_6},
+ {46378, R_00B34C_SPI_SHADER_USER_DATA_ES_7},
+ {46404, R_00B350_SPI_SHADER_USER_DATA_ES_8},
+ {46430, R_00B354_SPI_SHADER_USER_DATA_ES_9},
+ {46456, R_00B358_SPI_SHADER_USER_DATA_ES_10},
+ {46483, R_00B35C_SPI_SHADER_USER_DATA_ES_11},
+ {46510, R_00B360_SPI_SHADER_USER_DATA_ES_12},
+ {46537, R_00B364_SPI_SHADER_USER_DATA_ES_13},
+ {46564, R_00B368_SPI_SHADER_USER_DATA_ES_14},
+ {46591, R_00B36C_SPI_SHADER_USER_DATA_ES_15},
+ {46618, R_00B400_SPI_SHADER_TBA_LO_HS},
+ {46639, R_00B404_SPI_SHADER_TBA_HI_HS, 1, 882},
+ {46660, R_00B408_SPI_SHADER_TMA_LO_HS},
+ {46681, R_00B40C_SPI_SHADER_TMA_HI_HS, 1, 883},
+ {46702, R_00B41C_SPI_SHADER_PGM_RSRC3_HS, 5, 884},
+ {46726, R_00B420_SPI_SHADER_PGM_LO_HS},
+ {46747, R_00B424_SPI_SHADER_PGM_HI_HS, 1, 889},
+ {46768, R_00B428_SPI_SHADER_PGM_RSRC1_HS, 12, 890},
+ {46792, R_00B42C_SPI_SHADER_PGM_RSRC2_HS, 11, 902},
+ {46816, R_00B430_SPI_SHADER_USER_DATA_HS_0},
+ {46842, R_00B434_SPI_SHADER_USER_DATA_HS_1},
+ {46868, R_00B438_SPI_SHADER_USER_DATA_HS_2},
+ {46894, R_00B43C_SPI_SHADER_USER_DATA_HS_3},
+ {46920, R_00B440_SPI_SHADER_USER_DATA_HS_4},
+ {46946, R_00B444_SPI_SHADER_USER_DATA_HS_5},
+ {46972, R_00B448_SPI_SHADER_USER_DATA_HS_6},
+ {46998, R_00B44C_SPI_SHADER_USER_DATA_HS_7},
+ {47024, R_00B450_SPI_SHADER_USER_DATA_HS_8},
+ {47050, R_00B454_SPI_SHADER_USER_DATA_HS_9},
+ {47076, R_00B458_SPI_SHADER_USER_DATA_HS_10},
+ {47103, R_00B45C_SPI_SHADER_USER_DATA_HS_11},
+ {47130, R_00B460_SPI_SHADER_USER_DATA_HS_12},
+ {47157, R_00B464_SPI_SHADER_USER_DATA_HS_13},
+ {47184, R_00B468_SPI_SHADER_USER_DATA_HS_14},
+ {47211, R_00B46C_SPI_SHADER_USER_DATA_HS_15},
+ {47238, R_00B500_SPI_SHADER_TBA_LO_LS},
+ {47259, R_00B504_SPI_SHADER_TBA_HI_LS, 1, 913},
+ {47280, R_00B508_SPI_SHADER_TMA_LO_LS},
+ {47301, R_00B50C_SPI_SHADER_TMA_HI_LS, 1, 914},
+ {47322, R_00B51C_SPI_SHADER_PGM_RSRC3_LS, 4, 915},
+ {47346, R_00B520_SPI_SHADER_PGM_LO_LS},
+ {47367, R_00B524_SPI_SHADER_PGM_HI_LS, 1, 919},
+ {47388, R_00B528_SPI_SHADER_PGM_RSRC1_LS, 11, 920},
+ {47412, R_00B52C_SPI_SHADER_PGM_RSRC2_LS, 6, 931},
+ {47436, R_00B530_SPI_SHADER_USER_DATA_LS_0},
+ {47462, R_00B534_SPI_SHADER_USER_DATA_LS_1},
+ {47488, R_00B538_SPI_SHADER_USER_DATA_LS_2},
+ {47514, R_00B53C_SPI_SHADER_USER_DATA_LS_3},
+ {47540, R_00B540_SPI_SHADER_USER_DATA_LS_4},
+ {47566, R_00B544_SPI_SHADER_USER_DATA_LS_5},
+ {47592, R_00B548_SPI_SHADER_USER_DATA_LS_6},
+ {47618, R_00B54C_SPI_SHADER_USER_DATA_LS_7},
+ {47644, R_00B550_SPI_SHADER_USER_DATA_LS_8},
+ {47670, R_00B554_SPI_SHADER_USER_DATA_LS_9},
+ {47696, R_00B558_SPI_SHADER_USER_DATA_LS_10},
+ {47723, R_00B55C_SPI_SHADER_USER_DATA_LS_11},
+ {47750, R_00B560_SPI_SHADER_USER_DATA_LS_12},
+ {47777, R_00B564_SPI_SHADER_USER_DATA_LS_13},
+ {47804, R_00B568_SPI_SHADER_USER_DATA_LS_14},
+ {47831, R_00B56C_SPI_SHADER_USER_DATA_LS_15},
+ {47858, R_00B800_COMPUTE_DISPATCH_INITIATOR, 13, 937},
+ {47885, R_00B804_COMPUTE_DIM_X},
+ {47899, R_00B808_COMPUTE_DIM_Y},
+ {47913, R_00B80C_COMPUTE_DIM_Z},
+ {47927, R_00B810_COMPUTE_START_X},
+ {47943, R_00B814_COMPUTE_START_Y},
+ {47959, R_00B818_COMPUTE_START_Z},
+ {47975, R_00B81C_COMPUTE_NUM_THREAD_X, 2, 950},
+ {47996, R_00B820_COMPUTE_NUM_THREAD_Y, 2, 952},
+ {48017, R_00B824_COMPUTE_NUM_THREAD_Z, 2, 954},
+ {48038, R_00B82C_COMPUTE_MAX_WAVE_ID, 1, 956},
+ {48058, R_00B828_COMPUTE_PIPELINESTAT_ENABLE, 1, 957},
+ {48086, R_00B82C_COMPUTE_PERFCOUNT_ENABLE, 1, 958},
+ {48111, R_00B830_COMPUTE_PGM_LO},
+ {48126, R_00B834_COMPUTE_PGM_HI, 2, 959},
+ {48141, R_00B838_COMPUTE_TBA_LO},
+ {48156, R_00B83C_COMPUTE_TBA_HI, 1, 961},
+ {48171, R_00B840_COMPUTE_TMA_LO},
+ {48186, R_00B844_COMPUTE_TMA_HI, 1, 962},
+ {48201, R_00B848_COMPUTE_PGM_RSRC1, 11, 963},
+ {48219, R_00B84C_COMPUTE_PGM_RSRC2, 12, 974},
+ {48237, R_00B850_COMPUTE_VMID, 1, 986},
+ {48250, R_00B854_COMPUTE_RESOURCE_LIMITS, 8, 987},
+ {48274, R_00B858_COMPUTE_STATIC_THREAD_MGMT_SE0, 2, 995},
+ {48305, R_00B85C_COMPUTE_STATIC_THREAD_MGMT_SE1, 2, 997},
+ {48336, R_00B860_COMPUTE_TMPRING_SIZE, 2, 999},
+ {48357, R_00B864_COMPUTE_STATIC_THREAD_MGMT_SE2, 2, 1001},
+ {48388, R_00B868_COMPUTE_STATIC_THREAD_MGMT_SE3, 2, 1003},
+ {48419, R_00B86C_COMPUTE_RESTART_X},
+ {48437, R_00B870_COMPUTE_RESTART_Y},
+ {48455, R_00B874_COMPUTE_RESTART_Z},
+ {48473, R_00B87C_COMPUTE_MISC_RESERVED, 5, 1005},
+ {48495, R_00B880_COMPUTE_DISPATCH_ID},
+ {48515, R_00B884_COMPUTE_THREADGROUP_ID},
+ {48538, R_00B888_COMPUTE_RELAUNCH, 3, 1010},
+ {48555, R_00B88C_COMPUTE_WAVE_RESTORE_ADDR_LO},
+ {48584, R_00B890_COMPUTE_WAVE_RESTORE_ADDR_HI, 1, 1013},
+ {48613, R_00B894_COMPUTE_WAVE_RESTORE_CONTROL, 2, 1014},
+ {48642, R_00B900_COMPUTE_USER_DATA_0},
+ {48662, R_00B904_COMPUTE_USER_DATA_1},
+ {48682, R_00B908_COMPUTE_USER_DATA_2},
+ {48702, R_00B90C_COMPUTE_USER_DATA_3},
+ {48722, R_00B910_COMPUTE_USER_DATA_4},
+ {48742, R_00B914_COMPUTE_USER_DATA_5},
+ {48762, R_00B918_COMPUTE_USER_DATA_6},
+ {48782, R_00B91C_COMPUTE_USER_DATA_7},
+ {48802, R_00B920_COMPUTE_USER_DATA_8},
+ {48822, R_00B924_COMPUTE_USER_DATA_9},
+ {48842, R_00B928_COMPUTE_USER_DATA_10},
+ {48863, R_00B92C_COMPUTE_USER_DATA_11},
+ {48884, R_00B930_COMPUTE_USER_DATA_12},
+ {48905, R_00B934_COMPUTE_USER_DATA_13},
+ {48926, R_00B938_COMPUTE_USER_DATA_14},
+ {48947, R_00B93C_COMPUTE_USER_DATA_15},
+ {48968, R_00B9FC_COMPUTE_NOWHERE},
+ {48984, R_034000_CPG_PERFCOUNTER1_LO},
+ {49004, R_034004_CPG_PERFCOUNTER1_HI},
+ {49024, R_034008_CPG_PERFCOUNTER0_LO},
+ {49044, R_03400C_CPG_PERFCOUNTER0_HI},
+ {49064, R_034010_CPC_PERFCOUNTER1_LO},
+ {49084, R_034014_CPC_PERFCOUNTER1_HI},
+ {49104, R_034018_CPC_PERFCOUNTER0_LO},
+ {49124, R_03401C_CPC_PERFCOUNTER0_HI},
+ {49144, R_034020_CPF_PERFCOUNTER1_LO},
+ {49164, R_034024_CPF_PERFCOUNTER1_HI},
+ {49184, R_034028_CPF_PERFCOUNTER0_LO},
+ {49204, R_03402C_CPF_PERFCOUNTER0_HI},
+ {49224, R_034100_GRBM_PERFCOUNTER0_LO},
+ {49245, R_034104_GRBM_PERFCOUNTER0_HI},
+ {49266, R_03410C_GRBM_PERFCOUNTER1_LO},
+ {49287, R_034110_GRBM_PERFCOUNTER1_HI},
+ {49308, R_034114_GRBM_SE0_PERFCOUNTER_LO},
+ {49332, R_034118_GRBM_SE0_PERFCOUNTER_HI},
+ {49356, R_03411C_GRBM_SE1_PERFCOUNTER_LO},
+ {49380, R_034120_GRBM_SE1_PERFCOUNTER_HI},
+ {49404, R_034124_GRBM_SE2_PERFCOUNTER_LO},
+ {49428, R_034128_GRBM_SE2_PERFCOUNTER_HI},
+ {49452, R_03412C_GRBM_SE3_PERFCOUNTER_LO},
+ {49476, R_034130_GRBM_SE3_PERFCOUNTER_HI},
+ {49500, R_034200_WD_PERFCOUNTER0_LO},
+ {49519, R_034204_WD_PERFCOUNTER0_HI},
+ {49538, R_034208_WD_PERFCOUNTER1_LO},
+ {49557, R_03420C_WD_PERFCOUNTER1_HI},
+ {49576, R_034210_WD_PERFCOUNTER2_LO},
+ {49595, R_034214_WD_PERFCOUNTER2_HI},
+ {49614, R_034218_WD_PERFCOUNTER3_LO},
+ {49633, R_03421C_WD_PERFCOUNTER3_HI},
+ {49652, R_034220_IA_PERFCOUNTER0_LO},
+ {49671, R_034224_IA_PERFCOUNTER0_HI},
+ {49690, R_034228_IA_PERFCOUNTER1_LO},
+ {49709, R_03422C_IA_PERFCOUNTER1_HI},
+ {49728, R_034230_IA_PERFCOUNTER2_LO},
+ {49747, R_034234_IA_PERFCOUNTER2_HI},
+ {49766, R_034238_IA_PERFCOUNTER3_LO},
+ {49785, R_03423C_IA_PERFCOUNTER3_HI},
+ {49804, R_034240_VGT_PERFCOUNTER0_LO},
+ {49824, R_034244_VGT_PERFCOUNTER0_HI},
+ {49844, R_034248_VGT_PERFCOUNTER1_LO},
+ {49864, R_03424C_VGT_PERFCOUNTER1_HI},
+ {49884, R_034250_VGT_PERFCOUNTER2_LO},
+ {49904, R_034254_VGT_PERFCOUNTER2_HI},
+ {49924, R_034258_VGT_PERFCOUNTER3_LO},
+ {49944, R_03425C_VGT_PERFCOUNTER3_HI},
+ {49964, R_034400_PA_SU_PERFCOUNTER0_LO},
+ {49986, R_034404_PA_SU_PERFCOUNTER0_HI, 1, 1016},
+ {50008, R_034408_PA_SU_PERFCOUNTER1_LO},
+ {50030, R_03440C_PA_SU_PERFCOUNTER1_HI, 1, 1016},
+ {50052, R_034410_PA_SU_PERFCOUNTER2_LO},
+ {50074, R_034414_PA_SU_PERFCOUNTER2_HI, 1, 1016},
+ {50096, R_034418_PA_SU_PERFCOUNTER3_LO},
+ {50118, R_03441C_PA_SU_PERFCOUNTER3_HI, 1, 1016},
+ {50140, R_034500_PA_SC_PERFCOUNTER0_LO},
+ {50162, R_034504_PA_SC_PERFCOUNTER0_HI},
+ {50184, R_034508_PA_SC_PERFCOUNTER1_LO},
+ {50206, R_03450C_PA_SC_PERFCOUNTER1_HI},
+ {50228, R_034510_PA_SC_PERFCOUNTER2_LO},
+ {50250, R_034514_PA_SC_PERFCOUNTER2_HI},
+ {50272, R_034518_PA_SC_PERFCOUNTER3_LO},
+ {50294, R_03451C_PA_SC_PERFCOUNTER3_HI},
+ {50316, R_034520_PA_SC_PERFCOUNTER4_LO},
+ {50338, R_034524_PA_SC_PERFCOUNTER4_HI},
+ {50360, R_034528_PA_SC_PERFCOUNTER5_LO},
+ {50382, R_03452C_PA_SC_PERFCOUNTER5_HI},
+ {50404, R_034530_PA_SC_PERFCOUNTER6_LO},
+ {50426, R_034534_PA_SC_PERFCOUNTER6_HI},
+ {50448, R_034538_PA_SC_PERFCOUNTER7_LO},
+ {50470, R_03453C_PA_SC_PERFCOUNTER7_HI},
+ {50492, R_034600_SPI_PERFCOUNTER0_HI},
+ {50512, R_034604_SPI_PERFCOUNTER0_LO},
+ {50532, R_034608_SPI_PERFCOUNTER1_HI},
+ {50552, R_03460C_SPI_PERFCOUNTER1_LO},
+ {50572, R_034610_SPI_PERFCOUNTER2_HI},
+ {50592, R_034614_SPI_PERFCOUNTER2_LO},
+ {50612, R_034618_SPI_PERFCOUNTER3_HI},
+ {50632, R_03461C_SPI_PERFCOUNTER3_LO},
+ {50652, R_034620_SPI_PERFCOUNTER4_HI},
+ {50672, R_034624_SPI_PERFCOUNTER4_LO},
+ {50692, R_034628_SPI_PERFCOUNTER5_HI},
+ {50712, R_03462C_SPI_PERFCOUNTER5_LO},
+ {50732, R_034700_SQ_PERFCOUNTER0_LO},
+ {50751, R_034704_SQ_PERFCOUNTER0_HI},
+ {50770, R_034708_SQ_PERFCOUNTER1_LO},
+ {50789, R_03470C_SQ_PERFCOUNTER1_HI},
+ {50808, R_034710_SQ_PERFCOUNTER2_LO},
+ {50827, R_034714_SQ_PERFCOUNTER2_HI},
+ {50846, R_034718_SQ_PERFCOUNTER3_LO},
+ {50865, R_03471C_SQ_PERFCOUNTER3_HI},
+ {50884, R_034720_SQ_PERFCOUNTER4_LO},
+ {50903, R_034724_SQ_PERFCOUNTER4_HI},
+ {50922, R_034728_SQ_PERFCOUNTER5_LO},
+ {50941, R_03472C_SQ_PERFCOUNTER5_HI},
+ {50960, R_034730_SQ_PERFCOUNTER6_LO},
+ {50979, R_034734_SQ_PERFCOUNTER6_HI},
+ {50998, R_034738_SQ_PERFCOUNTER7_LO},
+ {51017, R_03473C_SQ_PERFCOUNTER7_HI},
+ {51036, R_034740_SQ_PERFCOUNTER8_LO},
+ {51055, R_034744_SQ_PERFCOUNTER8_HI},
+ {51074, R_034748_SQ_PERFCOUNTER9_LO},
+ {51093, R_03474C_SQ_PERFCOUNTER9_HI},
+ {51112, R_034750_SQ_PERFCOUNTER10_LO},
+ {51132, R_034754_SQ_PERFCOUNTER10_HI},
+ {51152, R_034758_SQ_PERFCOUNTER11_LO},
+ {51172, R_03475C_SQ_PERFCOUNTER11_HI},
+ {51192, R_034760_SQ_PERFCOUNTER12_LO},
+ {51212, R_034764_SQ_PERFCOUNTER12_HI},
+ {51232, R_034768_SQ_PERFCOUNTER13_LO},
+ {51252, R_03476C_SQ_PERFCOUNTER13_HI},
+ {51272, R_034770_SQ_PERFCOUNTER14_LO},
+ {51292, R_034774_SQ_PERFCOUNTER14_HI},
+ {51312, R_034778_SQ_PERFCOUNTER15_LO},
+ {51332, R_03477C_SQ_PERFCOUNTER15_HI},
+ {51352, R_034900_SX_PERFCOUNTER0_LO},
+ {51371, R_034904_SX_PERFCOUNTER0_HI},
+ {51390, R_034908_SX_PERFCOUNTER1_LO},
+ {51409, R_03490C_SX_PERFCOUNTER1_HI},
+ {51428, R_034910_SX_PERFCOUNTER2_LO},
+ {51447, R_034914_SX_PERFCOUNTER2_HI},
+ {51466, R_034918_SX_PERFCOUNTER3_LO},
+ {51485, R_03491C_SX_PERFCOUNTER3_HI},
+ {51504, R_034A00_GDS_PERFCOUNTER0_LO},
+ {51524, R_034A04_GDS_PERFCOUNTER0_HI},
+ {51544, R_034A08_GDS_PERFCOUNTER1_LO},
+ {51564, R_034A0C_GDS_PERFCOUNTER1_HI},
+ {51584, R_034A10_GDS_PERFCOUNTER2_LO},
+ {51604, R_034A14_GDS_PERFCOUNTER2_HI},
+ {51624, R_034A18_GDS_PERFCOUNTER3_LO},
+ {51644, R_034A1C_GDS_PERFCOUNTER3_HI},
+ {51664, R_034B00_TA_PERFCOUNTER0_LO},
+ {51683, R_034B04_TA_PERFCOUNTER0_HI},
+ {51702, R_034B08_TA_PERFCOUNTER1_LO},
+ {51721, R_034B0C_TA_PERFCOUNTER1_HI},
+ {51740, R_034C00_TD_PERFCOUNTER0_LO},
+ {51759, R_034C04_TD_PERFCOUNTER0_HI},
+ {51778, R_034C08_TD_PERFCOUNTER1_LO},
+ {51797, R_034C0C_TD_PERFCOUNTER1_HI},
+ {51816, R_034D00_TCP_PERFCOUNTER0_LO},
+ {51836, R_034D04_TCP_PERFCOUNTER0_HI},
+ {51856, R_034D08_TCP_PERFCOUNTER1_LO},
+ {51876, R_034D0C_TCP_PERFCOUNTER1_HI},
+ {51896, R_034D10_TCP_PERFCOUNTER2_LO},
+ {51916, R_034D14_TCP_PERFCOUNTER2_HI},
+ {51936, R_034D18_TCP_PERFCOUNTER3_LO},
+ {51956, R_034D1C_TCP_PERFCOUNTER3_HI},
+ {51976, R_034E00_TCC_PERFCOUNTER0_LO},
+ {51996, R_034E04_TCC_PERFCOUNTER0_HI},
+ {52016, R_034E08_TCC_PERFCOUNTER1_LO},
+ {52036, R_034E0C_TCC_PERFCOUNTER1_HI},
+ {52056, R_034E10_TCC_PERFCOUNTER2_LO},
+ {52076, R_034E14_TCC_PERFCOUNTER2_HI},
+ {52096, R_034E18_TCC_PERFCOUNTER3_LO},
+ {52116, R_034E1C_TCC_PERFCOUNTER3_HI},
+ {52136, R_034E40_TCA_PERFCOUNTER0_LO},
+ {52156, R_034E44_TCA_PERFCOUNTER0_HI},
+ {52176, R_034E48_TCA_PERFCOUNTER1_LO},
+ {52196, R_034E4C_TCA_PERFCOUNTER1_HI},
+ {52216, R_034E50_TCA_PERFCOUNTER2_LO},
+ {52236, R_034E54_TCA_PERFCOUNTER2_HI},
+ {52256, R_034E58_TCA_PERFCOUNTER3_LO},
+ {52276, R_034E5C_TCA_PERFCOUNTER3_HI},
+ {52296, R_035018_CB_PERFCOUNTER0_LO},
+ {52315, R_03501C_CB_PERFCOUNTER0_HI},
+ {52334, R_035020_CB_PERFCOUNTER1_LO},
+ {52353, R_035024_CB_PERFCOUNTER1_HI},
+ {52372, R_035028_CB_PERFCOUNTER2_LO},
+ {52391, R_03502C_CB_PERFCOUNTER2_HI},
+ {52410, R_035030_CB_PERFCOUNTER3_LO},
+ {52429, R_035034_CB_PERFCOUNTER3_HI},
+ {52448, R_035100_DB_PERFCOUNTER0_LO},
+ {52467, R_035104_DB_PERFCOUNTER0_HI},
+ {52486, R_035108_DB_PERFCOUNTER1_LO},
+ {52505, R_03510C_DB_PERFCOUNTER1_HI},
+ {52524, R_035110_DB_PERFCOUNTER2_LO},
+ {52543, R_035114_DB_PERFCOUNTER2_HI},
+ {52562, R_035118_DB_PERFCOUNTER3_LO},
+ {52581, R_03511C_DB_PERFCOUNTER3_HI},
+ {52600, R_035200_RLC_PERFCOUNTER0_LO},
+ {52620, R_035204_RLC_PERFCOUNTER0_HI},
+ {52640, R_035208_RLC_PERFCOUNTER1_LO},
+ {52660, R_03520C_RLC_PERFCOUNTER1_HI},
+ {52680, R_036000_CPG_PERFCOUNTER1_SELECT, 8, 1023},
+ {52704, R_036004_CPG_PERFCOUNTER0_SELECT1, 6, 1017},
+ {52729, R_036008_CPG_PERFCOUNTER0_SELECT, 8, 1023},
+ {52753, R_03600C_CPC_PERFCOUNTER1_SELECT, 8, 1055},
+ {52777, R_036010_CPC_PERFCOUNTER0_SELECT1, 6, 1031},
+ {52802, R_036014_CPF_PERFCOUNTER1_SELECT, 8, 1043},
+ {52826, R_036018_CPF_PERFCOUNTER0_SELECT1, 6, 1037},
+ {52851, R_03601C_CPF_PERFCOUNTER0_SELECT, 8, 1043},
+ {52875, R_036020_CP_PERFMON_CNTL, 4, 1051},
+ {52891, R_036024_CPC_PERFCOUNTER0_SELECT, 8, 1055},
+ {52915, R_036100_GRBM_PERFCOUNTER0_SELECT, 22, 1063},
+ {52940, R_036104_GRBM_PERFCOUNTER1_SELECT, 22, 1063},
+ {52965, R_036108_GRBM_SE0_PERFCOUNTER_SELECT, 13, 1085},
+ {52993, R_03610C_GRBM_SE1_PERFCOUNTER_SELECT, 13, 1098},
+ {53021, R_036110_GRBM_SE2_PERFCOUNTER_SELECT, 13, 1111},
+ {53049, R_036114_GRBM_SE3_PERFCOUNTER_SELECT, 13, 1124},
+ {53077, R_036200_WD_PERFCOUNTER0_SELECT, 2, 1137},
+ {53100, R_036204_WD_PERFCOUNTER1_SELECT, 2, 1137},
+ {53123, R_036208_WD_PERFCOUNTER2_SELECT, 2, 1137},
+ {53146, R_03620C_WD_PERFCOUNTER3_SELECT, 2, 1137},
+ {53169, R_036210_IA_PERFCOUNTER0_SELECT, 5, 1139},
+ {53192, R_036214_IA_PERFCOUNTER1_SELECT, 5, 1139},
+ {53215, R_036218_IA_PERFCOUNTER2_SELECT, 5, 1139},
+ {53238, R_03621C_IA_PERFCOUNTER3_SELECT, 5, 1139},
+ {53261, R_036220_IA_PERFCOUNTER0_SELECT1, 4, 1144},
+ {53285, R_036230_VGT_PERFCOUNTER0_SELECT, 5, 1148},
+ {53309, R_036234_VGT_PERFCOUNTER1_SELECT, 5, 1148},
+ {53333, R_036238_VGT_PERFCOUNTER2_SELECT, 5, 1148},
+ {53357, R_03623C_VGT_PERFCOUNTER3_SELECT, 5, 1148},
+ {53381, R_036240_VGT_PERFCOUNTER0_SELECT1, 4, 1153},
+ {53406, R_036244_VGT_PERFCOUNTER1_SELECT1},
+ {53431, R_036250_VGT_PERFCOUNTER_SEID_MASK, 1, 1157},
+ {53457, R_036400_PA_SU_PERFCOUNTER0_SELECT, 3, 1158},
+ {53483, R_036404_PA_SU_PERFCOUNTER0_SELECT1, 2, 1161},
+ {53510, R_036408_PA_SU_PERFCOUNTER1_SELECT, 3, 1158},
+ {53536, R_03640C_PA_SU_PERFCOUNTER1_SELECT1},
+ {53563, R_036410_PA_SU_PERFCOUNTER2_SELECT, 3, 1158},
+ {53589, R_036414_PA_SU_PERFCOUNTER3_SELECT, 3, 1158},
+ {53615, R_036500_PA_SC_PERFCOUNTER0_SELECT, 3, 1163},
+ {53641, R_036504_PA_SC_PERFCOUNTER0_SELECT1, 2, 1166},
+ {53668, R_036508_PA_SC_PERFCOUNTER1_SELECT, 3, 1163},
+ {53694, R_03650C_PA_SC_PERFCOUNTER2_SELECT, 3, 1163},
+ {53720, R_036510_PA_SC_PERFCOUNTER3_SELECT, 3, 1163},
+ {53746, R_036514_PA_SC_PERFCOUNTER4_SELECT, 3, 1163},
+ {53772, R_036518_PA_SC_PERFCOUNTER5_SELECT, 3, 1163},
+ {53798, R_03651C_PA_SC_PERFCOUNTER6_SELECT, 3, 1163},
+ {53824, R_036520_PA_SC_PERFCOUNTER7_SELECT, 3, 1163},
+ {53850, R_036600_SPI_PERFCOUNTER0_SELECT, 5, 1168},
+ {53874, R_036604_SPI_PERFCOUNTER1_SELECT, 5, 1168},
+ {53898, R_036608_SPI_PERFCOUNTER2_SELECT, 5, 1168},
+ {53922, R_03660C_SPI_PERFCOUNTER3_SELECT, 5, 1168},
+ {53946, R_036610_SPI_PERFCOUNTER0_SELECT1, 4, 1173},
+ {53971, R_036614_SPI_PERFCOUNTER1_SELECT1},
+ {53996, R_036618_SPI_PERFCOUNTER2_SELECT1},
+ {54021, R_03661C_SPI_PERFCOUNTER3_SELECT1},
+ {54046, R_036620_SPI_PERFCOUNTER4_SELECT, 5, 1168},
+ {54070, R_036624_SPI_PERFCOUNTER5_SELECT, 5, 1168},
+ {54094, R_036628_SPI_PERFCOUNTER_BINS, 8, 1177},
+ {54115, R_036700_SQ_PERFCOUNTER0_SELECT, 6, 1185},
+ {54138, R_036704_SQ_PERFCOUNTER1_SELECT, 6, 1185},
+ {54161, R_036708_SQ_PERFCOUNTER2_SELECT, 6, 1185},
+ {54184, R_03670C_SQ_PERFCOUNTER3_SELECT, 6, 1185},
+ {54207, R_036710_SQ_PERFCOUNTER4_SELECT, 6, 1185},
+ {54230, R_036714_SQ_PERFCOUNTER5_SELECT, 6, 1185},
+ {54253, R_036718_SQ_PERFCOUNTER6_SELECT, 6, 1185},
+ {54276, R_03671C_SQ_PERFCOUNTER7_SELECT, 6, 1185},
+ {54299, R_036720_SQ_PERFCOUNTER8_SELECT, 6, 1185},
+ {54322, R_036724_SQ_PERFCOUNTER9_SELECT, 6, 1185},
+ {54345, R_036728_SQ_PERFCOUNTER10_SELECT, 6, 1185},
+ {54369, R_03672C_SQ_PERFCOUNTER11_SELECT, 6, 1185},
+ {54393, R_036730_SQ_PERFCOUNTER12_SELECT, 6, 1185},
+ {54417, R_036734_SQ_PERFCOUNTER13_SELECT, 6, 1185},
+ {54441, R_036738_SQ_PERFCOUNTER14_SELECT, 6, 1185},
+ {54465, R_03673C_SQ_PERFCOUNTER15_SELECT, 6, 1185},
+ {54489, R_036780_SQ_PERFCOUNTER_CTRL, 9, 1191},
+ {54509, R_036784_SQ_PERFCOUNTER_MASK, 2, 1200},
+ {54529, R_036788_SQ_PERFCOUNTER_CTRL2, 1, 1202},
+ {54550, R_036900_SX_PERFCOUNTER0_SELECT, 3, 1203},
+ {54573, R_036904_SX_PERFCOUNTER1_SELECT, 3, 1203},
+ {54596, R_036908_SX_PERFCOUNTER2_SELECT, 3, 1203},
+ {54619, R_03690C_SX_PERFCOUNTER3_SELECT, 3, 1203},
+ {54642, R_036910_SX_PERFCOUNTER0_SELECT1, 2, 1206},
+ {54666, R_036914_SX_PERFCOUNTER1_SELECT1},
+ {54690, R_036A00_GDS_PERFCOUNTER0_SELECT, 3, 1208},
+ {54714, R_036A04_GDS_PERFCOUNTER1_SELECT, 3, 1208},
+ {54738, R_036A08_GDS_PERFCOUNTER2_SELECT, 3, 1208},
+ {54762, R_036A0C_GDS_PERFCOUNTER3_SELECT, 3, 1208},
+ {54786, R_036A10_GDS_PERFCOUNTER0_SELECT1, 2, 1211},
+ {54811, R_036B00_TA_PERFCOUNTER0_SELECT, 5, 1213},
+ {54834, R_036B04_TA_PERFCOUNTER0_SELECT1, 4, 1218},
+ {54858, R_036B08_TA_PERFCOUNTER1_SELECT, 5, 1213},
+ {54881, R_036C00_TD_PERFCOUNTER0_SELECT, 5, 1222},
+ {54904, R_036C04_TD_PERFCOUNTER0_SELECT1, 4, 1227},
+ {54928, R_036C08_TD_PERFCOUNTER1_SELECT, 5, 1222},
+ {54951, R_036D00_TCP_PERFCOUNTER0_SELECT, 5, 1231},
+ {54975, R_036D04_TCP_PERFCOUNTER0_SELECT1, 4, 1236},
+ {55000, R_036D08_TCP_PERFCOUNTER1_SELECT, 5, 1231},
+ {55024, R_036D0C_TCP_PERFCOUNTER1_SELECT1},
+ {55049, R_036D10_TCP_PERFCOUNTER2_SELECT, 5, 1231},
+ {55073, R_036D14_TCP_PERFCOUNTER3_SELECT, 5, 1231},
+ {55097, R_036E00_TCC_PERFCOUNTER0_SELECT, 5, 1240},
+ {55121, R_036E04_TCC_PERFCOUNTER0_SELECT1, 4, 1245},
+ {55146, R_036E08_TCC_PERFCOUNTER1_SELECT, 5, 1240},
+ {55170, R_036E0C_TCC_PERFCOUNTER1_SELECT1},
+ {55195, R_036E10_TCC_PERFCOUNTER2_SELECT, 5, 1240},
+ {55219, R_036E14_TCC_PERFCOUNTER3_SELECT, 5, 1240},
+ {55243, R_036E40_TCA_PERFCOUNTER0_SELECT, 5, 1249},
+ {55267, R_036E44_TCA_PERFCOUNTER0_SELECT1, 4, 1254},
+ {55292, R_036E48_TCA_PERFCOUNTER1_SELECT, 5, 1249},
+ {55316, R_036E4C_TCA_PERFCOUNTER1_SELECT1},
+ {55341, R_036E50_TCA_PERFCOUNTER2_SELECT, 5, 1249},
+ {55365, R_036E54_TCA_PERFCOUNTER3_SELECT, 5, 1249},
+ {55389, R_037000_CB_PERFCOUNTER_FILTER, 12, 1258},
+ {55411, R_037004_CB_PERFCOUNTER0_SELECT, 5, 1270},
+ {55434, R_037008_CB_PERFCOUNTER0_SELECT1, 4, 1275},
+ {55458, R_03700C_CB_PERFCOUNTER1_SELECT, 5, 1270},
+ {55481, R_037010_CB_PERFCOUNTER2_SELECT, 5, 1270},
+ {55504, R_037014_CB_PERFCOUNTER3_SELECT, 5, 1270},
+ {55527, R_037100_DB_PERFCOUNTER0_SELECT, 5, 1279},
+ {55550, R_037104_DB_PERFCOUNTER0_SELECT1, 4, 1284},
+ {55574, R_037108_DB_PERFCOUNTER1_SELECT, 5, 1279},
+ {55597, R_03710C_DB_PERFCOUNTER1_SELECT1},
+ {55621, R_037110_DB_PERFCOUNTER2_SELECT, 5, 1279},
+ {55644, R_037118_DB_PERFCOUNTER3_SELECT, 5, 1279},
+ {55667, R_028000_DB_RENDER_CONTROL, 10, 1288},
+ {55685, R_028004_DB_COUNT_CONTROL, 9, 1298},
+ {55702, R_028008_DB_DEPTH_VIEW, 5, 1307},
+ {55716, R_02800C_DB_RENDER_OVERRIDE, 23, 1312},
+ {55735, R_028010_DB_RENDER_OVERRIDE2, 16, 1335},
+ {55755, R_028014_DB_HTILE_DATA_BASE},
+ {55774, R_028020_DB_DEPTH_BOUNDS_MIN},
+ {55794, R_028024_DB_DEPTH_BOUNDS_MAX},
+ {55814, R_028028_DB_STENCIL_CLEAR, 1, 1351},
+ {55831, R_02802C_DB_DEPTH_CLEAR},
+ {55846, R_028030_PA_SC_SCREEN_SCISSOR_TL, 2, 1352},
+ {55870, R_028034_PA_SC_SCREEN_SCISSOR_BR, 2, 1354},
+ {55894, R_02803C_DB_DEPTH_INFO, 7, 1356},
+ {55908, R_028040_DB_Z_INFO, 10, 1363},
+ {55918, R_028044_DB_STENCIL_INFO, 6, 1373},
+ {55934, R_028048_DB_Z_READ_BASE},
+ {55949, R_02804C_DB_STENCIL_READ_BASE},
+ {55970, R_028050_DB_Z_WRITE_BASE},
+ {55986, R_028054_DB_STENCIL_WRITE_BASE},
+ {56008, R_028058_DB_DEPTH_SIZE, 2, 1379},
+ {56022, R_02805C_DB_DEPTH_SLICE, 1, 1381},
+ {56037, R_028080_TA_BC_BASE_ADDR},
+ {56053, R_028084_TA_BC_BASE_ADDR_HI, 1, 1382},
+ {56072, R_0281E8_COHER_DEST_BASE_HI_0, 1, 1383},
+ {56093, R_0281EC_COHER_DEST_BASE_HI_1, 1, 1384},
+ {56114, R_0281F0_COHER_DEST_BASE_HI_2, 1, 1385},
+ {56135, R_0281F4_COHER_DEST_BASE_HI_3, 1, 1386},
+ {56156, R_0281F8_COHER_DEST_BASE_2},
+ {56174, R_0281FC_COHER_DEST_BASE_3},
+ {56192, R_028200_PA_SC_WINDOW_OFFSET, 2, 1387},
+ {56212, R_028204_PA_SC_WINDOW_SCISSOR_TL, 3, 1389},
+ {56236, R_028208_PA_SC_WINDOW_SCISSOR_BR, 2, 1392},
+ {56260, R_02820C_PA_SC_CLIPRECT_RULE, 1, 1394},
+ {56280, R_028210_PA_SC_CLIPRECT_0_TL, 2, 1395},
+ {56300, R_028214_PA_SC_CLIPRECT_0_BR, 2, 1397},
+ {56320, R_028218_PA_SC_CLIPRECT_1_TL, 2, 1395},
+ {56340, R_02821C_PA_SC_CLIPRECT_1_BR, 2, 1397},
+ {56360, R_028220_PA_SC_CLIPRECT_2_TL, 2, 1395},
+ {56380, R_028224_PA_SC_CLIPRECT_2_BR, 2, 1397},
+ {56400, R_028228_PA_SC_CLIPRECT_3_TL, 2, 1395},
+ {56420, R_02822C_PA_SC_CLIPRECT_3_BR, 2, 1397},
+ {56440, R_028230_PA_SC_EDGERULE, 7, 1399},
+ {56455, R_028234_PA_SU_HARDWARE_SCREEN_OFFSET, 2, 1406},
+ {56484, R_028238_CB_TARGET_MASK, 8, 1408},
+ {56499, R_02823C_CB_SHADER_MASK, 8, 1416},
+ {56514, R_028240_PA_SC_GENERIC_SCISSOR_TL, 3, 1424},
+ {56539, R_028244_PA_SC_GENERIC_SCISSOR_BR, 2, 1427},
+ {56564, R_028248_COHER_DEST_BASE_0},
+ {56582, R_02824C_COHER_DEST_BASE_1},
+ {56600, R_028250_PA_SC_VPORT_SCISSOR_0_TL, 3, 1429},
+ {56625, R_028254_PA_SC_VPORT_SCISSOR_0_BR, 2, 1432},
+ {56650, R_028258_PA_SC_VPORT_SCISSOR_1_TL, 3, 1429},
+ {56675, R_02825C_PA_SC_VPORT_SCISSOR_1_BR, 2, 1432},
+ {56700, R_028260_PA_SC_VPORT_SCISSOR_2_TL, 3, 1429},
+ {56725, R_028264_PA_SC_VPORT_SCISSOR_2_BR, 2, 1432},
+ {56750, R_028268_PA_SC_VPORT_SCISSOR_3_TL, 3, 1429},
+ {56775, R_02826C_PA_SC_VPORT_SCISSOR_3_BR, 2, 1432},
+ {56800, R_028270_PA_SC_VPORT_SCISSOR_4_TL, 3, 1429},
+ {56825, R_028274_PA_SC_VPORT_SCISSOR_4_BR, 2, 1432},
+ {56850, R_028278_PA_SC_VPORT_SCISSOR_5_TL, 3, 1429},
+ {56875, R_02827C_PA_SC_VPORT_SCISSOR_5_BR, 2, 1432},
+ {56900, R_028280_PA_SC_VPORT_SCISSOR_6_TL, 3, 1429},
+ {56925, R_028284_PA_SC_VPORT_SCISSOR_6_BR, 2, 1432},
+ {56950, R_028288_PA_SC_VPORT_SCISSOR_7_TL, 3, 1429},
+ {56975, R_02828C_PA_SC_VPORT_SCISSOR_7_BR, 2, 1432},
+ {57000, R_028290_PA_SC_VPORT_SCISSOR_8_TL, 3, 1429},
+ {57025, R_028294_PA_SC_VPORT_SCISSOR_8_BR, 2, 1432},
+ {57050, R_028298_PA_SC_VPORT_SCISSOR_9_TL, 3, 1429},
+ {57075, R_02829C_PA_SC_VPORT_SCISSOR_9_BR, 2, 1432},
+ {57100, R_0282A0_PA_SC_VPORT_SCISSOR_10_TL, 3, 1429},
+ {57126, R_0282A4_PA_SC_VPORT_SCISSOR_10_BR, 2, 1432},
+ {57152, R_0282A8_PA_SC_VPORT_SCISSOR_11_TL, 3, 1429},
+ {57178, R_0282AC_PA_SC_VPORT_SCISSOR_11_BR, 2, 1432},
+ {57204, R_0282B0_PA_SC_VPORT_SCISSOR_12_TL, 3, 1429},
+ {57230, R_0282B4_PA_SC_VPORT_SCISSOR_12_BR, 2, 1432},
+ {57256, R_0282B8_PA_SC_VPORT_SCISSOR_13_TL, 3, 1429},
+ {57282, R_0282BC_PA_SC_VPORT_SCISSOR_13_BR, 2, 1432},
+ {57308, R_0282C0_PA_SC_VPORT_SCISSOR_14_TL, 3, 1429},
+ {57334, R_0282C4_PA_SC_VPORT_SCISSOR_14_BR, 2, 1432},
+ {57360, R_0282C8_PA_SC_VPORT_SCISSOR_15_TL, 3, 1429},
+ {57386, R_0282CC_PA_SC_VPORT_SCISSOR_15_BR, 2, 1432},
+ {57412, R_0282D0_PA_SC_VPORT_ZMIN_0},
+ {57431, R_0282D4_PA_SC_VPORT_ZMAX_0},
+ {57450, R_0282D8_PA_SC_VPORT_ZMIN_1},
+ {57469, R_0282DC_PA_SC_VPORT_ZMAX_1},
+ {57488, R_0282E0_PA_SC_VPORT_ZMIN_2},
+ {57507, R_0282E4_PA_SC_VPORT_ZMAX_2},
+ {57526, R_0282E8_PA_SC_VPORT_ZMIN_3},
+ {57545, R_0282EC_PA_SC_VPORT_ZMAX_3},
+ {57564, R_0282F0_PA_SC_VPORT_ZMIN_4},
+ {57583, R_0282F4_PA_SC_VPORT_ZMAX_4},
+ {57602, R_0282F8_PA_SC_VPORT_ZMIN_5},
+ {57621, R_0282FC_PA_SC_VPORT_ZMAX_5},
+ {57640, R_028300_PA_SC_VPORT_ZMIN_6},
+ {57659, R_028304_PA_SC_VPORT_ZMAX_6},
+ {57678, R_028308_PA_SC_VPORT_ZMIN_7},
+ {57697, R_02830C_PA_SC_VPORT_ZMAX_7},
+ {57716, R_028310_PA_SC_VPORT_ZMIN_8},
+ {57735, R_028314_PA_SC_VPORT_ZMAX_8},
+ {57754, R_028318_PA_SC_VPORT_ZMIN_9},
+ {57773, R_02831C_PA_SC_VPORT_ZMAX_9},
+ {57792, R_028320_PA_SC_VPORT_ZMIN_10},
+ {57812, R_028324_PA_SC_VPORT_ZMAX_10},
+ {57832, R_028328_PA_SC_VPORT_ZMIN_11},
+ {57852, R_02832C_PA_SC_VPORT_ZMAX_11},
+ {57872, R_028330_PA_SC_VPORT_ZMIN_12},
+ {57892, R_028334_PA_SC_VPORT_ZMAX_12},
+ {57912, R_028338_PA_SC_VPORT_ZMIN_13},
+ {57932, R_02833C_PA_SC_VPORT_ZMAX_13},
+ {57952, R_028340_PA_SC_VPORT_ZMIN_14},
+ {57972, R_028344_PA_SC_VPORT_ZMAX_14},
+ {57992, R_028348_PA_SC_VPORT_ZMIN_15},
+ {58012, R_02834C_PA_SC_VPORT_ZMAX_15},
+ {58032, R_028350_PA_SC_RASTER_CONFIG, 17, 1434},
+ {58052, R_028354_PA_SC_RASTER_CONFIG_1, 5, 1451},
+ {58074, R_028358_PA_SC_SCREEN_EXTENT_CONTROL, 2, 1456},
+ {58102, R_028400_VGT_MAX_VTX_INDX},
+ {58119, R_028404_VGT_MIN_VTX_INDX},
+ {58136, R_028408_VGT_INDX_OFFSET},
+ {58152, R_02840C_VGT_MULTI_PRIM_IB_RESET_INDX},
+ {58181, R_028414_CB_BLEND_RED},
+ {58194, R_028418_CB_BLEND_GREEN},
+ {58209, R_02841C_CB_BLEND_BLUE},
+ {58223, R_028420_CB_BLEND_ALPHA},
+ {58238, R_028424_CB_DCC_CONTROL, 3, 1458},
+ {58253, R_02842C_DB_STENCIL_CONTROL, 6, 1461},
+ {58272, R_028430_DB_STENCILREFMASK, 4, 1467},
+ {58290, R_028434_DB_STENCILREFMASK_BF, 4, 1471},
+ {58311, R_02843C_PA_CL_VPORT_XSCALE},
+ {58330, R_028440_PA_CL_VPORT_XOFFSET},
+ {58350, R_028444_PA_CL_VPORT_YSCALE},
+ {58369, R_028448_PA_CL_VPORT_YOFFSET},
+ {58389, R_02844C_PA_CL_VPORT_ZSCALE},
+ {58408, R_028450_PA_CL_VPORT_ZOFFSET},
+ {58428, R_028454_PA_CL_VPORT_XSCALE_1},
+ {58449, R_028458_PA_CL_VPORT_XOFFSET_1},
+ {58471, R_02845C_PA_CL_VPORT_YSCALE_1},
+ {58492, R_028460_PA_CL_VPORT_YOFFSET_1},
+ {58514, R_028464_PA_CL_VPORT_ZSCALE_1},
+ {58535, R_028468_PA_CL_VPORT_ZOFFSET_1},
+ {58557, R_02846C_PA_CL_VPORT_XSCALE_2},
+ {58578, R_028470_PA_CL_VPORT_XOFFSET_2},
+ {58600, R_028474_PA_CL_VPORT_YSCALE_2},
+ {58621, R_028478_PA_CL_VPORT_YOFFSET_2},
+ {58643, R_02847C_PA_CL_VPORT_ZSCALE_2},
+ {58664, R_028480_PA_CL_VPORT_ZOFFSET_2},
+ {58686, R_028484_PA_CL_VPORT_XSCALE_3},
+ {58707, R_028488_PA_CL_VPORT_XOFFSET_3},
+ {58729, R_02848C_PA_CL_VPORT_YSCALE_3},
+ {58750, R_028490_PA_CL_VPORT_YOFFSET_3},
+ {58772, R_028494_PA_CL_VPORT_ZSCALE_3},
+ {58793, R_028498_PA_CL_VPORT_ZOFFSET_3},
+ {58815, R_02849C_PA_CL_VPORT_XSCALE_4},
+ {58836, R_0284A0_PA_CL_VPORT_XOFFSET_4},
+ {58858, R_0284A4_PA_CL_VPORT_YSCALE_4},
+ {58879, R_0284A8_PA_CL_VPORT_YOFFSET_4},
+ {58901, R_0284AC_PA_CL_VPORT_ZSCALE_4},
+ {58922, R_0284B0_PA_CL_VPORT_ZOFFSET_4},
+ {58944, R_0284B4_PA_CL_VPORT_XSCALE_5},
+ {58965, R_0284B8_PA_CL_VPORT_XOFFSET_5},
+ {58987, R_0284BC_PA_CL_VPORT_YSCALE_5},
+ {59008, R_0284C0_PA_CL_VPORT_YOFFSET_5},
+ {59030, R_0284C4_PA_CL_VPORT_ZSCALE_5},
+ {59051, R_0284C8_PA_CL_VPORT_ZOFFSET_5},
+ {59073, R_0284CC_PA_CL_VPORT_XSCALE_6},
+ {59094, R_0284D0_PA_CL_VPORT_XOFFSET_6},
+ {59116, R_0284D4_PA_CL_VPORT_YSCALE_6},
+ {59137, R_0284D8_PA_CL_VPORT_YOFFSET_6},
+ {59159, R_0284DC_PA_CL_VPORT_ZSCALE_6},
+ {59180, R_0284E0_PA_CL_VPORT_ZOFFSET_6},
+ {59202, R_0284E4_PA_CL_VPORT_XSCALE_7},
+ {59223, R_0284E8_PA_CL_VPORT_XOFFSET_7},
+ {59245, R_0284EC_PA_CL_VPORT_YSCALE_7},
+ {59266, R_0284F0_PA_CL_VPORT_YOFFSET_7},
+ {59288, R_0284F4_PA_CL_VPORT_ZSCALE_7},
+ {59309, R_0284F8_PA_CL_VPORT_ZOFFSET_7},
+ {59331, R_0284FC_PA_CL_VPORT_XSCALE_8},
+ {59352, R_028500_PA_CL_VPORT_XOFFSET_8},
+ {59374, R_028504_PA_CL_VPORT_YSCALE_8},
+ {59395, R_028508_PA_CL_VPORT_YOFFSET_8},
+ {59417, R_02850C_PA_CL_VPORT_ZSCALE_8},
+ {59438, R_028510_PA_CL_VPORT_ZOFFSET_8},
+ {59460, R_028514_PA_CL_VPORT_XSCALE_9},
+ {59481, R_028518_PA_CL_VPORT_XOFFSET_9},
+ {59503, R_02851C_PA_CL_VPORT_YSCALE_9},
+ {59524, R_028520_PA_CL_VPORT_YOFFSET_9},
+ {59546, R_028524_PA_CL_VPORT_ZSCALE_9},
+ {59567, R_028528_PA_CL_VPORT_ZOFFSET_9},
+ {59589, R_02852C_PA_CL_VPORT_XSCALE_10},
+ {59611, R_028530_PA_CL_VPORT_XOFFSET_10},
+ {59634, R_028534_PA_CL_VPORT_YSCALE_10},
+ {59656, R_028538_PA_CL_VPORT_YOFFSET_10},
+ {59679, R_02853C_PA_CL_VPORT_ZSCALE_10},
+ {59701, R_028540_PA_CL_VPORT_ZOFFSET_10},
+ {59724, R_028544_PA_CL_VPORT_XSCALE_11},
+ {59746, R_028548_PA_CL_VPORT_XOFFSET_11},
+ {59769, R_02854C_PA_CL_VPORT_YSCALE_11},
+ {59791, R_028550_PA_CL_VPORT_YOFFSET_11},
+ {59814, R_028554_PA_CL_VPORT_ZSCALE_11},
+ {59836, R_028558_PA_CL_VPORT_ZOFFSET_11},
+ {59859, R_02855C_PA_CL_VPORT_XSCALE_12},
+ {59881, R_028560_PA_CL_VPORT_XOFFSET_12},
+ {59904, R_028564_PA_CL_VPORT_YSCALE_12},
+ {59926, R_028568_PA_CL_VPORT_YOFFSET_12},
+ {59949, R_02856C_PA_CL_VPORT_ZSCALE_12},
+ {59971, R_028570_PA_CL_VPORT_ZOFFSET_12},
+ {59994, R_028574_PA_CL_VPORT_XSCALE_13},
+ {60016, R_028578_PA_CL_VPORT_XOFFSET_13},
+ {60039, R_02857C_PA_CL_VPORT_YSCALE_13},
+ {60061, R_028580_PA_CL_VPORT_YOFFSET_13},
+ {60084, R_028584_PA_CL_VPORT_ZSCALE_13},
+ {60106, R_028588_PA_CL_VPORT_ZOFFSET_13},
+ {60129, R_02858C_PA_CL_VPORT_XSCALE_14},
+ {60151, R_028590_PA_CL_VPORT_XOFFSET_14},
+ {60174, R_028594_PA_CL_VPORT_YSCALE_14},
+ {60196, R_028598_PA_CL_VPORT_YOFFSET_14},
+ {60219, R_02859C_PA_CL_VPORT_ZSCALE_14},
+ {60241, R_0285A0_PA_CL_VPORT_ZOFFSET_14},
+ {60264, R_0285A4_PA_CL_VPORT_XSCALE_15},
+ {60286, R_0285A8_PA_CL_VPORT_XOFFSET_15},
+ {60309, R_0285AC_PA_CL_VPORT_YSCALE_15},
+ {60331, R_0285B0_PA_CL_VPORT_YOFFSET_15},
+ {60354, R_0285B4_PA_CL_VPORT_ZSCALE_15},
+ {60376, R_0285B8_PA_CL_VPORT_ZOFFSET_15},
+ {60399, R_0285BC_PA_CL_UCP_0_X},
+ {60413, R_0285C0_PA_CL_UCP_0_Y},
+ {60427, R_0285C4_PA_CL_UCP_0_Z},
+ {60441, R_0285C8_PA_CL_UCP_0_W},
+ {60455, R_0285CC_PA_CL_UCP_1_X},
+ {60469, R_0285D0_PA_CL_UCP_1_Y},
+ {60483, R_0285D4_PA_CL_UCP_1_Z},
+ {60497, R_0285D8_PA_CL_UCP_1_W},
+ {60511, R_0285DC_PA_CL_UCP_2_X},
+ {60525, R_0285E0_PA_CL_UCP_2_Y},
+ {60539, R_0285E4_PA_CL_UCP_2_Z},
+ {60553, R_0285E8_PA_CL_UCP_2_W},
+ {60567, R_0285EC_PA_CL_UCP_3_X},
+ {60581, R_0285F0_PA_CL_UCP_3_Y},
+ {60595, R_0285F4_PA_CL_UCP_3_Z},
+ {60609, R_0285F8_PA_CL_UCP_3_W},
+ {60623, R_0285FC_PA_CL_UCP_4_X},
+ {60637, R_028600_PA_CL_UCP_4_Y},
+ {60651, R_028604_PA_CL_UCP_4_Z},
+ {60665, R_028608_PA_CL_UCP_4_W},
+ {60679, R_02860C_PA_CL_UCP_5_X},
+ {60693, R_028610_PA_CL_UCP_5_Y},
+ {60707, R_028614_PA_CL_UCP_5_Z},
+ {60721, R_028618_PA_CL_UCP_5_W},
+ {60735, R_028644_SPI_PS_INPUT_CNTL_0, 12, 1475},
+ {60755, R_028648_SPI_PS_INPUT_CNTL_1, 12, 1475},
+ {60775, R_02864C_SPI_PS_INPUT_CNTL_2, 12, 1475},
+ {60795, R_028650_SPI_PS_INPUT_CNTL_3, 12, 1475},
+ {60815, R_028654_SPI_PS_INPUT_CNTL_4, 12, 1475},
+ {60835, R_028658_SPI_PS_INPUT_CNTL_5, 12, 1475},
+ {60855, R_02865C_SPI_PS_INPUT_CNTL_6, 12, 1475},
+ {60875, R_028660_SPI_PS_INPUT_CNTL_7, 12, 1475},
+ {60895, R_028664_SPI_PS_INPUT_CNTL_8, 12, 1475},
+ {60915, R_028668_SPI_PS_INPUT_CNTL_9, 12, 1475},
+ {60935, R_02866C_SPI_PS_INPUT_CNTL_10, 12, 1475},
+ {60956, R_028670_SPI_PS_INPUT_CNTL_11, 12, 1475},
+ {60977, R_028674_SPI_PS_INPUT_CNTL_12, 12, 1475},
+ {60998, R_028678_SPI_PS_INPUT_CNTL_13, 12, 1475},
+ {61019, R_02867C_SPI_PS_INPUT_CNTL_14, 12, 1475},
+ {61040, R_028680_SPI_PS_INPUT_CNTL_15, 12, 1475},
+ {61061, R_028684_SPI_PS_INPUT_CNTL_16, 12, 1475},
+ {61082, R_028688_SPI_PS_INPUT_CNTL_17, 12, 1475},
+ {61103, R_02868C_SPI_PS_INPUT_CNTL_18, 12, 1475},
+ {61124, R_028690_SPI_PS_INPUT_CNTL_19, 12, 1475},
+ {61145, R_028694_SPI_PS_INPUT_CNTL_20, 12, 1475},
+ {61166, R_028698_SPI_PS_INPUT_CNTL_21, 12, 1475},
+ {61187, R_02869C_SPI_PS_INPUT_CNTL_22, 12, 1475},
+ {61208, R_0286A0_SPI_PS_INPUT_CNTL_23, 12, 1475},
+ {61229, R_0286A4_SPI_PS_INPUT_CNTL_24, 12, 1475},
+ {61250, R_0286A8_SPI_PS_INPUT_CNTL_25, 12, 1475},
+ {61271, R_0286AC_SPI_PS_INPUT_CNTL_26, 12, 1475},
+ {61292, R_0286B0_SPI_PS_INPUT_CNTL_27, 12, 1475},
+ {61313, R_0286B4_SPI_PS_INPUT_CNTL_28, 12, 1475},
+ {61334, R_0286B8_SPI_PS_INPUT_CNTL_29, 12, 1475},
+ {61355, R_0286BC_SPI_PS_INPUT_CNTL_30, 12, 1475},
+ {61376, R_0286C0_SPI_PS_INPUT_CNTL_31, 12, 1475},
+ {61397, R_0286C4_SPI_VS_OUT_CONFIG, 4, 1487},
+ {61415, R_0286CC_SPI_PS_INPUT_ENA, 16, 1491},
+ {61432, R_0286D0_SPI_PS_INPUT_ADDR, 16, 1507},
+ {61450, R_0286D4_SPI_INTERP_CONTROL_0, 7, 1523},
+ {61471, R_0286D8_SPI_PS_IN_CONTROL, 7, 1530},
+ {61489, R_0286E0_SPI_BARYC_CNTL, 7, 1537},
+ {61504, R_0286E8_SPI_TMPRING_SIZE, 2, 1544},
+ {61521, R_028704_SPI_WAVE_MGMT_1, 5, 1546},
+ {61537, R_028708_SPI_WAVE_MGMT_2, 1, 1551},
+ {61553, R_02870C_SPI_SHADER_POS_FORMAT, 4, 1552},
+ {61575, R_028710_SPI_SHADER_Z_FORMAT, 1, 1556},
+ {61595, R_028714_SPI_SHADER_COL_FORMAT, 8, 1557},
+ {61617, R_028754_SX_PS_DOWNCONVERT, 8, 1565},
+ {61635, R_028758_SX_BLEND_OPT_EPSILON, 8, 1573},
+ {61656, R_02875C_SX_BLEND_OPT_CONTROL, 17, 1581},
+ {61677, R_028760_SX_MRT0_BLEND_OPT, 6, 1598},
+ {61695, R_028764_SX_MRT1_BLEND_OPT, 6, 1604},
+ {61713, R_028768_SX_MRT2_BLEND_OPT, 6, 1610},
+ {61731, R_02876C_SX_MRT3_BLEND_OPT, 6, 1616},
+ {61749, R_028770_SX_MRT4_BLEND_OPT, 6, 1622},
+ {61767, R_028774_SX_MRT5_BLEND_OPT, 6, 1628},
+ {61785, R_028778_SX_MRT6_BLEND_OPT, 6, 1634},
+ {61803, R_02877C_SX_MRT7_BLEND_OPT, 6, 1640},
+ {61821, R_028780_CB_BLEND0_CONTROL, 9, 1646},
+ {61839, R_028784_CB_BLEND1_CONTROL, 9, 1646},
+ {61857, R_028788_CB_BLEND2_CONTROL, 9, 1646},
+ {61875, R_02878C_CB_BLEND3_CONTROL, 9, 1646},
+ {61893, R_028790_CB_BLEND4_CONTROL, 9, 1646},
+ {61911, R_028794_CB_BLEND5_CONTROL, 9, 1646},
+ {61929, R_028798_CB_BLEND6_CONTROL, 9, 1646},
+ {61947, R_02879C_CB_BLEND7_CONTROL, 9, 1646},
+ {61965, R_0287CC_CS_COPY_STATE, 1, 1655},
+ {61979, R_0287D4_PA_CL_POINT_X_RAD},
+ {61997, R_0287D8_PA_CL_POINT_Y_RAD},
+ {62015, R_0287DC_PA_CL_POINT_SIZE},
+ {62032, R_0287E0_PA_CL_POINT_CULL_RAD},
+ {62053, R_0287E4_VGT_DMA_BASE_HI, 2, 1656},
+ {62069, R_0287E8_VGT_DMA_BASE},
+ {62082, R_0287F0_VGT_DRAW_INITIATOR, 8, 1658},
+ {62101, R_0287F4_VGT_IMMED_DATA},
+ {62116, R_0287F8_VGT_EVENT_ADDRESS_REG, 1, 1666},
+ {62138, R_028800_DB_DEPTH_CONTROL, 10, 1667},
+ {62155, R_028804_DB_EQAA, 12, 1677},
+ {62163, R_028808_CB_COLOR_CONTROL, 4, 1689},
+ {62180, R_02880C_DB_SHADER_CONTROL, 16, 1693},
+ {62198, R_028810_PA_CL_CLIP_CNTL, 19, 1709},
+ {62214, R_028814_PA_SU_SC_MODE_CNTL, 15, 1728},
+ {62233, R_028818_PA_CL_VTE_CNTL, 10, 1743},
+ {62248, R_02881C_PA_CL_VS_OUT_CNTL, 28, 1753},
+ {62266, R_028820_PA_CL_NANINF_CNTL, 16, 1781},
+ {62284, R_028824_PA_SU_LINE_STIPPLE_CNTL, 4, 1797},
+ {62308, R_028828_PA_SU_LINE_STIPPLE_SCALE},
+ {62333, R_02882C_PA_SU_PRIM_FILTER_CNTL, 11, 1801},
+ {62356, R_028830_PA_SU_SMALL_PRIM_FILTER_CNTL, 6, 1812},
+ {62385, R_028A00_PA_SU_POINT_SIZE, 2, 1818},
+ {62402, R_028A04_PA_SU_POINT_MINMAX, 2, 1820},
+ {62421, R_028A08_PA_SU_LINE_CNTL, 1, 1822},
+ {62437, R_028A0C_PA_SC_LINE_STIPPLE, 4, 1823},
+ {62456, R_028A10_VGT_OUTPUT_PATH_CNTL, 1, 1827},
+ {62477, R_028A14_VGT_HOS_CNTL, 1, 1828},
+ {62490, R_028A18_VGT_HOS_MAX_TESS_LEVEL},
+ {62513, R_028A1C_VGT_HOS_MIN_TESS_LEVEL},
+ {62536, R_028A20_VGT_HOS_REUSE_DEPTH, 1, 1829},
+ {62556, R_028A24_VGT_GROUP_PRIM_TYPE, 4, 1830},
+ {62576, R_028A28_VGT_GROUP_FIRST_DECR, 1, 1834},
+ {62597, R_028A2C_VGT_GROUP_DECR, 1, 1835},
+ {62612, R_028A30_VGT_GROUP_VECT_0_CNTL, 6, 1836},
+ {62634, R_028A34_VGT_GROUP_VECT_1_CNTL, 6, 1842},
+ {62656, R_028A38_VGT_GROUP_VECT_0_FMT_CNTL, 8, 1848},
+ {62682, R_028A3C_VGT_GROUP_VECT_1_FMT_CNTL, 8, 1856},
+ {62708, R_028A40_VGT_GS_MODE, 18, 1864},
+ {62720, R_028A44_VGT_GS_ONCHIP_CNTL, 3, 1882},
+ {62739, R_028A48_PA_SC_MODE_CNTL_0, 7, 1885},
+ {62757, R_028A4C_PA_SC_MODE_CNTL_1, 24, 1892},
+ {62775, R_028A50_VGT_ENHANCE},
+ {62787, R_028A54_VGT_GS_PER_ES, 1, 1916},
+ {62801, R_028A58_VGT_ES_PER_GS, 1, 1917},
+ {62815, R_028A5C_VGT_GS_PER_VS, 1, 1918},
+ {62829, R_028A60_VGT_GSVS_RING_OFFSET_1, 1, 1919},
+ {62852, R_028A64_VGT_GSVS_RING_OFFSET_2, 1, 1920},
+ {62875, R_028A68_VGT_GSVS_RING_OFFSET_3, 1, 1921},
+ {62898, R_028A6C_VGT_GS_OUT_PRIM_TYPE, 5, 1922},
+ {62919, R_028A70_IA_ENHANCE},
+ {62930, R_028A74_VGT_DMA_SIZE},
+ {62943, R_028A78_VGT_DMA_MAX_SIZE},
+ {62960, R_028A7C_VGT_DMA_INDEX_TYPE, 10, 1927},
+ {62979, R_028A80_WD_ENHANCE},
+ {62990, R_028A84_VGT_PRIMITIVEID_EN, 3, 1937},
+ {63009, R_028A88_VGT_DMA_NUM_INSTANCES},
+ {63031, R_028A8C_VGT_PRIMITIVEID_RESET},
+ {63053, R_028A90_VGT_EVENT_INITIATOR, 4, 1940},
+ {63073, R_028A94_VGT_MULTI_PRIM_IB_RESET_EN, 1, 1944},
+ {63100, R_028AA0_VGT_INSTANCE_STEP_RATE_0},
+ {63125, R_028AA4_VGT_INSTANCE_STEP_RATE_1},
+ {63150, R_028AA8_IA_MULTI_VGT_PARAM, 7, 1945},
+ {63169, R_028AAC_VGT_ESGS_RING_ITEMSIZE, 1, 1952},
+ {63192, R_028AB0_VGT_GSVS_RING_ITEMSIZE, 1, 1953},
+ {63215, R_028AB4_VGT_REUSE_OFF, 1, 1954},
+ {63229, R_028AB8_VGT_VTX_CNT_EN, 1, 1955},
+ {63244, R_028ABC_DB_HTILE_SURFACE, 10, 1956},
+ {63261, R_028AC0_DB_SRESULTS_COMPARE_STATE0, 4, 1966},
+ {63288, R_028AC4_DB_SRESULTS_COMPARE_STATE1, 4, 1970},
+ {63315, R_028AC8_DB_PRELOAD_CONTROL, 4, 1974},
+ {63334, R_028AD0_VGT_STRMOUT_BUFFER_SIZE_0},
+ {63360, R_028AD4_VGT_STRMOUT_VTX_STRIDE_0, 1, 1978},
+ {63385, R_028ADC_VGT_STRMOUT_BUFFER_OFFSET_0},
+ {63413, R_028AE0_VGT_STRMOUT_BUFFER_SIZE_1},
+ {63439, R_028AE4_VGT_STRMOUT_VTX_STRIDE_1, 1, 1979},
+ {63464, R_028AEC_VGT_STRMOUT_BUFFER_OFFSET_1},
+ {63492, R_028AF0_VGT_STRMOUT_BUFFER_SIZE_2},
+ {63518, R_028AF4_VGT_STRMOUT_VTX_STRIDE_2, 1, 1980},
+ {63543, R_028AFC_VGT_STRMOUT_BUFFER_OFFSET_2},
+ {63571, R_028B00_VGT_STRMOUT_BUFFER_SIZE_3},
+ {63597, R_028B04_VGT_STRMOUT_VTX_STRIDE_3, 1, 1981},
+ {63622, R_028B0C_VGT_STRMOUT_BUFFER_OFFSET_3},
+ {63650, R_028B28_VGT_STRMOUT_DRAW_OPAQUE_OFFSET},
+ {63681, R_028B2C_VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE},
+ {63724, R_028B30_VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE, 1, 1982},
+ {63762, R_028B38_VGT_GS_MAX_VERT_OUT, 1, 1983},
+ {63782, R_028B50_VGT_TESS_DISTRIBUTION, 5, 1984},
+ {63804, R_028B54_VGT_SHADER_STAGES_EN, 14, 1989},
+ {63825, R_028B58_VGT_LS_HS_CONFIG, 3, 2003},
+ {63842, R_028B5C_VGT_GS_VERT_ITEMSIZE, 1, 2006},
+ {63863, R_028B60_VGT_GS_VERT_ITEMSIZE_1, 1, 2007},
+ {63886, R_028B64_VGT_GS_VERT_ITEMSIZE_2, 1, 2008},
+ {63909, R_028B68_VGT_GS_VERT_ITEMSIZE_3, 1, 2009},
+ {63932, R_028B6C_VGT_TF_PARAM, 11, 2010},
+ {63945, R_028B70_DB_ALPHA_TO_MASK, 6, 2021},
+ {63962, R_028B74_VGT_DISPATCH_DRAW_INDEX},
+ {63986, R_028B78_PA_SU_POLY_OFFSET_DB_FMT_CNTL, 2, 2027},
+ {64016, R_028B7C_PA_SU_POLY_OFFSET_CLAMP},
+ {64040, R_028B80_PA_SU_POLY_OFFSET_FRONT_SCALE},
+ {64070, R_028B84_PA_SU_POLY_OFFSET_FRONT_OFFSET},
+ {64101, R_028B88_PA_SU_POLY_OFFSET_BACK_SCALE},
+ {64130, R_028B8C_PA_SU_POLY_OFFSET_BACK_OFFSET},
+ {64160, R_028B90_VGT_GS_INSTANCE_CNT, 2, 2029},
+ {64180, R_028B94_VGT_STRMOUT_CONFIG, 8, 2031},
+ {64199, R_028B98_VGT_STRMOUT_BUFFER_CONFIG, 4, 2039},
+ {64225, R_028BD4_PA_SC_CENTROID_PRIORITY_0, 8, 2043},
+ {64251, R_028BD8_PA_SC_CENTROID_PRIORITY_1, 8, 2051},
+ {64277, R_028BDC_PA_SC_LINE_CNTL, 4, 2059},
+ {64293, R_028BE0_PA_SC_AA_CONFIG, 6, 2063},
+ {64309, R_028BE4_PA_SU_VTX_CNTL, 3, 2069},
+ {64324, R_028BE8_PA_CL_GB_VERT_CLIP_ADJ},
+ {64347, R_028BEC_PA_CL_GB_VERT_DISC_ADJ},
+ {64370, R_028BF0_PA_CL_GB_HORZ_CLIP_ADJ},
+ {64393, R_028BF4_PA_CL_GB_HORZ_DISC_ADJ},
+ {64416, R_028BF8_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0, 8, 2072},
+ {64450, R_028BFC_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1, 8, 2080},
+ {64484, R_028C00_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2, 8, 2088},
+ {64518, R_028C04_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3, 8, 2096},
+ {64552, R_028C08_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0, 8, 2104},
+ {64586, R_028C0C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1, 8, 2112},
+ {64620, R_028C10_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2, 8, 2120},
+ {64654, R_028C14_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3, 8, 2128},
+ {64688, R_028C18_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0, 8, 2136},
+ {64722, R_028C1C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1, 8, 2144},
+ {64756, R_028C20_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2, 8, 2152},
+ {64790, R_028C24_PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3, 8, 2160},
+ {64824, R_028C28_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0, 8, 2168},
+ {64858, R_028C2C_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1, 8, 2176},
+ {64892, R_028C30_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2, 8, 2184},
+ {64926, R_028C34_PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3, 8, 2192},
+ {64960, R_028C38_PA_SC_AA_MASK_X0Y0_X1Y0, 2, 2200},
+ {64984, R_028C3C_PA_SC_AA_MASK_X0Y1_X1Y1, 2, 2202},
+ {65008, R_028C40_PA_SC_SHADER_CONTROL, 3, 2204},
+ {65029, R_028C58_VGT_VERTEX_REUSE_BLOCK_CNTL, 1, 2207},
+ {65057, R_028C5C_VGT_OUT_DEALLOC_CNTL, 1, 2208},
+ {65078, R_028C60_CB_COLOR0_BASE},
+ {65093, R_028C64_CB_COLOR0_PITCH, 2, 2209},
+ {65109, R_028C68_CB_COLOR0_SLICE, 1, 2211},
+ {65125, R_028C6C_CB_COLOR0_VIEW, 3, 2212},
+ {65140, R_028C70_CB_COLOR0_INFO, 18, 2215},
+ {65155, R_028C74_CB_COLOR0_ATTRIB, 13, 2233},
+ {65172, R_028C78_CB_COLOR0_DCC_CONTROL, 9, 2246},
+ {65194, R_028C7C_CB_COLOR0_CMASK},
+ {65210, R_028C80_CB_COLOR0_CMASK_SLICE, 1, 2255},
+ {65232, R_028C84_CB_COLOR0_FMASK},
+ {65248, R_028C88_CB_COLOR0_FMASK_SLICE, 1, 2256},
+ {65270, R_028C8C_CB_COLOR0_CLEAR_WORD0},
+ {65292, R_028C90_CB_COLOR0_CLEAR_WORD1},
+ {65314, R_028C94_CB_COLOR0_DCC_BASE},
+ {65333, R_028C9C_CB_COLOR1_BASE},
+ {65348, R_028CA0_CB_COLOR1_PITCH, 2, 2209},
+ {65364, R_028CA4_CB_COLOR1_SLICE, 1, 2211},
+ {65380, R_028CA8_CB_COLOR1_VIEW, 3, 2212},
+ {65395, R_028CAC_CB_COLOR1_INFO, 18, 2215},
+ {65410, R_028CB0_CB_COLOR1_ATTRIB, 13, 2233},
+ {65427, R_028CB4_CB_COLOR1_DCC_CONTROL, 9, 2246},
+ {65449, R_028CB8_CB_COLOR1_CMASK},
+ {65465, R_028CBC_CB_COLOR1_CMASK_SLICE, 1, 2255},
+ {65487, R_028CC0_CB_COLOR1_FMASK},
+ {65503, R_028CC4_CB_COLOR1_FMASK_SLICE, 1, 2256},
+ {65525, R_028CC8_CB_COLOR1_CLEAR_WORD0},
+ {65547, R_028CCC_CB_COLOR1_CLEAR_WORD1},
+ {65569, R_028CD0_CB_COLOR1_DCC_BASE},
+ {65588, R_028CD8_CB_COLOR2_BASE},
+ {65603, R_028CDC_CB_COLOR2_PITCH, 2, 2209},
+ {65619, R_028CE0_CB_COLOR2_SLICE, 1, 2211},
+ {65635, R_028CE4_CB_COLOR2_VIEW, 3, 2212},
+ {65650, R_028CE8_CB_COLOR2_INFO, 18, 2215},
+ {65665, R_028CEC_CB_COLOR2_ATTRIB, 13, 2233},
+ {65682, R_028CF0_CB_COLOR2_DCC_CONTROL, 9, 2246},
+ {65704, R_028CF4_CB_COLOR2_CMASK},
+ {65720, R_028CF8_CB_COLOR2_CMASK_SLICE, 1, 2255},
+ {65742, R_028CFC_CB_COLOR2_FMASK},
+ {65758, R_028D00_CB_COLOR2_FMASK_SLICE, 1, 2256},
+ {65780, R_028D04_CB_COLOR2_CLEAR_WORD0},
+ {65802, R_028D08_CB_COLOR2_CLEAR_WORD1},
+ {65824, R_028D0C_CB_COLOR2_DCC_BASE},
+ {65843, R_028D14_CB_COLOR3_BASE},
+ {65858, R_028D18_CB_COLOR3_PITCH, 2, 2209},
+ {65874, R_028D1C_CB_COLOR3_SLICE, 1, 2211},
+ {65890, R_028D20_CB_COLOR3_VIEW, 3, 2212},
+ {65905, R_028D24_CB_COLOR3_INFO, 18, 2215},
+ {65920, R_028D28_CB_COLOR3_ATTRIB, 13, 2233},
+ {65937, R_028D2C_CB_COLOR3_DCC_CONTROL, 9, 2246},
+ {65959, R_028D30_CB_COLOR3_CMASK},
+ {65975, R_028D34_CB_COLOR3_CMASK_SLICE, 1, 2255},
+ {65997, R_028D38_CB_COLOR3_FMASK},
+ {66013, R_028D3C_CB_COLOR3_FMASK_SLICE, 1, 2256},
+ {66035, R_028D40_CB_COLOR3_CLEAR_WORD0},
+ {66057, R_028D44_CB_COLOR3_CLEAR_WORD1},
+ {66079, R_028D48_CB_COLOR3_DCC_BASE},
+ {66098, R_028D50_CB_COLOR4_BASE},
+ {66113, R_028D54_CB_COLOR4_PITCH, 2, 2209},
+ {66129, R_028D58_CB_COLOR4_SLICE, 1, 2211},
+ {66145, R_028D5C_CB_COLOR4_VIEW, 3, 2212},
+ {66160, R_028D60_CB_COLOR4_INFO, 18, 2215},
+ {66175, R_028D64_CB_COLOR4_ATTRIB, 13, 2233},
+ {66192, R_028D68_CB_COLOR4_DCC_CONTROL, 9, 2246},
+ {66214, R_028D6C_CB_COLOR4_CMASK},
+ {66230, R_028D70_CB_COLOR4_CMASK_SLICE, 1, 2255},
+ {66252, R_028D74_CB_COLOR4_FMASK},
+ {66268, R_028D78_CB_COLOR4_FMASK_SLICE, 1, 2256},
+ {66290, R_028D7C_CB_COLOR4_CLEAR_WORD0},
+ {66312, R_028D80_CB_COLOR4_CLEAR_WORD1},
+ {66334, R_028D84_CB_COLOR4_DCC_BASE},
+ {66353, R_028D8C_CB_COLOR5_BASE},
+ {66368, R_028D90_CB_COLOR5_PITCH, 2, 2209},
+ {66384, R_028D94_CB_COLOR5_SLICE, 1, 2211},
+ {66400, R_028D98_CB_COLOR5_VIEW, 3, 2212},
+ {66415, R_028D9C_CB_COLOR5_INFO, 18, 2215},
+ {66430, R_028DA0_CB_COLOR5_ATTRIB, 13, 2233},
+ {66447, R_028DA4_CB_COLOR5_DCC_CONTROL, 9, 2246},
+ {66469, R_028DA8_CB_COLOR5_CMASK},
+ {66485, R_028DAC_CB_COLOR5_CMASK_SLICE, 1, 2255},
+ {66507, R_028DB0_CB_COLOR5_FMASK},
+ {66523, R_028DB4_CB_COLOR5_FMASK_SLICE, 1, 2256},
+ {66545, R_028DB8_CB_COLOR5_CLEAR_WORD0},
+ {66567, R_028DBC_CB_COLOR5_CLEAR_WORD1},
+ {66589, R_028DC0_CB_COLOR5_DCC_BASE},
+ {66608, R_028DC8_CB_COLOR6_BASE},
+ {66623, R_028DCC_CB_COLOR6_PITCH, 2, 2209},
+ {66639, R_028DD0_CB_COLOR6_SLICE, 1, 2211},
+ {66655, R_028DD4_CB_COLOR6_VIEW, 3, 2212},
+ {66670, R_028DD8_CB_COLOR6_INFO, 18, 2215},
+ {66685, R_028DDC_CB_COLOR6_ATTRIB, 13, 2233},
+ {66702, R_028DE0_CB_COLOR6_DCC_CONTROL, 9, 2246},
+ {66724, R_028DE4_CB_COLOR6_CMASK},
+ {66740, R_028DE8_CB_COLOR6_CMASK_SLICE, 1, 2255},
+ {66762, R_028DEC_CB_COLOR6_FMASK},
+ {66778, R_028DF0_CB_COLOR6_FMASK_SLICE, 1, 2256},
+ {66800, R_028DF4_CB_COLOR6_CLEAR_WORD0},
+ {66822, R_028DF8_CB_COLOR6_CLEAR_WORD1},
+ {66844, R_028DFC_CB_COLOR6_DCC_BASE},
+ {66863, R_028E04_CB_COLOR7_BASE},
+ {66878, R_028E08_CB_COLOR7_PITCH, 2, 2209},
+ {66894, R_028E0C_CB_COLOR7_SLICE, 1, 2211},
+ {66910, R_028E10_CB_COLOR7_VIEW, 3, 2212},
+ {66925, R_028E14_CB_COLOR7_INFO, 18, 2215},
+ {66940, R_028E18_CB_COLOR7_ATTRIB, 13, 2233},
+ {66957, R_028E1C_CB_COLOR7_DCC_CONTROL, 9, 2246},
+ {66979, R_028E20_CB_COLOR7_CMASK},
+ {66995, R_028E24_CB_COLOR7_CMASK_SLICE, 1, 2255},
+ {67017, R_028E28_CB_COLOR7_FMASK},
+ {67033, R_028E2C_CB_COLOR7_FMASK_SLICE, 1, 2256},
+ {67055, R_028E30_CB_COLOR7_CLEAR_WORD0},
+ {67077, R_028E34_CB_COLOR7_CLEAR_WORD1},
+ {67099, R_028E38_CB_COLOR7_DCC_BASE},
+ {58102, R_030920_VGT_MAX_VTX_INDX},
+ {58119, R_030924_VGT_MIN_VTX_INDX},
+ {58136, R_030928_VGT_INDX_OFFSET},
+ {63073, R_03092C_VGT_MULTI_PRIM_IB_RESET_EN, 2, 2257},
+ {67118, R_030944_VGT_TF_MEMORY_BASE_HI, 1, 2259},
+ {67140, R_030948_WD_POS_BUF_BASE},
+ {67156, R_03094C_WD_POS_BUF_BASE_HI, 1, 2260},
+ {67175, R_030950_WD_CNTL_SB_BUF_BASE},
+ {67195, R_030954_WD_CNTL_SB_BUF_BASE_HI, 1, 2261},
+ {67218, R_030958_WD_INDEX_BUF_BASE},
+ {67236, R_03095C_WD_INDEX_BUF_BASE_HI, 1, 2262},
+ {63150, R_030960_IA_MULTI_VGT_PARAM, 9, 2263},
+ {67257, R_030964_VGT_OBJECT_ID},
+ {67271, R_030968_VGT_INSTANCE_BASE_ID},
+ {67292, R_030D24_SQC_WRITEBACK, 2, 2272},
+ {67306, R_030E08_TA_GRAD_ADJ_UCONFIG, 4, 2274},
+ {43236, R_031100_SPI_CONFIG_CNTL, 9, 2278},
+ {43252, R_031104_SPI_CONFIG_CNTL_1, 11, 2287},
+ {67326, R_031108_SPI_CONFIG_CNTL_2, 2, 2298},
+ {67344, R_00B070_SPI_SHADER_USER_DATA_PS_16},
+ {67371, R_00B074_SPI_SHADER_USER_DATA_PS_17},
+ {67398, R_00B078_SPI_SHADER_USER_DATA_PS_18},
+ {67425, R_00B07C_SPI_SHADER_USER_DATA_PS_19},
+ {67452, R_00B080_SPI_SHADER_USER_DATA_PS_20},
+ {67479, R_00B084_SPI_SHADER_USER_DATA_PS_21},
+ {67506, R_00B088_SPI_SHADER_USER_DATA_PS_22},
+ {67533, R_00B08C_SPI_SHADER_USER_DATA_PS_23},
+ {67560, R_00B090_SPI_SHADER_USER_DATA_PS_24},
+ {67587, R_00B094_SPI_SHADER_USER_DATA_PS_25},
+ {67614, R_00B098_SPI_SHADER_USER_DATA_PS_26},
+ {67641, R_00B09C_SPI_SHADER_USER_DATA_PS_27},
+ {67668, R_00B0A0_SPI_SHADER_USER_DATA_PS_28},
+ {67695, R_00B0A4_SPI_SHADER_USER_DATA_PS_29},
+ {67722, R_00B0A8_SPI_SHADER_USER_DATA_PS_30},
+ {67749, R_00B0AC_SPI_SHADER_USER_DATA_PS_31},
+ {67776, R_00B170_SPI_SHADER_USER_DATA_VS_16},
+ {67803, R_00B174_SPI_SHADER_USER_DATA_VS_17},
+ {67830, R_00B178_SPI_SHADER_USER_DATA_VS_18},
+ {67857, R_00B17C_SPI_SHADER_USER_DATA_VS_19},
+ {67884, R_00B180_SPI_SHADER_USER_DATA_VS_20},
+ {67911, R_00B184_SPI_SHADER_USER_DATA_VS_21},
+ {67938, R_00B188_SPI_SHADER_USER_DATA_VS_22},
+ {67965, R_00B18C_SPI_SHADER_USER_DATA_VS_23},
+ {67992, R_00B190_SPI_SHADER_USER_DATA_VS_24},
+ {68019, R_00B194_SPI_SHADER_USER_DATA_VS_25},
+ {68046, R_00B198_SPI_SHADER_USER_DATA_VS_26},
+ {68073, R_00B19C_SPI_SHADER_USER_DATA_VS_27},
+ {68100, R_00B1A0_SPI_SHADER_USER_DATA_VS_28},
+ {68127, R_00B1A4_SPI_SHADER_USER_DATA_VS_29},
+ {68154, R_00B1A8_SPI_SHADER_USER_DATA_VS_30},
+ {68181, R_00B1AC_SPI_SHADER_USER_DATA_VS_31},
+ {68208, R_00B1F0_SPI_SHADER_PGM_RSRC2_GS_VS, 9, 2300},
+ {68235, R_00B204_SPI_SHADER_PGM_RSRC4_GS, 2, 2309},
+ {68259, R_00B208_SPI_SHADER_USER_DATA_ADDR_LO_GS},
+ {68291, R_00B20C_SPI_SHADER_USER_DATA_ADDR_HI_GS},
+ {46106, R_00B210_SPI_SHADER_PGM_LO_ES},
+ {46127, R_00B214_SPI_SHADER_PGM_HI_ES, 1, 2311},
+ {68323, R_00B370_SPI_SHADER_USER_DATA_ES_16},
+ {68350, R_00B374_SPI_SHADER_USER_DATA_ES_17},
+ {68377, R_00B378_SPI_SHADER_USER_DATA_ES_18},
+ {68404, R_00B37C_SPI_SHADER_USER_DATA_ES_19},
+ {68431, R_00B380_SPI_SHADER_USER_DATA_ES_20},
+ {68458, R_00B384_SPI_SHADER_USER_DATA_ES_21},
+ {68485, R_00B388_SPI_SHADER_USER_DATA_ES_22},
+ {68512, R_00B38C_SPI_SHADER_USER_DATA_ES_23},
+ {68539, R_00B390_SPI_SHADER_USER_DATA_ES_24},
+ {68566, R_00B394_SPI_SHADER_USER_DATA_ES_25},
+ {68593, R_00B398_SPI_SHADER_USER_DATA_ES_26},
+ {68620, R_00B39C_SPI_SHADER_USER_DATA_ES_27},
+ {68647, R_00B3A0_SPI_SHADER_USER_DATA_ES_28},
+ {68674, R_00B3A4_SPI_SHADER_USER_DATA_ES_29},
+ {68701, R_00B3A8_SPI_SHADER_USER_DATA_ES_30},
+ {68728, R_00B3AC_SPI_SHADER_USER_DATA_ES_31},
+ {68755, R_00B404_SPI_SHADER_PGM_RSRC4_HS, 1, 2312},
+ {68779, R_00B408_SPI_SHADER_USER_DATA_ADDR_LO_HS},
+ {68811, R_00B40C_SPI_SHADER_USER_DATA_ADDR_HI_HS},
+ {47346, R_00B410_SPI_SHADER_PGM_LO_LS},
+ {47367, R_00B414_SPI_SHADER_PGM_HI_LS, 1, 2313},
+ {47436, R_00B430_SPI_SHADER_USER_DATA_LS_0},
+ {47462, R_00B434_SPI_SHADER_USER_DATA_LS_1},
+ {47488, R_00B438_SPI_SHADER_USER_DATA_LS_2},
+ {47514, R_00B43C_SPI_SHADER_USER_DATA_LS_3},
+ {47540, R_00B440_SPI_SHADER_USER_DATA_LS_4},
+ {47566, R_00B444_SPI_SHADER_USER_DATA_LS_5},
+ {47592, R_00B448_SPI_SHADER_USER_DATA_LS_6},
+ {47618, R_00B44C_SPI_SHADER_USER_DATA_LS_7},
+ {47644, R_00B450_SPI_SHADER_USER_DATA_LS_8},
+ {47670, R_00B454_SPI_SHADER_USER_DATA_LS_9},
+ {47696, R_00B458_SPI_SHADER_USER_DATA_LS_10},
+ {47723, R_00B45C_SPI_SHADER_USER_DATA_LS_11},
+ {47750, R_00B460_SPI_SHADER_USER_DATA_LS_12},
+ {47777, R_00B464_SPI_SHADER_USER_DATA_LS_13},
+ {47804, R_00B468_SPI_SHADER_USER_DATA_LS_14},
+ {47831, R_00B46C_SPI_SHADER_USER_DATA_LS_15},
+ {68843, R_00B470_SPI_SHADER_USER_DATA_LS_16},
+ {68870, R_00B474_SPI_SHADER_USER_DATA_LS_17},
+ {68897, R_00B478_SPI_SHADER_USER_DATA_LS_18},
+ {68924, R_00B47C_SPI_SHADER_USER_DATA_LS_19},
+ {68951, R_00B480_SPI_SHADER_USER_DATA_LS_20},
+ {68978, R_00B484_SPI_SHADER_USER_DATA_LS_21},
+ {69005, R_00B488_SPI_SHADER_USER_DATA_LS_22},
+ {69032, R_00B48C_SPI_SHADER_USER_DATA_LS_23},
+ {69059, R_00B490_SPI_SHADER_USER_DATA_LS_24},
+ {69086, R_00B494_SPI_SHADER_USER_DATA_LS_25},
+ {69113, R_00B498_SPI_SHADER_USER_DATA_LS_26},
+ {69140, R_00B49C_SPI_SHADER_USER_DATA_LS_27},
+ {69167, R_00B4A0_SPI_SHADER_USER_DATA_LS_28},
+ {69194, R_00B4A4_SPI_SHADER_USER_DATA_LS_29},
+ {69221, R_00B4A8_SPI_SHADER_USER_DATA_LS_30},
+ {69248, R_00B4AC_SPI_SHADER_USER_DATA_LS_31},
+ {69275, R_00B530_SPI_SHADER_USER_DATA_COMMON_0},
+ {69305, R_00B534_SPI_SHADER_USER_DATA_COMMON_1},
+ {69335, R_00B538_SPI_SHADER_USER_DATA_COMMON_2},
+ {69365, R_00B53C_SPI_SHADER_USER_DATA_COMMON_3},
+ {69395, R_00B540_SPI_SHADER_USER_DATA_COMMON_4},
+ {69425, R_00B544_SPI_SHADER_USER_DATA_COMMON_5},
+ {69455, R_00B548_SPI_SHADER_USER_DATA_COMMON_6},
+ {69485, R_00B54C_SPI_SHADER_USER_DATA_COMMON_7},
+ {69515, R_00B550_SPI_SHADER_USER_DATA_COMMON_8},
+ {69545, R_00B554_SPI_SHADER_USER_DATA_COMMON_9},
+ {69575, R_00B558_SPI_SHADER_USER_DATA_COMMON_10},
+ {69606, R_00B55C_SPI_SHADER_USER_DATA_COMMON_11},
+ {69637, R_00B560_SPI_SHADER_USER_DATA_COMMON_12},
+ {69668, R_00B564_SPI_SHADER_USER_DATA_COMMON_13},
+ {69699, R_00B568_SPI_SHADER_USER_DATA_COMMON_14},
+ {69730, R_00B56C_SPI_SHADER_USER_DATA_COMMON_15},
+ {69761, R_00B570_SPI_SHADER_USER_DATA_COMMON_16},
+ {69792, R_00B574_SPI_SHADER_USER_DATA_COMMON_17},
+ {69823, R_00B578_SPI_SHADER_USER_DATA_COMMON_18},
+ {69854, R_00B57C_SPI_SHADER_USER_DATA_COMMON_19},
+ {69885, R_00B580_SPI_SHADER_USER_DATA_COMMON_20},
+ {69916, R_00B584_SPI_SHADER_USER_DATA_COMMON_21},
+ {69947, R_00B588_SPI_SHADER_USER_DATA_COMMON_22},
+ {69978, R_00B58C_SPI_SHADER_USER_DATA_COMMON_23},
+ {70009, R_00B590_SPI_SHADER_USER_DATA_COMMON_24},
+ {70040, R_00B594_SPI_SHADER_USER_DATA_COMMON_25},
+ {70071, R_00B598_SPI_SHADER_USER_DATA_COMMON_26},
+ {70102, R_00B59C_SPI_SHADER_USER_DATA_COMMON_27},
+ {70133, R_00B5A0_SPI_SHADER_USER_DATA_COMMON_28},
+ {70164, R_00B5A4_SPI_SHADER_USER_DATA_COMMON_29},
+ {70195, R_00B5A8_SPI_SHADER_USER_DATA_COMMON_30},
+ {70226, R_00B5AC_SPI_SHADER_USER_DATA_COMMON_31},
+ {70257, R_00B838_COMPUTE_DISPATCH_PKT_ADDR_LO},
+ {70286, R_00B83C_COMPUTE_DISPATCH_PKT_ADDR_HI, 1, 2314},
+ {70315, R_00B840_COMPUTE_DISPATCH_SCRATCH_BASE_LO},
+ {70348, R_00B844_COMPUTE_DISPATCH_SCRATCH_BASE_HI, 1, 2315},
+ {70381, R_034030_CPF_LATENCY_STATS_DATA},
+ {70404, R_034034_CPG_LATENCY_STATS_DATA},
+ {70427, R_034038_CPC_LATENCY_STATS_DATA},
+ {70450, R_036028_CPF_TC_PERF_COUNTER_WINDOW_SELECT, 3, 2316},
+ {70484, R_03602C_CPG_TC_PERF_COUNTER_WINDOW_SELECT, 3, 2319},
+ {70518, R_036030_CPF_LATENCY_STATS_SELECT, 3, 2322},
+ {70543, R_036034_CPG_LATENCY_STATS_SELECT, 3, 2325},
+ {70568, R_036038_CPC_LATENCY_STATS_SELECT, 3, 2328},
+ {70593, R_028018_DB_HTILE_DATA_BASE_HI, 1, 2331},
+ {56008, R_02801C_DB_DEPTH_SIZE, 2, 2332},
+ {55908, R_028038_DB_Z_INFO, 13, 2334},
+ {55918, R_02803C_DB_STENCIL_INFO, 8, 2347},
+ {55934, R_028040_DB_Z_READ_BASE},
+ {70615, R_028044_DB_Z_READ_BASE_HI, 1, 2355},
+ {55949, R_028048_DB_STENCIL_READ_BASE},
+ {70633, R_02804C_DB_STENCIL_READ_BASE_HI, 1, 2356},
+ {70657, R_028054_DB_Z_WRITE_BASE_HI, 1, 2357},
+ {55986, R_028058_DB_STENCIL_WRITE_BASE},
+ {70676, R_02805C_DB_STENCIL_WRITE_BASE_HI, 1, 2358},
+ {70701, R_028060_DB_DFSM_CONTROL, 3, 2359},
+ {70717, R_028064_DB_RENDER_FILTER, 1, 2362},
+ {70734, R_028068_DB_Z_INFO2, 1, 2363},
+ {70745, R_02806C_DB_STENCIL_INFO2, 1, 2364},
+ {70762, R_02835C_PA_SC_TILE_STEERING_OVERRIDE, 4, 2365},
+ {70791, R_028360_CP_PERFMON_CNTX_CNTL, 1, 2369},
+ {70812, R_0283A0_PA_SC_RIGHT_VERT_GRID, 4, 2370},
+ {70834, R_0283A4_PA_SC_LEFT_VERT_GRID, 4, 2374},
+ {70855, R_0283A8_PA_SC_HORIZ_GRID, 4, 2378},
+ {70872, R_0283AC_PA_SC_FOV_WINDOW_LR, 4, 2382},
+ {70892, R_0283B0_PA_SC_FOV_WINDOW_TB, 2, 2386},
+ {70912, R_0287A0_CB_MRT0_EPITCH, 1, 2388},
+ {70927, R_0287A4_CB_MRT1_EPITCH, 1, 2389},
+ {70942, R_0287A8_CB_MRT2_EPITCH, 1, 2390},
+ {70957, R_0287AC_CB_MRT3_EPITCH, 1, 2391},
+ {70972, R_0287B0_CB_MRT4_EPITCH, 1, 2392},
+ {70987, R_0287B4_CB_MRT5_EPITCH, 1, 2393},
+ {71002, R_0287B8_CB_MRT6_EPITCH, 1, 2394},
+ {71017, R_0287BC_CB_MRT7_EPITCH, 1, 2395},
+ {71032, R_028834_PA_CL_OBJPRIM_ID_CNTL, 3, 2396},
+ {71054, R_028838_PA_CL_NGG_CNTL, 2, 2399},
+ {71069, R_02883C_PA_SU_OVER_RASTERIZATION_CNTL, 5, 2401},
+ {71099, R_028A94_VGT_GS_MAX_PRIMS_PER_SUBGROUP, 1, 2406},
+ {71129, R_028A98_VGT_DRAW_PAYLOAD_CNTL, 4, 2407},
+ {71151, R_028A9C_VGT_INDEX_PAYLOAD_CNTL, 1, 2411},
+ {71174, R_028B9C_VGT_DMA_EVENT_INITIATOR, 3, 2412},
+ {71198, R_028C44_PA_SC_BINNER_CNTL_0, 10, 2415},
+ {71218, R_028C48_PA_SC_BINNER_CNTL_1, 2, 2425},
+ {71238, R_028C4C_PA_SC_CONSERVATIVE_RASTERIZATION_CNTL, 18, 2427},
+ {71276, R_028C50_PA_SC_NGG_MODE_CNTL, 1, 2445},
+ {71296, R_028C64_CB_COLOR0_BASE_EXT, 1, 2446},
+ {71315, R_028C68_CB_COLOR0_ATTRIB2, 3, 2447},
+ {71333, R_028C80_CB_COLOR0_CMASK_BASE_EXT, 1, 2450},
+ {71358, R_028C88_CB_COLOR0_FMASK_BASE_EXT, 1, 2451},
+ {71383, R_028C98_CB_COLOR0_DCC_BASE_EXT, 1, 2452},
+ {71406, R_028CA0_CB_COLOR1_BASE_EXT, 1, 2446},
+ {71425, R_028CA4_CB_COLOR1_ATTRIB2},
+ {71443, R_028CBC_CB_COLOR1_CMASK_BASE_EXT, 1, 2450},
+ {71468, R_028CC4_CB_COLOR1_FMASK_BASE_EXT, 1, 2451},
+ {71493, R_028CD4_CB_COLOR1_DCC_BASE_EXT, 1, 2452},
+ {71516, R_028CDC_CB_COLOR2_BASE_EXT, 1, 2446},
+ {71535, R_028CE0_CB_COLOR2_ATTRIB2},
+ {71553, R_028CF8_CB_COLOR2_CMASK_BASE_EXT, 1, 2450},
+ {71578, R_028D00_CB_COLOR2_FMASK_BASE_EXT, 1, 2451},
+ {71603, R_028D10_CB_COLOR2_DCC_BASE_EXT, 1, 2452},
+ {71626, R_028D18_CB_COLOR3_BASE_EXT, 1, 2446},
+ {71645, R_028D1C_CB_COLOR3_ATTRIB2},
+ {71663, R_028D34_CB_COLOR3_CMASK_BASE_EXT, 1, 2450},
+ {71688, R_028D3C_CB_COLOR3_FMASK_BASE_EXT, 1, 2451},
+ {71713, R_028D4C_CB_COLOR3_DCC_BASE_EXT, 1, 2452},
+ {71736, R_028D54_CB_COLOR4_BASE_EXT, 1, 2446},
+ {71755, R_028D58_CB_COLOR4_ATTRIB2},
+ {71773, R_028D70_CB_COLOR4_CMASK_BASE_EXT, 1, 2450},
+ {71798, R_028D78_CB_COLOR4_FMASK_BASE_EXT, 1, 2451},
+ {71823, R_028D88_CB_COLOR4_DCC_BASE_EXT, 1, 2452},
+ {71846, R_028D90_CB_COLOR5_BASE_EXT, 1, 2446},
+ {71865, R_028D94_CB_COLOR5_ATTRIB2},
+ {71883, R_028DAC_CB_COLOR5_CMASK_BASE_EXT, 1, 2450},
+ {71908, R_028DB4_CB_COLOR5_FMASK_BASE_EXT, 1, 2451},
+ {71933, R_028DC4_CB_COLOR5_DCC_BASE_EXT, 1, 2452},
+ {71956, R_028DCC_CB_COLOR6_BASE_EXT, 1, 2446},
+ {71975, R_028DD0_CB_COLOR6_ATTRIB2},
+ {71993, R_028DE8_CB_COLOR6_CMASK_BASE_EXT, 1, 2450},
+ {72018, R_028DF0_CB_COLOR6_FMASK_BASE_EXT, 1, 2451},
+ {72043, R_028E00_CB_COLOR6_DCC_BASE_EXT, 1, 2452},
+ {72066, R_028E08_CB_COLOR7_BASE_EXT, 1, 2446},
+ {72085, R_028E0C_CB_COLOR7_ATTRIB2},
+ {72103, R_028E24_CB_COLOR7_CMASK_BASE_EXT, 1, 2450},
+ {72128, R_028E2C_CB_COLOR7_FMASK_BASE_EXT, 1, 2451},
+ {72153, R_028E3C_CB_COLOR7_DCC_BASE_EXT, 1, 2452},
+};
+
+static const char sid_strings[] =
+ "NOP\0" /* 0 */
+ "SET_BASE\0" /* 4 */
+ "CLEAR_STATE\0" /* 13 */
+ "INDEX_BUFFER_SIZE\0" /* 25, 38 */
+ "DISPATCH_DIRECT\0" /* 43 */
+ "DISPATCH_INDIRECT\0" /* 59 */
+ "OCCLUSION_QUERY\0" /* 91, 77 */
+ "SET_PREDICATION\0" /* 93 */
+ "COND_EXEC\0" /* 109 */
+ "PRED_EXEC\0" /* 119 */
+ "DRAW_INDIRECT\0" /* 129 */
+ "DRAW_INDEX_INDIRECT\0" /* 143 */
+ "INDEX_BASE\0" /* 163 */
+ "DRAW_INDEX_2\0" /* 174 */
+ "CONTEXT_CONTROL\0" /* 187, 195 */
+ "INDEX_TYPE\0" /* 209, 203 */
+ "DRAW_INDIRECT_MULTI\0" /* 214 */
+ "DRAW_INDEX_AUTO\0" /* 234, 245 */
+ "DRAW_INDEX_IMMD\0" /* 250 */
+ "NUM_INSTANCES\0" /* 266 */
+ "DRAW_INDEX_MULTI_AUTO\0" /* 280 */
+ "INDIRECT_BUFFER_SI\0" /* 302 */
+ "INDIRECT_BUFFER_CONST\0" /* 321 */
+ "STRMOUT_BUFFER_UPDATE\0" /* 343 */
+ "DRAW_INDEX_OFFSET_2\0" /* 365 */
+ "WRITE_DATA\0" /* 385, 391 */
+ "DRAW_INDEX_INDIRECT_MULTI\0" /* 396 */
+ "MEM_SEMAPHORE\0" /* 422 */
+ "MPEG_INDEX\0" /* 441, 436, 445 */
+ "WAIT_REG_MEM\0" /* 447 */
+ "MEM_WRITE\0" /* 460 */
+ "INDIRECT_BUFFER_CIK\0" /* 470 */
+ "COPY_DATA\0" /* 490 */
+ "PFP_SYNC_ME\0" /* 500, 509 */
+ "SURFACE_SYNC\0" /* 512 */
+ "ME_INITIALIZE\0" /* 525 */
+ "COND_WRITE\0" /* 539 */
+ "EVENT_WRITE\0" /* 550 */
+ "EVENT_WRITE_EOP\0" /* 562 */
+ "RELEASE_MEM\0" /* 578 */
+ "ONE_REG_WRITE\0" /* 590 */
+ "ACQUIRE_MEM\0" /* 604 */
+ "SET_CONFIG_REG\0" /* 616 */
+ "SET_CONTEXT_REG\0" /* 631 */
+ "SET_SH_REG\0" /* 647 */
+ "SET_SH_REG_OFFSET\0" /* 658, 669 */
+ "SET_UCONFIG_REG\0" /* 676 */
+ "LOAD_CONST_RAM\0" /* 692 */
+ "WRITE_CONST_RAM\0" /* 707 */
+ "DUMP_CONST_RAM\0" /* 723 */
+ "INCREMENT_CE_COUNTER\0" /* 738 */
+ "INCREMENT_DE_COUNTER\0" /* 759 */
+ "WAIT_ON_CE_COUNTER\0" /* 780 */
+ "IT_OPCODE_C\0" /* 799 */
+ "CP_DMA\0" /* 811 */
+ "DMA_DATA\0" /* 818 */
+ "COUNT_INDIRECT_ENABLE\0" /* 842, 827 */
+ "DRAW_INDEX_ENABLE\0" /* 849 */
+ "PFP\0" /* 867 */
+ "CE\0" /* 871 */
+ "DE\0" /* 874 */
+ "ENGINE_SEL\0" /* 877 */
+ "WR_CONFIRM\0" /* 888 */
+ "WR_ONE_ADDR\0" /* 906, 899 */
+ "MEM_MAPPED_REGISTER\0" /* 922, 911 */
+ "MEMORY_SYNC\0" /* 931 */
+ "TC_L2\0" /* 943 */
+ "GDS\0" /* 949 */
+ "RESERVED\0" /* 953 */
+ "MEM_ASYNC\0" /* 962 */
+ "DST_SEL\0" /* 972 */
+ "IB_SIZE\0" /* 980 */
+ "CHAIN\0" /* 988 */
+ "VALID\0" /* 994 */
+ "SRC_ADDR_LO\0" /* 1000 */
+ "CP_SYNC\0" /* 1012 */
+ "SRC_ADDR\0" /* 1020 */
+ "SRC_ADDR_TC_L2\0" /* 1029 */
+ "SRC_SEL\0" /* 1044 */
+ "ENGINE\0" /* 1052 */
+ "DST_ADDR\0" /* 1059 */
+ "NOWHERE\0" /* 1068 */
+ "DST_ADDR_TC_L2\0" /* 1076 */
+ "DSL_SEL\0" /* 1091 */
+ "SRC_ADDR_HI\0" /* 1099 */
+ "DST_ADDR_LO\0" /* 1111 */
+ "DST_ADDR_HI\0" /* 1123 */
+ "BYTE_COUNT_GFX6\0" /* 1135 */
+ "BYTE_COUNT_GFX9\0" /* 1151 */
+ "DISABLE_WR_CONFIRM_GFX6\0" /* 1167 */
+ "NONE\0" /* 1191 */
+ "8_IN_16\0" /* 1196 */
+ "8_IN_32\0" /* 1204 */
+ "8_IN_64\0" /* 1212 */
+ "SRC_SWAP\0" /* 1220 */
+ "DST_SWAP\0" /* 1229 */
+ "MEMORY\0" /* 1238 */
+ "SAS\0" /* 1245 */
+ "DAS\0" /* 1249 */
+ "INCREMENT\0" /* 1253 */
+ "NO_INCREMENT\0" /* 1263 */
+ "SAIC\0" /* 1276 */
+ "DAIC\0" /* 1281 */
+ "RAW_WAIT\0" /* 1286 */
+ "DISABLE_WR_CONFIRM_GFX9\0" /* 1295 */
+ "SDMA_RQ_PENDING\0" /* 1319 */
+ "TST_RQ_PENDING\0" /* 1335 */
+ "SDMA1_RQ_PENDING\0" /* 1350 */
+ "VCE0_RQ_PENDING\0" /* 1367 */
+ "VP8_BUSY\0" /* 1383 */
+ "SDMA_BUSY\0" /* 1392, 1393 */
+ "SDMA1_BUSY\0" /* 1402 */
+ "VCE0_BUSY\0" /* 1413 */
+ "XDMA_BUSY\0" /* 1423 */
+ "CHUB_BUSY\0" /* 1433 */
+ "SDMA2_BUSY\0" /* 1443 */
+ "SDMA3_BUSY\0" /* 1454 */
+ "SAMSCP_BUSY\0" /* 1465, 1469 */
+ "ISP_BUSY\0" /* 1477 */
+ "VCE1_BUSY\0" /* 1486 */
+ "ODE_BUSY\0" /* 1496 */
+ "SDMA2_RQ_PENDING\0" /* 1505 */
+ "SDMA3_RQ_PENDING\0" /* 1522 */
+ "SAMSCP_RQ_PENDING\0" /* 1539 */
+ "ISP_RQ_PENDING\0" /* 1557 */
+ "VCE1_RQ_PENDING\0" /* 1572 */
+ "UVD_RQ_PENDING\0" /* 1588 */
+ "SAMMSP_RQ_PENDING\0" /* 1603 */
+ "ACP_RQ_PENDING\0" /* 1621 */
+ "SMU_RQ_PENDING\0" /* 1636 */
+ "GRBM_RQ_PENDING\0" /* 1651 */
+ "HI_RQ_PENDING\0" /* 1667 */
+ "VMC_BUSY\0" /* 1681 */
+ "MCB_BUSY\0" /* 1690, 1691 */
+ "MCB_NON_DISPLAY_BUSY\0" /* 1699 */
+ "MCC_BUSY\0" /* 1720 */
+ "MCD_BUSY\0" /* 1729 */
+ "VMC1_BUSY\0" /* 1738 */
+ "SEM_BUSY\0" /* 1748 */
+ "ACP_BUSY\0" /* 1757 */
+ "IH_BUSY\0" /* 1766 */
+ "UVD_BUSY\0" /* 1774 */
+ "SAMMSP_BUSY\0" /* 1783 */
+ "GCATCL2_BUSY\0" /* 1795 */
+ "OSATCL2_BUSY\0" /* 1808 */
+ "BIF_BUSY\0" /* 1821 */
+ "MCC0_BUSY\0" /* 1830 */
+ "MCC1_BUSY\0" /* 1840 */
+ "MCC2_BUSY\0" /* 1850 */
+ "MCC3_BUSY\0" /* 1860 */
+ "MCC4_BUSY\0" /* 1870 */
+ "MCC5_BUSY\0" /* 1880 */
+ "MCC6_BUSY\0" /* 1890 */
+ "MCC7_BUSY\0" /* 1900 */
+ "MCD0_BUSY\0" /* 1910 */
+ "MCD1_BUSY\0" /* 1920 */
+ "MCD2_BUSY\0" /* 1930 */
+ "MCD3_BUSY\0" /* 1940 */
+ "MCD4_BUSY\0" /* 1950 */
+ "MCD5_BUSY\0" /* 1960 */
+ "MCD6_BUSY\0" /* 1970 */
+ "MCD7_BUSY\0" /* 1980 */
+ "IDLE\0" /* 1990 */
+ "REG_IDLE\0" /* 1995 */
+ "RB_EMPTY\0" /* 2004 */
+ "RB_FULL\0" /* 2013 */
+ "RB_CMD_IDLE\0" /* 2021 */
+ "RB_CMD_FULL\0" /* 2033 */
+ "IB_CMD_IDLE\0" /* 2045 */
+ "IB_CMD_FULL\0" /* 2057 */
+ "BLOCK_IDLE\0" /* 2069 */
+ "INSIDE_IB\0" /* 2080 */
+ "EX_IDLE\0" /* 2090 */
+ "EX_IDLE_POLL_TIMER_EXPIRE\0" /* 2098 */
+ "PACKET_READY\0" /* 2124 */
+ "MC_WR_IDLE\0" /* 2137 */
+ "SRBM_IDLE\0" /* 2148 */
+ "CONTEXT_EMPTY\0" /* 2158 */
+ "DELTA_RPTR_FULL\0" /* 2172 */
+ "RB_MC_RREQ_IDLE\0" /* 2188 */
+ "IB_MC_RREQ_IDLE\0" /* 2204 */
+ "MC_RD_IDLE\0" /* 2220 */
+ "DELTA_RPTR_EMPTY\0" /* 2231 */
+ "MC_RD_RET_STALL\0" /* 2248 */
+ "MC_RD_NO_POLL_IDLE\0" /* 2264 */
+ "PREV_CMD_IDLE\0" /* 2283 */
+ "SEM_IDLE\0" /* 2297 */
+ "SEM_REQ_STALL\0" /* 2306 */
+ "SEM_RESP_STATE\0" /* 2320 */
+ "INT_IDLE\0" /* 2335 */
+ "INT_REQ_STALL\0" /* 2344 */
+ "ME0PIPE1_CMDFIFO_AVAIL\0" /* 2358 */
+ "ME0PIPE1_CF_RQ_PENDING\0" /* 2381 */
+ "ME0PIPE1_PF_RQ_PENDING\0" /* 2404 */
+ "ME1PIPE0_RQ_PENDING\0" /* 2427 */
+ "ME1PIPE1_RQ_PENDING\0" /* 2447 */
+ "ME1PIPE2_RQ_PENDING\0" /* 2467 */
+ "ME1PIPE3_RQ_PENDING\0" /* 2487 */
+ "ME2PIPE0_RQ_PENDING\0" /* 2507 */
+ "ME2PIPE1_RQ_PENDING\0" /* 2527 */
+ "ME2PIPE2_RQ_PENDING\0" /* 2547 */
+ "ME2PIPE3_RQ_PENDING\0" /* 2567 */
+ "RLC_RQ_PENDING\0" /* 2587 */
+ "RLC_BUSY\0" /* 2602 */
+ "TC_BUSY\0" /* 2611 */
+ "TCC_CC_RESIDENT\0" /* 2619 */
+ "CPF_BUSY\0" /* 2635 */
+ "CPC_BUSY\0" /* 2644 */
+ "CPG_BUSY\0" /* 2653 */
+ "UTCL2_BUSY\0" /* 2662 */
+ "EA_BUSY\0" /* 2673 */
+ "RMI_BUSY\0" /* 2681 */
+ "UTCL2_RQ_PENDING\0" /* 2690 */
+ "CPF_RQ_PENDING\0" /* 2707 */
+ "EA_LINK_BUSY\0" /* 2722 */
+ "CPAXI_BUSY\0" /* 2735 */
+ "ME0PIPE0_CMDFIFO_AVAIL\0" /* 2746 */
+ "SRBM_RQ_PENDING\0" /* 2769 */
+ "ME0PIPE0_CF_RQ_PENDING\0" /* 2785 */
+ "ME0PIPE0_PF_RQ_PENDING\0" /* 2808 */
+ "GDS_DMA_RQ_PENDING\0" /* 2831 */
+ "DB_CLEAN\0" /* 2850 */
+ "CB_CLEAN\0" /* 2859 */
+ "TA_BUSY\0" /* 2868 */
+ "GDS_BUSY\0" /* 2876 */
+ "WD_BUSY_NO_DMA\0" /* 2885 */
+ "VGT_BUSY\0" /* 2900 */
+ "IA_BUSY_NO_DMA\0" /* 2909 */
+ "IA_BUSY\0" /* 2924 */
+ "SX_BUSY\0" /* 2932 */
+ "WD_BUSY\0" /* 2940 */
+ "SPI_BUSY\0" /* 2948 */
+ "BCI_BUSY\0" /* 2957 */
+ "SC_BUSY\0" /* 2966 */
+ "PA_BUSY\0" /* 2974 */
+ "DB_BUSY\0" /* 2982 */
+ "CP_COHERENCY_BUSY\0" /* 2990 */
+ "GUI_ACTIVE\0" /* 3008 */
+ "RSMU_RQ_PENDING\0" /* 3019 */
+ "OFFSET_UPDATE_DONE\0" /* 3049, 3035 */
+ "DEST_BASE_0_ENA\0" /* 3054 */
+ "DEST_BASE_1_ENA\0" /* 3070 */
+ "CB0_DEST_BASE_ENA\0" /* 3086 */
+ "CB1_DEST_BASE_ENA\0" /* 3104 */
+ "CB2_DEST_BASE_ENA\0" /* 3122 */
+ "CB3_DEST_BASE_ENA\0" /* 3140 */
+ "CB4_DEST_BASE_ENA\0" /* 3158 */
+ "CB5_DEST_BASE_ENA\0" /* 3176 */
+ "CB6_DEST_BASE_ENA\0" /* 3194 */
+ "CB7_DEST_BASE_ENA\0" /* 3212 */
+ "DB_DEST_BASE_ENA\0" /* 3230 */
+ "DEST_BASE_2_ENA\0" /* 3247 */
+ "DEST_BASE_3_ENA\0" /* 3263 */
+ "TCL1_ACTION_ENA\0" /* 3279 */
+ "TC_ACTION_ENA\0" /* 3295 */
+ "CB_ACTION_ENA\0" /* 3309 */
+ "DB_ACTION_ENA\0" /* 3323 */
+ "SH_KCACHE_ACTION_ENA\0" /* 3337 */
+ "SH_ICACHE_ACTION_ENA\0" /* 3358 */
+ "COHER_BASE_HI_256B\0" /* 3379 */
+ "START_DELAY_COUNT\0" /* 3398 */
+ "TC_SD_ACTION_ENA\0" /* 3416 */
+ "TC_NC_ACTION_ENA\0" /* 3433 */
+ "TCL1_VOL_ACTION_ENA\0" /* 3450 */
+ "TC_VOL_ACTION_ENA\0" /* 3470 */
+ "TC_WB_ACTION_ENA\0" /* 3488 */
+ "SH_KCACHE_VOL_ACTION_ENA\0" /* 3505 */
+ "SH_KCACHE_WB_ACTION_ENA\0" /* 3530 */
+ "SH_SD_ACTION_ENA\0" /* 3554 */
+ "TC_WC_ACTION_ENA\0" /* 3571 */
+ "TC_INV_METADATA_ACTION_ENA\0" /* 3588 */
+ "MATCHING_GFX_CNTX\0" /* 3615 */
+ "MEID\0" /* 3633 */
+ "PHASE1_STATUS\0" /* 3645, 3638 */
+ "MEC1_BUSY\0" /* 3652 */
+ "MEC2_BUSY\0" /* 3662 */
+ "DC0_BUSY\0" /* 3672 */
+ "DC1_BUSY\0" /* 3681 */
+ "RCIU1_BUSY\0" /* 3690 */
+ "RCIU2_BUSY\0" /* 3701 */
+ "ROQ1_BUSY\0" /* 3712 */
+ "ROQ2_BUSY\0" /* 3722 */
+ "TCIU_BUSY\0" /* 3732 */
+ "SCRATCH_RAM_BUSY\0" /* 3742 */
+ "QU_BUSY\0" /* 3759 */
+ "ATCL2IU_BUSY\0" /* 3767 */
+ "CPG_CPC_BUSY\0" /* 3780 */
+ "CPF_CPC_BUSY\0" /* 3793 */
+ "UTCL2IU_BUSY\0" /* 3806 */
+ "SAVE_RESTORE_BUSY\0" /* 3819 */
+ "MEC1_LOAD_BUSY\0" /* 3837 */
+ "MEC1_SEMAPOHRE_BUSY\0" /* 3852 */
+ "MEC1_MUTEX_BUSY\0" /* 3872 */
+ "MEC1_MESSAGE_BUSY\0" /* 3888 */
+ "MEC1_EOP_QUEUE_BUSY\0" /* 3906 */
+ "MEC1_IQ_QUEUE_BUSY\0" /* 3926 */
+ "MEC1_IB_QUEUE_BUSY\0" /* 3945 */
+ "MEC1_TC_BUSY\0" /* 3964 */
+ "MEC1_DMA_BUSY\0" /* 3977 */
+ "MEC1_PARTIAL_FLUSH_BUSY\0" /* 3991 */
+ "MEC1_PIPE0_BUSY\0" /* 4015 */
+ "MEC1_PIPE1_BUSY\0" /* 4031 */
+ "MEC1_PIPE2_BUSY\0" /* 4047 */
+ "MEC1_PIPE3_BUSY\0" /* 4063 */
+ "MEC2_LOAD_BUSY\0" /* 4079 */
+ "MEC2_SEMAPOHRE_BUSY\0" /* 4094 */
+ "MEC2_MUTEX_BUSY\0" /* 4114 */
+ "MEC2_MESSAGE_BUSY\0" /* 4130 */
+ "MEC2_EOP_QUEUE_BUSY\0" /* 4148 */
+ "MEC2_IQ_QUEUE_BUSY\0" /* 4168 */
+ "MEC2_IB_QUEUE_BUSY\0" /* 4187 */
+ "MEC2_TC_BUSY\0" /* 4206 */
+ "MEC2_DMA_BUSY\0" /* 4219 */
+ "MEC2_PARTIAL_FLUSH_BUSY\0" /* 4233 */
+ "MEC2_PIPE0_BUSY\0" /* 4257 */
+ "MEC2_PIPE1_BUSY\0" /* 4273 */
+ "MEC2_PIPE2_BUSY\0" /* 4289 */
+ "MEC2_PIPE3_BUSY\0" /* 4305 */
+ "RCIU_TX_FREE_STALL\0" /* 4321 */
+ "RCIU_PRIV_VIOLATION\0" /* 4340 */
+ "TCIU_TX_FREE_STALL\0" /* 4360 */
+ "MEC1_DECODING_PACKET\0" /* 4379 */
+ "MEC1_WAIT_ON_RCIU\0" /* 4400 */
+ "MEC1_WAIT_ON_RCIU_READ\0" /* 4418 */
+ "MEC1_WAIT_ON_ROQ_DATA\0" /* 4441 */
+ "MEC2_DECODING_PACKET\0" /* 4463 */
+ "MEC2_WAIT_ON_RCIU\0" /* 4484 */
+ "MEC2_WAIT_ON_RCIU_READ\0" /* 4502 */
+ "MEC2_WAIT_ON_ROQ_DATA\0" /* 4525 */
+ "ATCL2IU_WAITING_ON_FREE\0" /* 4547 */
+ "ATCL2IU_WAITING_ON_TAGS\0" /* 4571 */
+ "ATCL1_WAITING_ON_TRANS\0" /* 4595 */
+ "UTCL2IU_WAITING_ON_FREE\0" /* 4618 */
+ "UTCL2IU_WAITING_ON_TAGS\0" /* 4642 */
+ "UTCL1_WAITING_ON_TRANS\0" /* 4666 */
+ "POST_WPTR_GFX_BUSY\0" /* 4689 */
+ "CSF_BUSY\0" /* 4708 */
+ "ROQ_ALIGN_BUSY\0" /* 4717 */
+ "ROQ_RING_BUSY\0" /* 4732 */
+ "ROQ_INDIRECT1_BUSY\0" /* 4746 */
+ "ROQ_INDIRECT2_BUSY\0" /* 4765 */
+ "ROQ_STATE_BUSY\0" /* 4784 */
+ "ROQ_CE_RING_BUSY\0" /* 4799 */
+ "ROQ_CE_INDIRECT1_BUSY\0" /* 4816 */
+ "ROQ_CE_INDIRECT2_BUSY\0" /* 4838 */
+ "SEMAPHORE_BUSY\0" /* 4860 */
+ "INTERRUPT_BUSY\0" /* 4875 */
+ "HQD_BUSY\0" /* 4890 */
+ "PRT_BUSY\0" /* 4899 */
+ "CPF_GFX_BUSY\0" /* 4908 */
+ "CPF_CMP_BUSY\0" /* 4921 */
+ "GRBM_CPF_STAT_BUSY\0" /* 4934 */
+ "CPC_CPF_BUSY\0" /* 4953 */
+ "REG_BUS_FIFO_BUSY\0" /* 4966 */
+ "CSF_RING_BUSY\0" /* 4984 */
+ "CSF_INDIRECT1_BUSY\0" /* 4998 */
+ "CSF_INDIRECT2_BUSY\0" /* 5017 */
+ "CSF_STATE_BUSY\0" /* 5036 */
+ "CSF_CE_INDR1_BUSY\0" /* 5051 */
+ "CSF_CE_INDR2_BUSY\0" /* 5069 */
+ "CSF_ARBITER_BUSY\0" /* 5087 */
+ "CSF_INPUT_BUSY\0" /* 5104 */
+ "OUTSTANDING_READ_TAGS\0" /* 5119 */
+ "HPD_PROCESSING_EOP_BUSY\0" /* 5141 */
+ "HQD_DISPATCH_BUSY\0" /* 5165 */
+ "HQD_IQ_TIMER_BUSY\0" /* 5183 */
+ "HQD_DMA_OFFLOAD_BUSY\0" /* 5201 */
+ "HQD_WAIT_SEMAPHORE_BUSY\0" /* 5222 */
+ "HQD_SIGNAL_SEMAPHORE_BUSY\0" /* 5246 */
+ "HQD_MESSAGE_BUSY\0" /* 5272 */
+ "HQD_PQ_FETCHER_BUSY\0" /* 5289 */
+ "HQD_IB_FETCHER_BUSY\0" /* 5309 */
+ "HQD_IQ_FETCHER_BUSY\0" /* 5329 */
+ "HQD_EOP_FETCHER_BUSY\0" /* 5349 */
+ "HQD_CONSUMED_RPTR_BUSY\0" /* 5370 */
+ "HQD_FETCHER_ARB_BUSY\0" /* 5393 */
+ "HQD_ROQ_ALIGN_BUSY\0" /* 5414 */
+ "HQD_ROQ_EOP_BUSY\0" /* 5433 */
+ "HQD_ROQ_IQ_BUSY\0" /* 5450 */
+ "HQD_ROQ_PQ_BUSY\0" /* 5466 */
+ "HQD_ROQ_IB_BUSY\0" /* 5482 */
+ "HQD_WPTR_POLL_BUSY\0" /* 5498 */
+ "HQD_PQ_BUSY\0" /* 5517 */
+ "HQD_IB_BUSY\0" /* 5529 */
+ "RING_FETCHING_DATA\0" /* 5541 */
+ "INDR1_FETCHING_DATA\0" /* 5560 */
+ "INDR2_FETCHING_DATA\0" /* 5580 */
+ "STATE_FETCHING_DATA\0" /* 5600 */
+ "TCIU_WAITING_ON_FREE\0" /* 5620 */
+ "TCIU_WAITING_ON_TAGS\0" /* 5641 */
+ "GFX_UTCL1_WAITING_ON_TRANS\0" /* 5662 */
+ "CMP_UTCL1_WAITING_ON_TRANS\0" /* 5689 */
+ "RCIU_WAITING_ON_FREE\0" /* 5716 */
+ "COHER_SIZE_HI_256B\0" /* 5737 */
+ "PRIM_COUNT\0" /* 5756 */
+ "VS_NO_EXTRA_BUFFER\0" /* 5767 */
+ "STREAMOUT_FULL_FLUSH\0" /* 5786 */
+ "ES_LIMIT\0" /* 5810, 5807 */
+ "VERT_REUSE\0" /* 5816 */
+ "DI_PT_NONE\0" /* 5827 */
+ "DI_PT_POINTLIST\0" /* 5838 */
+ "DI_PT_LINELIST\0" /* 5854 */
+ "DI_PT_LINESTRIP\0" /* 5869 */
+ "DI_PT_TRILIST\0" /* 5885 */
+ "DI_PT_TRIFAN\0" /* 5899 */
+ "DI_PT_TRISTRIP\0" /* 5912 */
+ "DI_PT_UNUSED_0\0" /* 5927 */
+ "DI_PT_UNUSED_1\0" /* 5942 */
+ "DI_PT_PATCH\0" /* 5957 */
+ "DI_PT_LINELIST_ADJ\0" /* 5969 */
+ "DI_PT_LINESTRIP_ADJ\0" /* 5988 */
+ "DI_PT_TRILIST_ADJ\0" /* 6008 */
+ "DI_PT_TRISTRIP_ADJ\0" /* 6026 */
+ "DI_PT_UNUSED_3\0" /* 6045 */
+ "DI_PT_UNUSED_4\0" /* 6060 */
+ "DI_PT_TRI_WITH_WFLAGS\0" /* 6075 */
+ "DI_PT_RECTLIST\0" /* 6097 */
+ "DI_PT_LINELOOP\0" /* 6112 */
+ "DI_PT_QUADLIST\0" /* 6127 */
+ "DI_PT_QUADSTRIP\0" /* 6142 */
+ "DI_PT_POLYGON\0" /* 6158 */
+ "DI_PT_2D_COPY_RECT_LIST_V0\0" /* 6172 */
+ "DI_PT_2D_COPY_RECT_LIST_V1\0" /* 6199 */
+ "DI_PT_2D_COPY_RECT_LIST_V2\0" /* 6226 */
+ "DI_PT_2D_COPY_RECT_LIST_V3\0" /* 6253 */
+ "DI_PT_2D_FILL_RECT_LIST\0" /* 6280 */
+ "DI_PT_2D_LINE_STRIP\0" /* 6304 */
+ "DI_PT_2D_TRI_STRIP\0" /* 6324 */
+ "PRIM_TYPE\0" /* 6343 */
+ "DI_INDEX_SIZE_16_BIT\0" /* 6353 */
+ "DI_INDEX_SIZE_32_BIT\0" /* 6374 */
+ "OFFCHIP_BUFFERING\0" /* 6395 */
+ "CLIP_VTX_REORDER_ENA\0" /* 6413 */
+ "NUM_CLIP_SEQ\0" /* 6434 */
+ "CLIPPED_PRIM_SEQ_STALL\0" /* 6447 */
+ "VE_NAN_PROC_DISABLE\0" /* 6470 */
+ "LINE_STIPPLE_VALUE\0" /* 6490 */
+ "CURRENT_PTR\0" /* 6509 */
+ "CURRENT_COUNT\0" /* 6521 */
+ "CE_TO_CSF_NOT_RDY_TO_RCV\0" /* 6535 */
+ "CE_TO_RAM_INIT_FETCHER_NOT_RDY_TO_RCV\0" /* 6560 */
+ "CE_WAITING_ON_DATA_FROM_RAM_INIT_FETCHER\0" /* 6598 */
+ "CE_TO_RAM_INIT_NOT_RDY\0" /* 6639 */
+ "CE_TO_RAM_DUMP_NOT_RDY\0" /* 6662 */
+ "CE_TO_RAM_WRITE_NOT_RDY\0" /* 6685 */
+ "CE_TO_INC_FIFO_NOT_RDY_TO_RCV\0" /* 6709 */
+ "CE_TO_WR_FIFO_NOT_RDY_TO_RCV\0" /* 6739 */
+ "CE_WAITING_ON_BUFFER_DATA\0" /* 6768 */
+ "CE_WAITING_ON_CE_BUFFER_FLAG\0" /* 6794 */
+ "CE_WAITING_ON_DE_COUNTER\0" /* 6823 */
+ "CE_WAITING_ON_DE_COUNTER_UNDERFLOW\0" /* 6848 */
+ "CE_STALLED_ON_TC_WR_CONFIRM\0" /* 6883 */
+ "CE_STALLED_ON_ATOMIC_RTN_DATA\0" /* 6911 */
+ "RBIU_TO_DMA_NOT_RDY_TO_RCV\0" /* 6941 */
+ "RBIU_TO_SEM_NOT_RDY_TO_RCV\0" /* 6968 */
+ "RBIU_TO_MEMWR_NOT_RDY_TO_RCV\0" /* 6995 */
+ "ME_HAS_ACTIVE_CE_BUFFER_FLAG\0" /* 7024 */
+ "ME_HAS_ACTIVE_DE_BUFFER_FLAG\0" /* 7053 */
+ "ME_STALLED_ON_TC_WR_CONFIRM\0" /* 7082 */
+ "ME_STALLED_ON_ATOMIC_RTN_DATA\0" /* 7110 */
+ "ME_WAITING_ON_TC_READ_DATA\0" /* 7140 */
+ "ME_WAITING_ON_REG_READ_DATA\0" /* 7167 */
+ "RCIU_WAITING_ON_GDS_FREE\0" /* 7195 */
+ "RCIU_WAITING_ON_GRBM_FREE\0" /* 7220 */
+ "RCIU_WAITING_ON_VGT_FREE\0" /* 7246 */
+ "RCIU_STALLED_ON_ME_READ\0" /* 7271 */
+ "RCIU_STALLED_ON_DMA_READ\0" /* 7295 */
+ "RCIU_STALLED_ON_APPEND_READ\0" /* 7320 */
+ "RCIU_HALTED_BY_REG_VIOLATION\0" /* 7348 */
+ "PFP_TO_CSF_NOT_RDY_TO_RCV\0" /* 7377 */
+ "PFP_TO_MEQ_NOT_RDY_TO_RCV\0" /* 7403 */
+ "PFP_TO_RCIU_NOT_RDY_TO_RCV\0" /* 7429 */
+ "PFP_TO_VGT_WRITES_PENDING\0" /* 7456 */
+ "PFP_RCIU_READ_PENDING\0" /* 7482 */
+ "PFP_WAITING_ON_BUFFER_DATA\0" /* 7504 */
+ "ME_WAIT_ON_CE_COUNTER\0" /* 7531 */
+ "ME_WAIT_ON_AVAIL_BUFFER\0" /* 7553 */
+ "GFX_CNTX_NOT_AVAIL_TO_ME\0" /* 7577 */
+ "ME_RCIU_NOT_RDY_TO_RCV\0" /* 7602 */
+ "ME_TO_CONST_NOT_RDY_TO_RCV\0" /* 7625 */
+ "ME_WAITING_DATA_FROM_PFP\0" /* 7652 */
+ "ME_WAITING_ON_PARTIAL_FLUSH\0" /* 7677 */
+ "MEQ_TO_ME_NOT_RDY_TO_RCV\0" /* 7705 */
+ "STQ_TO_ME_NOT_RDY_TO_RCV\0" /* 7730 */
+ "ME_WAITING_DATA_FROM_STQ\0" /* 7755 */
+ "PFP_STALLED_ON_TC_WR_CONFIRM\0" /* 7780 */
+ "PFP_STALLED_ON_ATOMIC_RTN_DATA\0" /* 7809 */
+ "EOPD_FIFO_NEEDS_SC_EOP_DONE\0" /* 7840 */
+ "EOPD_FIFO_NEEDS_WR_CONFIRM\0" /* 7868 */
+ "STRMO_WR_OF_PRIM_DATA_PENDING\0" /* 7895 */
+ "PIPE_STATS_WR_DATA_PENDING\0" /* 7925 */
+ "APPEND_RDY_WAIT_ON_CS_DONE\0" /* 7952, 7971 */
+ "APPEND_RDY_WAIT_ON_PS_DONE\0" /* 7979, 7998 */
+ "APPEND_WAIT_ON_WR_CONFIRM\0" /* 8006 */
+ "APPEND_ACTIVE_PARTITION\0" /* 8032 */
+ "APPEND_WAITING_TO_SEND_MEMWRITE\0" /* 8056 */
+ "SURF_SYNC_NEEDS_IDLE_CNTXS\0" /* 8088 */
+ "SURF_SYNC_NEEDS_ALL_CLEAN\0" /* 8115 */
+ "DC_BUSY\0" /* 8141 */
+ "PFP_BUSY\0" /* 8149 */
+ "MEQ_BUSY\0" /* 8158 */
+ "ME_BUSY\0" /* 8167 */
+ "QUERY_BUSY\0" /* 8175 */
+ "SURFACE_SYNC_BUSY\0" /* 8186 */
+ "RCIU_BUSY\0" /* 8204 */
+ "CPC_CPG_BUSY\0" /* 8214 */
+ "CE_BUSY\0" /* 8227 */
+ "INSTANCE_INDEX\0" /* 8235 */
+ "SH_INDEX\0" /* 8250 */
+ "SE_INDEX\0" /* 8259 */
+ "SH_BROADCAST_WRITES\0" /* 8268 */
+ "INSTANCE_BROADCAST_WRITES\0" /* 8288 */
+ "SE_BROADCAST_WRITES\0" /* 8314 */
+ "PRIMGEN_EN\0" /* 8342, 8334 */
+ "X_8K_DWORDS\0" /* 8345 */
+ "X_4K_DWORDS\0" /* 8357 */
+ "X_2K_DWORDS\0" /* 8369 */
+ "X_1K_DWORDS\0" /* 8381 */
+ "OFFCHIP_GRANULARITY\0" /* 8393 */
+ "ENABLE_PA_SC_OUT_OF_ORDER\0" /* 8413 */
+ "DISABLE_SC_DB_TILE_FIX\0" /* 8439 */
+ "DISABLE_AA_MASK_FULL_FIX\0" /* 8462 */
+ "ENABLE_1XMSAA_SAMPLE_LOCATIONS\0" /* 8487 */
+ "ENABLE_1XMSAA_SAMPLE_LOC_CENTROID\0" /* 8518 */
+ "DISABLE_SCISSOR_FIX\0" /* 8552 */
+ "DISABLE_PW_BUBBLE_COLLAPSE\0" /* 8572 */
+ "SEND_UNLIT_STILES_TO_PACKER\0" /* 8599 */
+ "DISABLE_DUALGRAD_PERF_OPTIMIZATION\0" /* 8627 */
+ "INST_INVALIDATE\0" /* 8667, 8662 */
+ "DATA_INVALIDATE\0" /* 8678 */
+ "INVALIDATE_VOLATILE\0" /* 8694 */
+ "TARGET_INST\0" /* 8714 */
+ "TARGET_DATA\0" /* 8726 */
+ "WRITEBACK\0" /* 8738 */
+ "VOL\0" /* 8748 */
+ "COMPLETE\0" /* 8752 */
+ "RET\0" /* 8761 */
+ "RUI\0" /* 8765 */
+ "RNG\0" /* 8769 */
+ "SQ_EXP_MRT\0" /* 8773 */
+ "SQ_EXP_MRTZ\0" /* 8784 */
+ "SQ_EXP_NULL\0" /* 8796 */
+ "SQ_EXP_POS\0" /* 8808 */
+ "SQ_EXP_PARAM\0" /* 8819 */
+ "TGT\0" /* 8832 */
+ "COMPR\0" /* 8836 */
+ "VM\0" /* 8842 */
+ "SQ_ENC_EXP_FIELD\0" /* 8845 */
+ "ENCODING\0" /* 8862 */
+ "ADDRESS\0" /* 8871 */
+ "COUNT_HI\0" /* 8879 */
+ "BASE_ADDRESS_HI\0" /* 8888, 8893 */
+ "STRIDE\0" /* 8904 */
+ "CACHE_SWIZZLE\0" /* 8911 */
+ "SWIZZLE_ENABLE\0" /* 8925 */
+ "SQ_SEL_0\0" /* 8940 */
+ "SQ_SEL_1\0" /* 8949 */
+ "SQ_SEL_RESERVED_0\0" /* 8965, 8958 */
+ "SQ_SEL_RESERVED_1\0" /* 8976, 8983 */
+ "SQ_SEL_X\0" /* 8994 */
+ "SQ_SEL_Y\0" /* 9003 */
+ "SQ_SEL_Z\0" /* 9012 */
+ "SQ_SEL_W\0" /* 9021 */
+ "DST_SEL_X\0" /* 9030 */
+ "DST_SEL_Y\0" /* 9040 */
+ "DST_SEL_Z\0" /* 9050 */
+ "DST_SEL_W\0" /* 9060 */
+ "BUF_NUM_FORMAT_UNORM\0" /* 9070 */
+ "BUF_NUM_FORMAT_SNORM\0" /* 9091 */
+ "BUF_NUM_FORMAT_USCALED\0" /* 9112 */
+ "BUF_NUM_FORMAT_SSCALED\0" /* 9135 */
+ "BUF_NUM_FORMAT_UINT\0" /* 9158 */
+ "BUF_NUM_FORMAT_SINT\0" /* 9178 */
+ "BUF_NUM_FORMAT_SNORM_OGL\0" /* 9198 */
+ "BUF_NUM_FORMAT_FLOAT\0" /* 9223 */
+ "NUM_FORMAT\0" /* 9248, 9244 */
+ "BUF_DATA_FORMAT_INVALID\0" /* 9255 */
+ "BUF_DATA_FORMAT_8\0" /* 9279 */
+ "BUF_DATA_FORMAT_16\0" /* 9297 */
+ "BUF_DATA_FORMAT_8_8\0" /* 9316 */
+ "BUF_DATA_FORMAT_32\0" /* 9336 */
+ "BUF_DATA_FORMAT_16_16\0" /* 9355 */
+ "BUF_DATA_FORMAT_10_11_11\0" /* 9377 */
+ "BUF_DATA_FORMAT_11_11_10\0" /* 9402 */
+ "BUF_DATA_FORMAT_10_10_10_2\0" /* 9427 */
+ "BUF_DATA_FORMAT_2_10_10_10\0" /* 9454 */
+ "BUF_DATA_FORMAT_8_8_8_8\0" /* 9481 */
+ "BUF_DATA_FORMAT_32_32\0" /* 9505 */
+ "BUF_DATA_FORMAT_16_16_16_16\0" /* 9527 */
+ "BUF_DATA_FORMAT_32_32_32\0" /* 9555 */
+ "BUF_DATA_FORMAT_32_32_32_32\0" /* 9580 */
+ "BUF_DATA_FORMAT_RESERVED_15\0" /* 9608 */
+ "DATA_FORMAT\0" /* 9636 */
+ "ELEMENT_SIZE\0" /* 9648 */
+ "INDEX_STRIDE\0" /* 9661 */
+ "ADD_TID_ENABLE\0" /* 9674 */
+ "ATC\0" /* 9689 */
+ "HASH_ENABLE\0" /* 9693 */
+ "HEAP\0" /* 9705 */
+ "MTYPE\0" /* 9710 */
+ "SQ_RSRC_BUF\0" /* 9716 */
+ "SQ_RSRC_BUF_RSVD_1\0" /* 9728 */
+ "SQ_RSRC_BUF_RSVD_2\0" /* 9747 */
+ "SQ_RSRC_BUF_RSVD_3\0" /* 9766 */
+ "USER_VM_ENABLE\0" /* 9785 */
+ "USER_VM_MODE\0" /* 9800, 9808 */
+ "NV\0" /* 9813 */
+ "MIN_LOD\0" /* 9816 */
+ "IMG_DATA_FORMAT_INVALID\0" /* 9824 */
+ "IMG_DATA_FORMAT_8\0" /* 9848 */
+ "IMG_DATA_FORMAT_16\0" /* 9866 */
+ "IMG_DATA_FORMAT_8_8\0" /* 9885 */
+ "IMG_DATA_FORMAT_32\0" /* 9905 */
+ "IMG_DATA_FORMAT_16_16\0" /* 9924 */
+ "IMG_DATA_FORMAT_10_11_11\0" /* 9946 */
+ "IMG_DATA_FORMAT_11_11_10\0" /* 9971 */
+ "IMG_DATA_FORMAT_10_10_10_2\0" /* 9996 */
+ "IMG_DATA_FORMAT_2_10_10_10\0" /* 10023 */
+ "IMG_DATA_FORMAT_8_8_8_8\0" /* 10050 */
+ "IMG_DATA_FORMAT_32_32\0" /* 10074 */
+ "IMG_DATA_FORMAT_16_16_16_16\0" /* 10096 */
+ "IMG_DATA_FORMAT_32_32_32\0" /* 10124 */
+ "IMG_DATA_FORMAT_32_32_32_32\0" /* 10149 */
+ "IMG_DATA_FORMAT_RESERVED_15\0" /* 10177 */
+ "IMG_DATA_FORMAT_5_6_5\0" /* 10205 */
+ "IMG_DATA_FORMAT_1_5_5_5\0" /* 10227 */
+ "IMG_DATA_FORMAT_5_5_5_1\0" /* 10251 */
+ "IMG_DATA_FORMAT_4_4_4_4\0" /* 10275 */
+ "IMG_DATA_FORMAT_8_24\0" /* 10299 */
+ "IMG_DATA_FORMAT_24_8\0" /* 10320 */
+ "IMG_DATA_FORMAT_X24_8_32\0" /* 10341 */
+ "IMG_DATA_FORMAT_8_AS_8_8_8_8\0" /* 10366 */
+ "IMG_DATA_FORMAT_ETC2_RGB\0" /* 10395 */
+ "IMG_DATA_FORMAT_ETC2_RGBA\0" /* 10420 */
+ "IMG_DATA_FORMAT_ETC2_R\0" /* 10446 */
+ "IMG_DATA_FORMAT_ETC2_RG\0" /* 10469 */
+ "IMG_DATA_FORMAT_ETC2_RGBA1\0" /* 10493 */
+ "IMG_DATA_FORMAT_RESERVED_29\0" /* 10520 */
+ "IMG_DATA_FORMAT_RESERVED_30\0" /* 10548 */
+ "IMG_DATA_FORMAT_RESERVED_31\0" /* 10576 */
+ "IMG_DATA_FORMAT_GB_GR\0" /* 10604 */
+ "IMG_DATA_FORMAT_BG_RG\0" /* 10626 */
+ "IMG_DATA_FORMAT_5_9_9_9\0" /* 10648 */
+ "IMG_DATA_FORMAT_BC1\0" /* 10672 */
+ "IMG_DATA_FORMAT_BC2\0" /* 10692 */
+ "IMG_DATA_FORMAT_BC3\0" /* 10712 */
+ "IMG_DATA_FORMAT_BC4\0" /* 10732 */
+ "IMG_DATA_FORMAT_BC5\0" /* 10752 */
+ "IMG_DATA_FORMAT_BC6\0" /* 10772 */
+ "IMG_DATA_FORMAT_BC7\0" /* 10792 */
+ "IMG_DATA_FORMAT_16_AS_16_16_16_16_GFX6\0" /* 10812 */
+ "IMG_DATA_FORMAT_16_AS_32_32_32_32_GFX6\0" /* 10851 */
+ "IMG_DATA_FORMAT_FMASK8_S2_F1\0" /* 10890 */
+ "IMG_DATA_FORMAT_FMASK8_S4_F1\0" /* 10919 */
+ "IMG_DATA_FORMAT_FMASK8_S8_F1\0" /* 10948 */
+ "IMG_DATA_FORMAT_FMASK8_S2_F2\0" /* 10977 */
+ "IMG_DATA_FORMAT_FMASK8_S4_F2\0" /* 11006 */
+ "IMG_DATA_FORMAT_FMASK8_S4_F4\0" /* 11035 */
+ "IMG_DATA_FORMAT_FMASK16_S16_F1\0" /* 11064 */
+ "IMG_DATA_FORMAT_FMASK16_S8_F2\0" /* 11095 */
+ "IMG_DATA_FORMAT_FMASK32_S16_F2\0" /* 11125 */
+ "IMG_DATA_FORMAT_FMASK32_S8_F4\0" /* 11156 */
+ "IMG_DATA_FORMAT_FMASK32_S8_F8\0" /* 11186 */
+ "IMG_DATA_FORMAT_FMASK64_S16_F4\0" /* 11216 */
+ "IMG_DATA_FORMAT_FMASK64_S16_F8\0" /* 11247 */
+ "IMG_DATA_FORMAT_4_4\0" /* 11278 */
+ "IMG_DATA_FORMAT_6_5_5\0" /* 11298 */
+ "IMG_DATA_FORMAT_1\0" /* 11320 */
+ "IMG_DATA_FORMAT_1_REVERSED\0" /* 11338 */
+ "IMG_DATA_FORMAT_32_AS_8\0" /* 11365 */
+ "IMG_DATA_FORMAT_32_AS_8_8\0" /* 11389 */
+ "IMG_DATA_FORMAT_32_AS_32_32_32_32\0" /* 11415 */
+ "DATA_FORMAT_GFX6\0" /* 11449 */
+ "IMG_NUM_FORMAT_UNORM\0" /* 11466 */
+ "IMG_NUM_FORMAT_SNORM\0" /* 11487 */
+ "IMG_NUM_FORMAT_USCALED\0" /* 11508 */
+ "IMG_NUM_FORMAT_SSCALED\0" /* 11531 */
+ "IMG_NUM_FORMAT_UINT\0" /* 11554 */
+ "IMG_NUM_FORMAT_SINT\0" /* 11574 */
+ "IMG_NUM_FORMAT_SNORM_OGL\0" /* 11594 */
+ "IMG_NUM_FORMAT_FLOAT\0" /* 11619 */
+ "IMG_NUM_FORMAT_RESERVED_8\0" /* 11640 */
+ "IMG_NUM_FORMAT_SRGB\0" /* 11666 */
+ "IMG_NUM_FORMAT_UBNORM\0" /* 11686 */
+ "IMG_NUM_FORMAT_UBNORM_OGL\0" /* 11708 */
+ "IMG_NUM_FORMAT_UBINT\0" /* 11734 */
+ "IMG_NUM_FORMAT_UBSCALED\0" /* 11755 */
+ "IMG_NUM_FORMAT_RESERVED_14\0" /* 11779 */
+ "IMG_NUM_FORMAT_RESERVED_15\0" /* 11806 */
+ "NUM_FORMAT_GFX6\0" /* 11833 */
+ "IMG_DATA_FORMAT_6E4\0" /* 11849 */
+ "IMG_DATA_FORMAT_16_AS_32_32\0" /* 11869 */
+ "IMG_DATA_FORMAT_16_AS_16_16_16_16_GFX9\0" /* 11897 */
+ "IMG_DATA_FORMAT_16_AS_32_32_32_32_GFX9\0" /* 11936 */
+ "IMG_DATA_FORMAT_FMASK\0" /* 11975 */
+ "IMG_DATA_FORMAT_ASTC_2D_LDR\0" /* 11997 */
+ "IMG_DATA_FORMAT_ASTC_2D_HDR\0" /* 12025 */
+ "IMG_DATA_FORMAT_ASTC_2D_LDR_SRGB\0" /* 12053 */
+ "IMG_DATA_FORMAT_ASTC_3D_LDR\0" /* 12086 */
+ "IMG_DATA_FORMAT_ASTC_3D_HDR\0" /* 12114 */
+ "IMG_DATA_FORMAT_ASTC_3D_LDR_SRGB\0" /* 12142 */
+ "IMG_DATA_FORMAT_N_IN_16\0" /* 12175 */
+ "IMG_DATA_FORMAT_N_IN_16_16\0" /* 12199 */
+ "IMG_DATA_FORMAT_N_IN_16_16_16_16\0" /* 12226 */
+ "IMG_DATA_FORMAT_N_IN_16_AS_16_16_16_16\0" /* 12259 */
+ "IMG_DATA_FORMAT_RESERVED_56\0" /* 12298 */
+ "IMG_DATA_FORMAT_S8_16\0" /* 12326 */
+ "IMG_DATA_FORMAT_S8_32\0" /* 12348 */
+ "IMG_DATA_FORMAT_8_AS_32\0" /* 12370 */
+ "IMG_DATA_FORMAT_8_AS_32_32\0" /* 12394 */
+ "DATA_FORMAT_GFX9\0" /* 12421 */
+ "IMG_NUM_FORMAT_RESERVED_6\0" /* 12438 */
+ "IMG_NUM_FORMAT_METADATA\0" /* 12464 */
+ "IMG_NUM_FORMAT_UNORM_UINT\0" /* 12488 */
+ "NUM_FORMAT_GFX9\0" /* 12514 */
+ "IMG_FMASK_8_2_1\0" /* 12530 */
+ "IMG_FMASK_8_4_1\0" /* 12546 */
+ "IMG_FMASK_8_8_1\0" /* 12562 */
+ "IMG_FMASK_8_2_2\0" /* 12578 */
+ "IMG_FMASK_8_4_2\0" /* 12594 */
+ "IMG_FMASK_8_4_4\0" /* 12610 */
+ "IMG_FMASK_16_16_1\0" /* 12626 */
+ "IMG_FMASK_16_8_2\0" /* 12644 */
+ "IMG_FMASK_32_16_2\0" /* 12661 */
+ "IMG_FMASK_32_8_4\0" /* 12679 */
+ "IMG_FMASK_32_8_8\0" /* 12696 */
+ "IMG_FMASK_64_16_4\0" /* 12713 */
+ "IMG_FMASK_64_16_8\0" /* 12731 */
+ "NUM_FORMAT_FMASK\0" /* 12749 */
+ "IMG_ASTC_2D_4x4\0" /* 12766 */
+ "IMG_ASTC_2D_5x4\0" /* 12782 */
+ "IMG_ASTC_2D_5x5\0" /* 12798 */
+ "IMG_ASTC_2D_6x5\0" /* 12814 */
+ "IMG_ASTC_2D_6x6\0" /* 12830 */
+ "IMG_ASTC_2D_8x5\0" /* 12846 */
+ "IMG_ASTC_2D_8x6\0" /* 12862 */
+ "IMG_ASTC_2D_8x8\0" /* 12878 */
+ "IMG_ASTC_2D_10x5\0" /* 12894 */
+ "IMG_ASTC_2D_10x6\0" /* 12911 */
+ "IMG_ASTC_2D_10x8\0" /* 12928 */
+ "IMG_ASTC_2D_10x10\0" /* 12945 */
+ "IMG_ASTC_2D_12x10\0" /* 12963 */
+ "IMG_ASTC_2D_12x12\0" /* 12981 */
+ "NUM_FORMAT_ASTC_2D\0" /* 13015, 12999 */
+ "IMG_ASTC_3D_3x3x3\0" /* 13018 */
+ "IMG_ASTC_3D_4x3x3\0" /* 13036 */
+ "IMG_ASTC_3D_4x4x3\0" /* 13054 */
+ "IMG_ASTC_3D_4x4x4\0" /* 13072 */
+ "IMG_ASTC_3D_5x4x4\0" /* 13090 */
+ "IMG_ASTC_3D_5x5x4\0" /* 13108 */
+ "IMG_ASTC_3D_5x5x5\0" /* 13126 */
+ "IMG_ASTC_3D_6x5x5\0" /* 13144 */
+ "IMG_ASTC_3D_6x6x5\0" /* 13162 */
+ "IMG_ASTC_3D_6x6x6\0" /* 13180 */
+ "NUM_FORMAT_ASTC_3D\0" /* 13214, 13198 */
+ "META_DIRECT\0" /* 13217 */
+ "WIDTH\0" /* 13229 */
+ "HEIGHT\0" /* 13235 */
+ "PERF_MOD\0" /* 13242 */
+ "INTERLACED\0" /* 13251 */
+ "BASE_LEVEL\0" /* 13262 */
+ "LAST_LEVEL\0" /* 13273 */
+ "TILING_INDEX\0" /* 13284 */
+ "POW2_PAD\0" /* 13297 */
+ "SQ_RSRC_IMG_RSVD_0\0" /* 13306 */
+ "SQ_RSRC_IMG_RSVD_1\0" /* 13325 */
+ "SQ_RSRC_IMG_RSVD_2\0" /* 13344 */
+ "SQ_RSRC_IMG_RSVD_3\0" /* 13363 */
+ "SQ_RSRC_IMG_RSVD_4\0" /* 13382 */
+ "SQ_RSRC_IMG_RSVD_5\0" /* 13401 */
+ "SQ_RSRC_IMG_RSVD_6\0" /* 13420 */
+ "SQ_RSRC_IMG_RSVD_7\0" /* 13439 */
+ "SQ_RSRC_IMG_1D\0" /* 13458, 13470 */
+ "SQ_RSRC_IMG_2D\0" /* 13473 */
+ "SQ_RSRC_IMG_3D\0" /* 13488 */
+ "SQ_RSRC_IMG_CUBE\0" /* 13503 */
+ "SQ_RSRC_IMG_1D_ARRAY\0" /* 13520 */
+ "SQ_RSRC_IMG_2D_ARRAY\0" /* 13541 */
+ "SQ_RSRC_IMG_2D_MSAA\0" /* 13562 */
+ "SQ_RSRC_IMG_2D_MSAA_ARRAY\0" /* 13582 */
+ "SW_MODE\0" /* 13608 */
+ "DEPTH\0" /* 13616 */
+ "PITCH_GFX6\0" /* 13622 */
+ "PITCH_GFX9\0" /* 13633 */
+ "BC_SWIZZLE_XYZW\0" /* 13644 */
+ "BC_SWIZZLE_XWYZ\0" /* 13660 */
+ "BC_SWIZZLE_WZYX\0" /* 13676 */
+ "BC_SWIZZLE_WXYZ\0" /* 13692 */
+ "BC_SWIZZLE_ZYXW\0" /* 13708 */
+ "BC_SWIZZLE_YXWZ\0" /* 13724 */
+ "BC_SWIZZLE\0" /* 13740 */
+ "BASE_ARRAY\0" /* 13751 */
+ "LAST_ARRAY\0" /* 13762 */
+ "ARRAY_PITCH\0" /* 13773 */
+ "META_DATA_ADDRESS\0" /* 13785 */
+ "META_LINEAR\0" /* 13808, 13803 */
+ "META_PIPE_ALIGNED\0" /* 13820, 13815 */
+ "META_RB_ALIGNED\0" /* 13833, 13838 */
+ "MAX_MIP\0" /* 13849 */
+ "MIN_LOD_WARN\0" /* 13857 */
+ "COUNTER_BANK_ID\0" /* 13870 */
+ "LOD_HDW_CNT_EN\0" /* 13886 */
+ "COMPRESSION_EN\0" /* 13901 */
+ "ALPHA_IS_ON_MSB\0" /* 13916 */
+ "COLOR_TRANSFORM\0" /* 13932 */
+ "LOST_ALPHA_BITS\0" /* 13948 */
+ "LOST_COLOR_BITS\0" /* 13964 */
+ "SQ_TEX_WRAP\0" /* 13980 */
+ "SQ_TEX_MIRROR\0" /* 13992 */
+ "SQ_TEX_CLAMP_LAST_TEXEL\0" /* 14006 */
+ "SQ_TEX_MIRROR_ONCE_LAST_TEXEL\0" /* 14030 */
+ "SQ_TEX_CLAMP_HALF_BORDER\0" /* 14060 */
+ "SQ_TEX_MIRROR_ONCE_HALF_BORDER\0" /* 14085 */
+ "SQ_TEX_CLAMP_BORDER\0" /* 14116 */
+ "SQ_TEX_MIRROR_ONCE_BORDER\0" /* 14136 */
+ "CLAMP_X\0" /* 14162 */
+ "CLAMP_Y\0" /* 14170 */
+ "CLAMP_Z\0" /* 14178 */
+ "MAX_ANISO_RATIO\0" /* 14186 */
+ "SQ_TEX_DEPTH_COMPARE_NEVER\0" /* 14202 */
+ "SQ_TEX_DEPTH_COMPARE_LESS\0" /* 14229 */
+ "SQ_TEX_DEPTH_COMPARE_EQUAL\0" /* 14255 */
+ "SQ_TEX_DEPTH_COMPARE_LESSEQUAL\0" /* 14282 */
+ "SQ_TEX_DEPTH_COMPARE_GREATER\0" /* 14313 */
+ "SQ_TEX_DEPTH_COMPARE_NOTEQUAL\0" /* 14342 */
+ "SQ_TEX_DEPTH_COMPARE_GREATEREQUAL\0" /* 14372 */
+ "SQ_TEX_DEPTH_COMPARE_ALWAYS\0" /* 14427, 14406 */
+ "DEPTH_COMPARE_FUNC\0" /* 14434 */
+ "FORCE_UNNORMALIZED\0" /* 14453 */
+ "ANISO_THRESHOLD\0" /* 14472 */
+ "MC_COORD_TRUNC\0" /* 14488 */
+ "FORCE_DEGAMMA\0" /* 14503 */
+ "ANISO_BIAS\0" /* 14517 */
+ "TRUNC_COORD\0" /* 14528 */
+ "DISABLE_CUBE_WRAP\0" /* 14540 */
+ "FILTER_MODE\0" /* 14558 */
+ "COMPAT_MODE\0" /* 14570 */
+ "MAX_LOD\0" /* 14582 */
+ "PERF_MIP\0" /* 14590 */
+ "PERF_Z\0" /* 14599 */
+ "LOD_BIAS\0" /* 14606 */
+ "LOD_BIAS_SEC\0" /* 14615 */
+ "SQ_TEX_XY_FILTER_POINT\0" /* 14642, 14628 */
+ "SQ_TEX_XY_FILTER_BILINEAR\0" /* 14651 */
+ "XY_MAG_FILTER\0" /* 14677 */
+ "SQ_TEX_XY_FILTER_ANISO_POINT\0" /* 14691 */
+ "SQ_TEX_XY_FILTER_ANISO_BILINEAR\0" /* 14720 */
+ "XY_MIN_FILTER\0" /* 14752 */
+ "SQ_TEX_Z_FILTER_NONE\0" /* 14766 */
+ "SQ_TEX_Z_FILTER_POINT\0" /* 14787 */
+ "SQ_TEX_Z_FILTER_LINEAR\0" /* 14809 */
+ "Z_FILTER\0" /* 14832 */
+ "MIP_FILTER\0" /* 14841 */
+ "MIP_POINT_PRECLAMP\0" /* 14852 */
+ "DISABLE_LSB_CEIL\0" /* 14871 */
+ "FILTER_PREC_FIX\0" /* 14888 */
+ "ANISO_OVERRIDE\0" /* 14904 */
+ "BLEND_ZERO_PRT\0" /* 14919 */
+ "BORDER_COLOR_PTR\0" /* 14934 */
+ "UPGRADED_DEPTH\0" /* 14951 */
+ "SQ_TEX_BORDER_COLOR_TRANS_BLACK\0" /* 14966 */
+ "SQ_TEX_BORDER_COLOR_OPAQUE_BLACK\0" /* 14998 */
+ "SQ_TEX_BORDER_COLOR_OPAQUE_WHITE\0" /* 15031 */
+ "SQ_TEX_BORDER_COLOR_REGISTER\0" /* 15064 */
+ "BORDER_COLOR_TYPE\0" /* 15093 */
+ "SKIP_DEGAMMA\0" /* 15111 */
+ "VS_LOW_THRESHOLD\0" /* 15124 */
+ "GS_LOW_THRESHOLD\0" /* 15141 */
+ "ES_LOW_THRESHOLD\0" /* 15158 */
+ "HS_LOW_THRESHOLD\0" /* 15175 */
+ "LS_LOW_THRESHOLD\0" /* 15192 */
+ "PS_CU_EN\0" /* 15209, 15212 */
+ "VS_CU_EN\0" /* 15218 */
+ "GS_CU_EN\0" /* 15227 */
+ "ES_CU_EN\0" /* 15236 */
+ "LSHS_CU_EN\0" /* 15245 */
+ "MAX_WAVE_ID\0" /* 15256 */
+ "X_R0\0" /* 15268 */
+ "RING_ORDER_TS0\0" /* 15273 */
+ "RING_ORDER_TS1\0" /* 15288 */
+ "RING_ORDER_TS2\0" /* 15303 */
+ "PIPE_ORDER_TS0\0" /* 15318 */
+ "PIPE_ORDER_TS1\0" /* 15333 */
+ "PIPE_ORDER_TS2\0" /* 15348 */
+ "PIPE_ORDER_TS3\0" /* 15363 */
+ "TS0_DUR_MULT\0" /* 15378 */
+ "TS1_DUR_MULT\0" /* 15391 */
+ "TS2_DUR_MULT\0" /* 15404 */
+ "TS3_DUR_MULT\0" /* 15417 */
+ "TS0_DURATION\0" /* 15430 */
+ "TS1_DURATION\0" /* 15443 */
+ "TS2_DURATION\0" /* 15456 */
+ "GPR_WRITE_PRIORITY\0" /* 15469, 15479 */
+ "EXP_PRIORITY_ORDER\0" /* 15488 */
+ "ENABLE_SQG_TOP_EVENTS\0" /* 15507 */
+ "ENABLE_SQG_BOP_EVENTS\0" /* 15529 */
+ "RSRC_MGMT_RESET\0" /* 15551 */
+ "X_DELAY_14_CLKS\0" /* 15567 */
+ "X_DELAY_16_CLKS\0" /* 15583 */
+ "X_DELAY_18_CLKS\0" /* 15599 */
+ "X_DELAY_20_CLKS\0" /* 15615 */
+ "X_DELAY_22_CLKS\0" /* 15631 */
+ "X_DELAY_24_CLKS\0" /* 15647 */
+ "X_DELAY_26_CLKS\0" /* 15663 */
+ "X_DELAY_28_CLKS\0" /* 15679 */
+ "X_DELAY_30_CLKS\0" /* 15695 */
+ "X_DELAY_32_CLKS\0" /* 15711 */
+ "X_DELAY_34_CLKS\0" /* 15727 */
+ "X_DELAY_4_CLKS\0" /* 15743 */
+ "X_DELAY_6_CLKS\0" /* 15758 */
+ "X_DELAY_8_CLKS\0" /* 15773 */
+ "X_DELAY_10_CLKS\0" /* 15788 */
+ "X_DELAY_12_CLKS\0" /* 15804 */
+ "VTX_DONE_DELAY\0" /* 15820 */
+ "INTERP_ONE_PRIM_PER_ROW\0" /* 15835 */
+ "PC_LIMIT_ENABLE\0" /* 15859 */
+ "PC_LIMIT_STRICT\0" /* 15875 */
+ "PC_LIMIT_SIZE\0" /* 15891 */
+ "TYPE_A\0" /* 15905 */
+ "VGPR_A\0" /* 15912 */
+ "SGPR_A\0" /* 15919 */
+ "LDS_A\0" /* 15926 */
+ "WAVES_A\0" /* 15932 */
+ "EN_A\0" /* 15940 */
+ "TYPE_B\0" /* 15945 */
+ "VGPR_B\0" /* 15952 */
+ "SGPR_B\0" /* 15959 */
+ "LDS_B\0" /* 15966 */
+ "WAVES_B\0" /* 15972 */
+ "EN_B\0" /* 15980 */
+ "MSAA1_X\0" /* 15985 */
+ "MSAA1_Y\0" /* 15993 */
+ "MSAA2_X\0" /* 16001 */
+ "MSAA2_Y\0" /* 16009 */
+ "MSAA4_X\0" /* 16017 */
+ "MSAA4_Y\0" /* 16025 */
+ "MSAA8_X\0" /* 16033 */
+ "MSAA8_Y\0" /* 16041 */
+ "MSAA16_X\0" /* 16049 */
+ "MSAA16_Y\0" /* 16058 */
+ "NUM_PIPES\0" /* 16067 */
+ "PIPE_INTERLEAVE_SIZE_GFX6\0" /* 16077 */
+ "BANK_INTERLEAVE_SIZE\0" /* 16103 */
+ "NUM_SHADER_ENGINES_GFX6\0" /* 16124 */
+ "SHADER_ENGINE_TILE_SIZE\0" /* 16148 */
+ "NUM_GPUS_GFX6\0" /* 16172 */
+ "MULTI_GPU_TILE_SIZE\0" /* 16186 */
+ "ROW_SIZE\0" /* 16206 */
+ "NUM_LOWER_PIPES\0" /* 16215 */
+ "PIPE_INTERLEAVE_SIZE_GFX9\0" /* 16231 */
+ "MAX_COMPRESSED_FRAGS\0" /* 16257 */
+ "NUM_BANKS\0" /* 16278 */
+ "NUM_SHADER_ENGINES_GFX9\0" /* 16288 */
+ "NUM_GPUS_GFX9\0" /* 16312 */
+ "NUM_RB_PER_SE\0" /* 16326 */
+ "SE_ENABLE\0" /* 16340 */
+ "ADDR_SURF_DISPLAY_MICRO_TILING\0" /* 16350 */
+ "ADDR_SURF_THIN_MICRO_TILING\0" /* 16381 */
+ "ADDR_SURF_DEPTH_MICRO_TILING\0" /* 16409 */
+ "ADDR_SURF_THICK_MICRO_TILING\0" /* 16438 */
+ "MICRO_TILE_MODE\0" /* 16467 */
+ "ARRAY_LINEAR_GENERAL\0" /* 16489, 16483 */
+ "ARRAY_LINEAR_ALIGNED\0" /* 16504 */
+ "ARRAY_1D_TILED_THIN1\0" /* 16525 */
+ "ARRAY_1D_TILED_THICK\0" /* 16546 */
+ "ARRAY_2D_TILED_THIN1\0" /* 16567 */
+ "ARRAY_2D_TILED_THICK\0" /* 16588 */
+ "ARRAY_2D_TILED_XTHICK\0" /* 16609 */
+ "ARRAY_3D_TILED_THIN1\0" /* 16631 */
+ "ARRAY_3D_TILED_THICK\0" /* 16652 */
+ "ARRAY_3D_TILED_XTHICK\0" /* 16673 */
+ "ARRAY_POWER_SAVE\0" /* 16695 */
+ "ARRAY_MODE\0" /* 16712 */
+ "ADDR_SURF_P2\0" /* 16723 */
+ "ADDR_SURF_P2_RESERVED0\0" /* 16736 */
+ "ADDR_SURF_P2_RESERVED1\0" /* 16759 */
+ "ADDR_SURF_P2_RESERVED2\0" /* 16795, 16782 */
+ "X_ADDR_SURF_P4_8X16\0" /* 16805 */
+ "X_ADDR_SURF_P4_16X16\0" /* 16825 */
+ "X_ADDR_SURF_P4_16X32\0" /* 16846 */
+ "X_ADDR_SURF_P4_32X32\0" /* 16867 */
+ "X_ADDR_SURF_P8_16X16_8X16\0" /* 16888 */
+ "X_ADDR_SURF_P8_16X32_8X16\0" /* 16914 */
+ "X_ADDR_SURF_P8_32X32_8X16\0" /* 16940 */
+ "X_ADDR_SURF_P8_16X32_16X16\0" /* 16966 */
+ "X_ADDR_SURF_P8_32X32_16X16\0" /* 16993 */
+ "X_ADDR_SURF_P8_32X32_16X32\0" /* 17020 */
+ "X_ADDR_SURF_P8_32X64_32X32\0" /* 17047 */
+ "PIPE_CONFIG\0" /* 17074 */
+ "ADDR_SURF_TILE_SPLIT_64B\0" /* 17086 */
+ "ADDR_SURF_TILE_SPLIT_128B\0" /* 17111 */
+ "ADDR_SURF_TILE_SPLIT_256B\0" /* 17137 */
+ "ADDR_SURF_TILE_SPLIT_512B\0" /* 17163 */
+ "ADDR_SURF_TILE_SPLIT_1KB\0" /* 17189 */
+ "ADDR_SURF_TILE_SPLIT_2KB\0" /* 17214 */
+ "ADDR_SURF_TILE_SPLIT_4KB\0" /* 17239 */
+ "TILE_SPLIT\0" /* 17264 */
+ "ADDR_SURF_BANK_WIDTH_1\0" /* 17275 */
+ "ADDR_SURF_BANK_WIDTH_2\0" /* 17298 */
+ "ADDR_SURF_BANK_WIDTH_4\0" /* 17321 */
+ "ADDR_SURF_BANK_WIDTH_8\0" /* 17344 */
+ "BANK_WIDTH\0" /* 17367 */
+ "ADDR_SURF_BANK_HEIGHT_1\0" /* 17378 */
+ "ADDR_SURF_BANK_HEIGHT_2\0" /* 17402 */
+ "ADDR_SURF_BANK_HEIGHT_4\0" /* 17426 */
+ "ADDR_SURF_BANK_HEIGHT_8\0" /* 17450 */
+ "BANK_HEIGHT\0" /* 17474 */
+ "ADDR_SURF_MACRO_ASPECT_1\0" /* 17486 */
+ "ADDR_SURF_MACRO_ASPECT_2\0" /* 17511 */
+ "ADDR_SURF_MACRO_ASPECT_4\0" /* 17536 */
+ "ADDR_SURF_MACRO_ASPECT_8\0" /* 17561 */
+ "MACRO_TILE_ASPECT\0" /* 17586 */
+ "ADDR_SURF_2_BANK\0" /* 17604 */
+ "ADDR_SURF_4_BANK\0" /* 17621 */
+ "ADDR_SURF_8_BANK\0" /* 17638 */
+ "ADDR_SURF_16_BANK\0" /* 17655 */
+ "ADDR_SURF_ROTATED_MICRO_TILING\0" /* 17673 */
+ "MICRO_TILE_MODE_NEW\0" /* 17704 */
+ "SAMPLE_SPLIT\0" /* 17724 */
+ "MEM_BASE\0" /* 17737 */
+ "WAVE_LIMIT\0" /* 17746 */
+ "LOCK_LOW_THRESHOLD\0" /* 17757 */
+ "SIMD_DISABLE\0" /* 17776 */
+ "VGPRS\0" /* 17789 */
+ "SGPRS\0" /* 17795 */
+ "FP_32_DENORMS\0" /* 17801 */
+ "FP_64_DENORMS\0" /* 17815 */
+ "FP_ALL_DENORMS\0" /* 17829 */
+ "FLOAT_MODE\0" /* 17844 */
+ "PRIV\0" /* 17855 */
+ "DX10_CLAMP\0" /* 17860 */
+ "DEBUG_MODE\0" /* 17871 */
+ "IEEE_MODE\0" /* 17882 */
+ "CU_GROUP_DISABLE\0" /* 17892 */
+ "CACHE_CTL\0" /* 17909 */
+ "CDBG_USER\0" /* 17919 */
+ "FP16_OVFL\0" /* 17929 */
+ "SCRATCH_EN\0" /* 17939 */
+ "USER_SGPR\0" /* 17950 */
+ "TRAP_PRESENT\0" /* 17960 */
+ "WAVE_CNT_EN\0" /* 17973 */
+ "EXTRA_LDS_SIZE\0" /* 17985, 17991 */
+ "EXCP_EN_SI\0" /* 18000 */
+ "EXCP_EN\0" /* 18011 */
+ "LOAD_COLLISION_WAVEID\0" /* 18019 */
+ "LOAD_INTRAWAVE_COLLISION\0" /* 18041 */
+ "SKIP_USGPR0\0" /* 18066 */
+ "USER_SGPR_MSB\0" /* 18078 */
+ "VGPR_COMP_CNT\0" /* 18092, 18102 */
+ "CU_GROUP_ENABLE\0" /* 18106 */
+ "OC_LDS_EN\0" /* 18122 */
+ "SO_BASE0_EN\0" /* 18132 */
+ "SO_BASE1_EN\0" /* 18144 */
+ "SO_BASE2_EN\0" /* 18156 */
+ "SO_BASE3_EN\0" /* 18168 */
+ "SO_EN\0" /* 18180 */
+ "DISPATCH_DRAW_EN\0" /* 18186 */
+ "PC_BASE_EN\0" /* 18203 */
+ "GROUP_FIFO_DEPTH\0" /* 18214 */
+ "GS_VGPR_COMP_CNT\0" /* 18231 */
+ "ES_VGPR_COMP_CNT\0" /* 18248 */
+ "LS_VGPR_COMP_CNT\0" /* 18265 */
+ "TG_SIZE_EN\0" /* 18282 */
+ "EXCP_EN_CIK_VI\0" /* 18293 */
+ "COMPUTE_SHADER_EN\0" /* 18308 */
+ "PARTIAL_TG_EN\0" /* 18326 */
+ "FORCE_START_AT_000\0" /* 18340 */
+ "ORDERED_APPEND_ENBL\0" /* 18359 */
+ "ORDERED_APPEND_MODE\0" /* 18379 */
+ "USE_THREAD_DIMENSIONS\0" /* 18399 */
+ "ORDER_MODE\0" /* 18421 */
+ "DISPATCH_CACHE_CNTL\0" /* 18432 */
+ "SCALAR_L1_INV_VOL\0" /* 18452 */
+ "VECTOR_L1_INV_VOL\0" /* 18470 */
+ "DATA_ATC\0" /* 18488 */
+ "RESTORE\0" /* 18497 */
+ "NUM_THREAD_FULL\0" /* 18505 */
+ "NUM_THREAD_PARTIAL\0" /* 18521 */
+ "PIPELINESTAT_ENABLE\0" /* 18540 */
+ "PERFCOUNT_ENABLE\0" /* 18560 */
+ "INST_ATC\0" /* 18577 */
+ "BULKY\0" /* 18586 */
+ "TGID_X_EN\0" /* 18592 */
+ "TGID_Y_EN\0" /* 18602 */
+ "TGID_Z_EN\0" /* 18612 */
+ "TIDIG_COMP_CNT\0" /* 18622 */
+ "EXCP_EN_MSB\0" /* 18637 */
+ "WAVES_PER_SH_SI\0" /* 18649 */
+ "WAVES_PER_SH\0" /* 18665 */
+ "TG_PER_CU\0" /* 18678 */
+ "LOCK_THRESHOLD\0" /* 18688 */
+ "SIMD_DEST_CNTL\0" /* 18703 */
+ "FORCE_SIMD_DIST\0" /* 18718 */
+ "CU_GROUP_COUNT\0" /* 18734 */
+ "SH0_CU_EN\0" /* 18749 */
+ "SH1_CU_EN\0" /* 18759 */
+ "WAVES\0" /* 18769 */
+ "WAVESIZE\0" /* 18775 */
+ "SEND_SEID\0" /* 18784 */
+ "RESERVED3\0" /* 18794 */
+ "RESERVED4\0" /* 18804 */
+ "WAVE_ID_BASE\0" /* 18814 */
+ "PAYLOAD\0" /* 18827 */
+ "IS_EVENT\0" /* 18835 */
+ "IS_STATE\0" /* 18844 */
+ "PERFCOUNTER_HI\0" /* 18853 */
+ "PERF_SEL2\0" /* 18868 */
+ "PERF_SEL3\0" /* 18878 */
+ "CNTR_SEL2\0" /* 18888 */
+ "CNTR_SEL3\0" /* 18898 */
+ "CNTR_MODE3\0" /* 18908 */
+ "CNTR_MODE2\0" /* 18919 */
+ "PERF_SEL\0" /* 18930 */
+ "PERF_SEL1\0" /* 18939 */
+ "CNTR_MODE\0" /* 18949 */
+ "CNTR_SEL0\0" /* 18959 */
+ "CNTR_SEL1\0" /* 18969 */
+ "SPM_MODE\0" /* 18979 */
+ "CNTR_MODE1\0" /* 18988 */
+ "CNTR_MODE0\0" /* 18999 */
+ "DISABLE_AND_RESET\0" /* 19010 */
+ "START_COUNTING\0" /* 19028 */
+ "STOP_COUNTING\0" /* 19043 */
+ "PERFMON_STATE\0" /* 19057 */
+ "SPM_PERFMON_STATE\0" /* 19071 */
+ "PERFMON_ENABLE_MODE\0" /* 19089 */
+ "PERFMON_SAMPLE_ENABLE\0" /* 19109 */
+ "DB_CLEAN_USER_DEFINED_MASK\0" /* 19131 */
+ "CB_CLEAN_USER_DEFINED_MASK\0" /* 19158 */
+ "VGT_BUSY_USER_DEFINED_MASK\0" /* 19185 */
+ "TA_BUSY_USER_DEFINED_MASK\0" /* 19212 */
+ "SX_BUSY_USER_DEFINED_MASK\0" /* 19238 */
+ "SPI_BUSY_USER_DEFINED_MASK\0" /* 19264 */
+ "SC_BUSY_USER_DEFINED_MASK\0" /* 19291 */
+ "PA_BUSY_USER_DEFINED_MASK\0" /* 19317 */
+ "GRBM_BUSY_USER_DEFINED_MASK\0" /* 19343 */
+ "DB_BUSY_USER_DEFINED_MASK\0" /* 19371 */
+ "CB_BUSY_USER_DEFINED_MASK\0" /* 19397 */
+ "CP_BUSY_USER_DEFINED_MASK\0" /* 19423 */
+ "IA_BUSY_USER_DEFINED_MASK\0" /* 19449 */
+ "GDS_BUSY_USER_DEFINED_MASK\0" /* 19475 */
+ "BCI_BUSY_USER_DEFINED_MASK\0" /* 19502 */
+ "RLC_BUSY_USER_DEFINED_MASK\0" /* 19529 */
+ "TC_BUSY_USER_DEFINED_MASK\0" /* 19556 */
+ "WD_BUSY_USER_DEFINED_MASK\0" /* 19582 */
+ "UTCL2_BUSY_USER_DEFINED_MASK\0" /* 19608 */
+ "EA_BUSY_USER_DEFINED_MASK\0" /* 19637 */
+ "RMI_BUSY_USER_DEFINED_MASK\0" /* 19663 */
+ "PERF_MODE\0" /* 19690 */
+ "PERF_MODE1\0" /* 19700 */
+ "PERF_MODE3\0" /* 19711 */
+ "PERF_MODE2\0" /* 19722 */
+ "PERF_SEID_IGNORE_MASK\0" /* 19733 */
+ "BIN0_MIN\0" /* 19755 */
+ "BIN0_MAX\0" /* 19764 */
+ "BIN1_MIN\0" /* 19773 */
+ "BIN1_MAX\0" /* 19782 */
+ "BIN2_MIN\0" /* 19791 */
+ "BIN2_MAX\0" /* 19800 */
+ "BIN3_MIN\0" /* 19809 */
+ "BIN3_MAX\0" /* 19818 */
+ "SQC_BANK_MASK\0" /* 19827 */
+ "SQC_CLIENT_MASK\0" /* 19841 */
+ "SIMD_MASK\0" /* 19857 */
+ "PS_EN\0" /* 19867 */
+ "VS_EN\0" /* 19873 */
+ "GS_EN\0" /* 19879 */
+ "ES_EN\0" /* 19885 */
+ "HS_EN\0" /* 19891 */
+ "LS_EN\0" /* 19897 */
+ "CS_EN\0" /* 19903 */
+ "CNTR_RATE\0" /* 19909 */
+ "DISABLE_FLUSH\0" /* 19919 */
+ "SH0_MASK\0" /* 19933 */
+ "SH1_MASK\0" /* 19942 */
+ "FORCE_EN\0" /* 19951 */
+ "PERFCOUNTER_SELECT\0" /* 19960 */
+ "PERFCOUNTER_SELECT1\0" /* 19979 */
+ "PERFCOUNTER_SELECT2\0" /* 19999 */
+ "PERFCOUNTER_SELECT3\0" /* 20019 */
+ "OP_FILTER_ENABLE\0" /* 20039 */
+ "OP_FILTER_SEL\0" /* 20056 */
+ "FORMAT_FILTER_ENABLE\0" /* 20070 */
+ "FORMAT_FILTER_SEL\0" /* 20091 */
+ "CLEAR_FILTER_ENABLE\0" /* 20109 */
+ "CLEAR_FILTER_SEL\0" /* 20129 */
+ "MRT_FILTER_ENABLE\0" /* 20146 */
+ "MRT_FILTER_SEL\0" /* 20164 */
+ "NUM_SAMPLES_FILTER_ENABLE\0" /* 20179 */
+ "NUM_SAMPLES_FILTER_SEL\0" /* 20205 */
+ "NUM_FRAGMENTS_FILTER_ENABLE\0" /* 20228 */
+ "NUM_FRAGMENTS_FILTER_SEL\0" /* 20256 */
+ "DEPTH_CLEAR_ENABLE\0" /* 20281 */
+ "STENCIL_CLEAR_ENABLE\0" /* 20300 */
+ "DEPTH_COPY\0" /* 20321 */
+ "STENCIL_COPY\0" /* 20332 */
+ "RESUMMARIZE_ENABLE\0" /* 20345 */
+ "STENCIL_COMPRESS_DISABLE\0" /* 20364 */
+ "DEPTH_COMPRESS_DISABLE\0" /* 20389 */
+ "COPY_CENTROID\0" /* 20412 */
+ "COPY_SAMPLE\0" /* 20426 */
+ "DECOMPRESS_ENABLE\0" /* 20438 */
+ "ZPASS_INCREMENT_DISABLE\0" /* 20456 */
+ "PERFECT_ZPASS_COUNTS\0" /* 20480 */
+ "SAMPLE_RATE\0" /* 20501 */
+ "ZPASS_ENABLE\0" /* 20513 */
+ "ZFAIL_ENABLE\0" /* 20526 */
+ "SFAIL_ENABLE\0" /* 20539 */
+ "DBFAIL_ENABLE\0" /* 20552 */
+ "SLICE_EVEN_ENABLE\0" /* 20566 */
+ "SLICE_ODD_ENABLE\0" /* 20584 */
+ "SLICE_START\0" /* 20601 */
+ "SLICE_MAX\0" /* 20613 */
+ "Z_READ_ONLY\0" /* 20623 */
+ "STENCIL_READ_ONLY\0" /* 20635 */
+ "MIPID\0" /* 20653 */
+ "FORCE_OFF\0" /* 20659 */
+ "FORCE_ENABLE\0" /* 20669 */
+ "FORCE_DISABLE\0" /* 20682 */
+ "FORCE_RESERVED\0" /* 20696 */
+ "FORCE_HIZ_ENABLE\0" /* 20719, 20711 */
+ "FORCE_HIS_ENABLE0\0" /* 20728, 20738 */
+ "FORCE_HIS_ENABLE1\0" /* 20746, 20756 */
+ "FORCE_SHADER_Z_ORDER\0" /* 20777, 20764 */
+ "FAST_Z_DISABLE\0" /* 20785 */
+ "FAST_STENCIL_DISABLE\0" /* 20800 */
+ "NOOP_CULL_DISABLE\0" /* 20821 */
+ "FORCE_COLOR_KILL\0" /* 20839 */
+ "FORCE_Z_READ\0" /* 20856 */
+ "FORCE_STENCIL_READ\0" /* 20869 */
+ "FORCE_FULL_Z_RANGE\0" /* 20888 */
+ "FORCE_QC_SMASK_CONFLICT\0" /* 20907 */
+ "DISABLE_VIEWPORT_CLAMP\0" /* 20931 */
+ "IGNORE_SC_ZRANGE\0" /* 20954 */
+ "DISABLE_FULLY_COVERED\0" /* 20971 */
+ "FORCE_SUMM_OFF\0" /* 20993 */
+ "FORCE_SUMM_MINZ\0" /* 21008 */
+ "FORCE_SUMM_MAXZ\0" /* 21024 */
+ "FORCE_SUMM_BOTH\0" /* 21040 */
+ "FORCE_Z_LIMIT_SUMM\0" /* 21056 */
+ "MAX_TILES_IN_DTT\0" /* 21075 */
+ "DISABLE_TILE_RATE_TILES\0" /* 21092 */
+ "FORCE_Z_DIRTY\0" /* 21124, 21116 */
+ "FORCE_STENCIL_DIRTY\0" /* 21130 */
+ "FORCE_Z_VALID\0" /* 21150 */
+ "FORCE_STENCIL_VALID\0" /* 21164 */
+ "PRESERVE_COMPRESSION\0" /* 21184, 21193 */
+ "PSLC_AUTO\0" /* 21205 */
+ "PSLC_ON_HANG_ONLY\0" /* 21215 */
+ "PSLC_ASAP\0" /* 21233 */
+ "PSLC_COUNTDOWN\0" /* 21243 */
+ "PARTIAL_SQUAD_LAUNCH_CONTROL\0" /* 21258 */
+ "PARTIAL_SQUAD_LAUNCH_COUNTDOWN\0" /* 21287 */
+ "DISABLE_ZMASK_EXPCLEAR_OPTIMIZATION\0" /* 21318 */
+ "DISABLE_SMEM_EXPCLEAR_OPTIMIZATION\0" /* 21354 */
+ "DISABLE_COLOR_ON_VALIDATION\0" /* 21389 */
+ "DECOMPRESS_Z_ON_FLUSH\0" /* 21417 */
+ "DISABLE_REG_SNOOP\0" /* 21439 */
+ "DEPTH_BOUNDS_HIER_DEPTH_DISABLE\0" /* 21457 */
+ "SEPARATE_HIZS_FUNC_ENABLE\0" /* 21489 */
+ "HIZ_ZFUNC\0" /* 21515, 21519 */
+ "HIS_SFUNC_FF\0" /* 21525 */
+ "HIS_SFUNC_BF\0" /* 21538 */
+ "PRESERVE_ZRANGE\0" /* 21551 */
+ "PRESERVE_SRESULTS\0" /* 21567 */
+ "DISABLE_FAST_PASS\0" /* 21585 */
+ "ALLOW_PARTIAL_RES_HIER_KILL\0" /* 21603 */
+ "CLEAR\0" /* 21631 */
+ "TL_X\0" /* 21637 */
+ "TL_Y\0" /* 21642 */
+ "BR_X\0" /* 21647 */
+ "BR_Y\0" /* 21652 */
+ "ADDR5_SWIZZLE_MASK\0" /* 21657 */
+ "ARRAY_PRT_TILED_THIN1\0" /* 21676 */
+ "ARRAY_PRT_2D_TILED_THIN1\0" /* 21698 */
+ "X_ADDR_SURF_P16_32X32_8X16\0" /* 21723 */
+ "X_ADDR_SURF_P16_32X32_16X16\0" /* 21750 */
+ "Z_INVALID\0" /* 21778 */
+ "Z_16\0" /* 21788 */
+ "Z_24\0" /* 21793 */
+ "Z_32_FLOAT\0" /* 21798 */
+ "NUM_SAMPLES\0" /* 21809 */
+ "TILE_MODE_INDEX\0" /* 21821 */
+ "DECOMPRESS_ON_N_ZPLANES\0" /* 21837 */
+ "ALLOW_EXPCLEAR\0" /* 21861 */
+ "READ_SIZE\0" /* 21876 */
+ "TILE_SURFACE_ENABLE\0" /* 21886 */
+ "CLEAR_DISALLOWED\0" /* 21906 */
+ "ZRANGE_PRECISION\0" /* 21923 */
+ "STENCIL_INVALID\0" /* 21940 */
+ "STENCIL_8\0" /* 21956 */
+ "TILE_STENCIL_DISABLE\0" /* 21966 */
+ "PITCH_TILE_MAX\0" /* 21993, 21987 */
+ "HEIGHT_TILE_MAX\0" /* 22002 */
+ "SLICE_TILE_MAX\0" /* 22018 */
+ "DEST_BASE_HI_256B\0" /* 22033 */
+ "WINDOW_X_OFFSET\0" /* 22058, 22051 */
+ "WINDOW_Y_OFFSET\0" /* 22074, 22067 */
+ "WINDOW_OFFSET_DISABLE\0" /* 22083 */
+ "CLIP_RULE\0" /* 22105 */
+ "ER_TRI\0" /* 22115 */
+ "ER_RECT\0" /* 22122 */
+ "ER_LINE_LR\0" /* 22130 */
+ "ER_LINE_RL\0" /* 22141 */
+ "ER_LINE_TB\0" /* 22152 */
+ "ER_LINE_BT\0" /* 22163 */
+ "HW_SCREEN_OFFSET_X\0" /* 22174 */
+ "HW_SCREEN_OFFSET_Y\0" /* 22193 */
+ "TARGET0_ENABLE\0" /* 22212 */
+ "TARGET1_ENABLE\0" /* 22227 */
+ "TARGET2_ENABLE\0" /* 22242 */
+ "TARGET3_ENABLE\0" /* 22257 */
+ "TARGET4_ENABLE\0" /* 22272 */
+ "TARGET5_ENABLE\0" /* 22287 */
+ "TARGET6_ENABLE\0" /* 22302 */
+ "TARGET7_ENABLE\0" /* 22317 */
+ "OUTPUT0_ENABLE\0" /* 22332 */
+ "OUTPUT1_ENABLE\0" /* 22347 */
+ "OUTPUT2_ENABLE\0" /* 22362 */
+ "OUTPUT3_ENABLE\0" /* 22377 */
+ "OUTPUT4_ENABLE\0" /* 22392 */
+ "OUTPUT5_ENABLE\0" /* 22407 */
+ "OUTPUT6_ENABLE\0" /* 22422 */
+ "OUTPUT7_ENABLE\0" /* 22437 */
+ "RASTER_CONFIG_RB_MAP_0\0" /* 22452 */
+ "RASTER_CONFIG_RB_MAP_1\0" /* 22475 */
+ "RASTER_CONFIG_RB_MAP_2\0" /* 22498 */
+ "RASTER_CONFIG_RB_MAP_3\0" /* 22521 */
+ "RB_MAP_PKR0\0" /* 22544 */
+ "RB_MAP_PKR1\0" /* 22556 */
+ "RASTER_CONFIG_RB_XSEL2_0\0" /* 22568 */
+ "RASTER_CONFIG_RB_XSEL2_1\0" /* 22593 */
+ "RASTER_CONFIG_RB_XSEL2_2\0" /* 22618 */
+ "RASTER_CONFIG_RB_XSEL2_3\0" /* 22643 */
+ "RB_XSEL2\0" /* 22668 */
+ "RB_XSEL\0" /* 22677 */
+ "RB_YSEL\0" /* 22685 */
+ "RASTER_CONFIG_PKR_MAP_0\0" /* 22693 */
+ "RASTER_CONFIG_PKR_MAP_1\0" /* 22717 */
+ "RASTER_CONFIG_PKR_MAP_2\0" /* 22741 */
+ "RASTER_CONFIG_PKR_MAP_3\0" /* 22765 */
+ "PKR_MAP\0" /* 22789 */
+ "RASTER_CONFIG_PKR_XSEL_0\0" /* 22797 */
+ "RASTER_CONFIG_PKR_XSEL_1\0" /* 22822 */
+ "RASTER_CONFIG_PKR_XSEL_2\0" /* 22847 */
+ "RASTER_CONFIG_PKR_XSEL_3\0" /* 22872 */
+ "PKR_XSEL\0" /* 22897 */
+ "RASTER_CONFIG_PKR_YSEL_0\0" /* 22906 */
+ "RASTER_CONFIG_PKR_YSEL_1\0" /* 22931 */
+ "RASTER_CONFIG_PKR_YSEL_2\0" /* 22956 */
+ "RASTER_CONFIG_PKR_YSEL_3\0" /* 22981 */
+ "PKR_YSEL\0" /* 23006 */
+ "RASTER_CONFIG_PKR_XSEL2_0\0" /* 23015 */
+ "RASTER_CONFIG_PKR_XSEL2_1\0" /* 23041 */
+ "RASTER_CONFIG_PKR_XSEL2_2\0" /* 23067 */
+ "RASTER_CONFIG_PKR_XSEL2_3\0" /* 23093 */
+ "PKR_XSEL2\0" /* 23119 */
+ "RASTER_CONFIG_SC_MAP_0\0" /* 23129 */
+ "RASTER_CONFIG_SC_MAP_1\0" /* 23152 */
+ "RASTER_CONFIG_SC_MAP_2\0" /* 23175 */
+ "RASTER_CONFIG_SC_MAP_3\0" /* 23198 */
+ "SC_MAP\0" /* 23221 */
+ "RASTER_CONFIG_SC_XSEL_8_WIDE_TILE\0" /* 23228 */
+ "RASTER_CONFIG_SC_XSEL_16_WIDE_TILE\0" /* 23262 */
+ "RASTER_CONFIG_SC_XSEL_32_WIDE_TILE\0" /* 23297 */
+ "RASTER_CONFIG_SC_XSEL_64_WIDE_TILE\0" /* 23332 */
+ "SC_XSEL\0" /* 23367 */
+ "RASTER_CONFIG_SC_YSEL_8_WIDE_TILE\0" /* 23375 */
+ "RASTER_CONFIG_SC_YSEL_16_WIDE_TILE\0" /* 23409 */
+ "RASTER_CONFIG_SC_YSEL_32_WIDE_TILE\0" /* 23444 */
+ "RASTER_CONFIG_SC_YSEL_64_WIDE_TILE\0" /* 23479 */
+ "SC_YSEL\0" /* 23514 */
+ "RASTER_CONFIG_SE_MAP_0\0" /* 23522 */
+ "RASTER_CONFIG_SE_MAP_1\0" /* 23545 */
+ "RASTER_CONFIG_SE_MAP_2\0" /* 23568 */
+ "RASTER_CONFIG_SE_MAP_3\0" /* 23591 */
+ "SE_MAP\0" /* 23614 */
+ "RASTER_CONFIG_SE_XSEL_8_WIDE_TILE\0" /* 23621 */
+ "RASTER_CONFIG_SE_XSEL_16_WIDE_TILE\0" /* 23655 */
+ "RASTER_CONFIG_SE_XSEL_32_WIDE_TILE\0" /* 23690 */
+ "RASTER_CONFIG_SE_XSEL_64_WIDE_TILE\0" /* 23725 */
+ "SE_XSEL_GFX6\0" /* 23760 */
+ "RASTER_CONFIG_SE_YSEL_8_WIDE_TILE\0" /* 23773 */
+ "RASTER_CONFIG_SE_YSEL_16_WIDE_TILE\0" /* 23807 */
+ "RASTER_CONFIG_SE_YSEL_32_WIDE_TILE\0" /* 23842 */
+ "RASTER_CONFIG_SE_YSEL_64_WIDE_TILE\0" /* 23877 */
+ "SE_YSEL_GFX6\0" /* 23912 */
+ "SE_XSEL_GFX9\0" /* 23925 */
+ "SE_YSEL_GFX9\0" /* 23938 */
+ "RASTER_CONFIG_SE_PAIR_MAP_0\0" /* 23951 */
+ "RASTER_CONFIG_SE_PAIR_MAP_1\0" /* 23979 */
+ "RASTER_CONFIG_SE_PAIR_MAP_2\0" /* 24007 */
+ "RASTER_CONFIG_SE_PAIR_MAP_3\0" /* 24035 */
+ "SE_PAIR_MAP\0" /* 24063 */
+ "RASTER_CONFIG_SE_PAIR_XSEL_8_WIDE_TILE\0" /* 24075 */
+ "RASTER_CONFIG_SE_PAIR_XSEL_16_WIDE_TILE\0" /* 24114 */
+ "RASTER_CONFIG_SE_PAIR_XSEL_32_WIDE_TILE\0" /* 24154 */
+ "RASTER_CONFIG_SE_PAIR_XSEL_64_WIDE_TILE\0" /* 24194 */
+ "SE_PAIR_XSEL_GFX6\0" /* 24234 */
+ "RASTER_CONFIG_SE_PAIR_YSEL_8_WIDE_TILE\0" /* 24252 */
+ "RASTER_CONFIG_SE_PAIR_YSEL_16_WIDE_TILE\0" /* 24291 */
+ "RASTER_CONFIG_SE_PAIR_YSEL_32_WIDE_TILE\0" /* 24331 */
+ "RASTER_CONFIG_SE_PAIR_YSEL_64_WIDE_TILE\0" /* 24371 */
+ "SE_PAIR_YSEL_GFX6\0" /* 24411 */
+ "SE_PAIR_XSEL_GFX9\0" /* 24429 */
+ "SE_PAIR_YSEL_GFX9\0" /* 24447 */
+ "OVERWRITE_COMBINER_DISABLE\0" /* 24465 */
+ "OVERWRITE_COMBINER_MRT_SHARING_DISABLE\0" /* 24492 */
+ "OVERWRITE_COMBINER_WATERMARK\0" /* 24531 */
+ "STENCIL_KEEP\0" /* 24560 */
+ "STENCIL_ZERO\0" /* 24573 */
+ "STENCIL_ONES\0" /* 24586 */
+ "STENCIL_REPLACE_TEST\0" /* 24599 */
+ "STENCIL_REPLACE_OP\0" /* 24620 */
+ "STENCIL_ADD_CLAMP\0" /* 24639 */
+ "STENCIL_SUB_CLAMP\0" /* 24657 */
+ "STENCIL_INVERT\0" /* 24675 */
+ "STENCIL_ADD_WRAP\0" /* 24690 */
+ "STENCIL_SUB_WRAP\0" /* 24707 */
+ "STENCIL_AND\0" /* 24724 */
+ "STENCIL_OR\0" /* 24736 */
+ "STENCIL_XOR\0" /* 24747 */
+ "STENCIL_NAND\0" /* 24759 */
+ "STENCIL_NOR\0" /* 24772 */
+ "STENCIL_XNOR\0" /* 24784 */
+ "STENCILFAIL\0" /* 24797 */
+ "STENCILZPASS\0" /* 24809 */
+ "STENCILZFAIL\0" /* 24822 */
+ "STENCILFAIL_BF\0" /* 24835 */
+ "STENCILZPASS_BF\0" /* 24850 */
+ "STENCILZFAIL_BF\0" /* 24866 */
+ "STENCILTESTVAL\0" /* 24882 */
+ "STENCILMASK\0" /* 24897 */
+ "STENCILWRITEMASK\0" /* 24909 */
+ "STENCILOPVAL\0" /* 24926 */
+ "STENCILTESTVAL_BF\0" /* 24939 */
+ "STENCILMASK_BF\0" /* 24957 */
+ "STENCILWRITEMASK_BF\0" /* 24972 */
+ "STENCILOPVAL_BF\0" /* 24992 */
+ "X_0_0F\0" /* 25008 */
+ "DEFAULT_VAL\0" /* 25015 */
+ "FLAT_SHADE\0" /* 25027 */
+ "CYL_WRAP\0" /* 25038 */
+ "PT_SPRITE_TEX\0" /* 25047 */
+ "DUP\0" /* 25061 */
+ "FP16_INTERP_MODE\0" /* 25065 */
+ "USE_DEFAULT_ATTR1\0" /* 25082 */
+ "DEFAULT_VAL_ATTR1\0" /* 25100 */
+ "PT_SPRITE_TEX_ATTR1\0" /* 25118 */
+ "ATTR0_VALID\0" /* 25138 */
+ "ATTR1_VALID\0" /* 25150 */
+ "VS_EXPORT_COUNT\0" /* 25162 */
+ "VS_HALF_PACK\0" /* 25178 */
+ "VS_EXPORTS_FOG\0" /* 25191 */
+ "VS_OUT_FOG_VEC_ADDR\0" /* 25206 */
+ "PERSP_SAMPLE_ENA\0" /* 25226 */
+ "PERSP_CENTER_ENA\0" /* 25243 */
+ "PERSP_CENTROID_ENA\0" /* 25260 */
+ "PERSP_PULL_MODEL_ENA\0" /* 25279 */
+ "LINEAR_SAMPLE_ENA\0" /* 25300 */
+ "LINEAR_CENTER_ENA\0" /* 25318 */
+ "LINEAR_CENTROID_ENA\0" /* 25336 */
+ "LINE_STIPPLE_TEX_ENA\0" /* 25356 */
+ "POS_X_FLOAT_ENA\0" /* 25377 */
+ "POS_Y_FLOAT_ENA\0" /* 25393 */
+ "POS_Z_FLOAT_ENA\0" /* 25409 */
+ "POS_W_FLOAT_ENA\0" /* 25425 */
+ "FRONT_FACE_ENA\0" /* 25441 */
+ "ANCILLARY_ENA\0" /* 25456 */
+ "SAMPLE_COVERAGE_ENA\0" /* 25470 */
+ "POS_FIXED_PT_ENA\0" /* 25490 */
+ "FLAT_SHADE_ENA\0" /* 25507 */
+ "PNT_SPRITE_ENA\0" /* 25522 */
+ "SPI_PNT_SPRITE_SEL_0\0" /* 25537 */
+ "SPI_PNT_SPRITE_SEL_1\0" /* 25558 */
+ "SPI_PNT_SPRITE_SEL_S\0" /* 25579 */
+ "SPI_PNT_SPRITE_SEL_T\0" /* 25600 */
+ "SPI_PNT_SPRITE_SEL_NONE\0" /* 25621 */
+ "PNT_SPRITE_OVRD_X\0" /* 25645 */
+ "PNT_SPRITE_OVRD_Y\0" /* 25663 */
+ "PNT_SPRITE_OVRD_Z\0" /* 25681 */
+ "PNT_SPRITE_OVRD_W\0" /* 25699 */
+ "PNT_SPRITE_TOP_1\0" /* 25717 */
+ "NUM_INTERP\0" /* 25734 */
+ "PARAM_GEN\0" /* 25745 */
+ "FOG_ADDR\0" /* 25755 */
+ "BC_OPTIMIZE_DISABLE\0" /* 25764 */
+ "PASS_FOG_THROUGH_PS\0" /* 25784 */
+ "OFFCHIP_PARAM_EN\0" /* 25804 */
+ "LATE_PC_DEALLOC\0" /* 25821 */
+ "PERSP_CENTER_CNTL\0" /* 25837 */
+ "PERSP_CENTROID_CNTL\0" /* 25855 */
+ "LINEAR_CENTER_CNTL\0" /* 25875 */
+ "LINEAR_CENTROID_CNTL\0" /* 25894 */
+ "X_CALCULATE_PER_PIXEL_FLOATING_POINT_POSITION_AT\0" /* 25915 */
+ "POS_FLOAT_LOCATION\0" /* 25964 */
+ "POS_FLOAT_ULC\0" /* 25983 */
+ "FRONT_FACE_ALL_BITS\0" /* 25997 */
+ "NUM_PS_WAVES\0" /* 26017 */
+ "NUM_VS_WAVES\0" /* 26030 */
+ "NUM_GS_WAVES\0" /* 26043 */
+ "NUM_ES_WAVES\0" /* 26056 */
+ "NUM_HS_WAVES\0" /* 26069 */
+ "NUM_LS_WAVES\0" /* 26082 */
+ "SPI_SHADER_NONE\0" /* 26095 */
+ "SPI_SHADER_1COMP\0" /* 26111 */
+ "SPI_SHADER_2COMP\0" /* 26128 */
+ "SPI_SHADER_4COMPRESS\0" /* 26145 */
+ "SPI_SHADER_4COMP\0" /* 26166 */
+ "POS0_EXPORT_FORMAT\0" /* 26183 */
+ "POS1_EXPORT_FORMAT\0" /* 26202 */
+ "POS2_EXPORT_FORMAT\0" /* 26221 */
+ "POS3_EXPORT_FORMAT\0" /* 26240 */
+ "SPI_SHADER_ZERO\0" /* 26259 */
+ "SPI_SHADER_32_R\0" /* 26275 */
+ "SPI_SHADER_32_GR\0" /* 26291 */
+ "SPI_SHADER_32_AR\0" /* 26308 */
+ "SPI_SHADER_FP16_ABGR\0" /* 26325 */
+ "SPI_SHADER_UNORM16_ABGR\0" /* 26346 */
+ "SPI_SHADER_SNORM16_ABGR\0" /* 26370 */
+ "SPI_SHADER_UINT16_ABGR\0" /* 26394 */
+ "SPI_SHADER_SINT16_ABGR\0" /* 26417 */
+ "SPI_SHADER_32_ABGR\0" /* 26440 */
+ "Z_EXPORT_FORMAT\0" /* 26459 */
+ "COL0_EXPORT_FORMAT\0" /* 26475 */
+ "COL1_EXPORT_FORMAT\0" /* 26494 */
+ "COL2_EXPORT_FORMAT\0" /* 26513 */
+ "COL3_EXPORT_FORMAT\0" /* 26532 */
+ "COL4_EXPORT_FORMAT\0" /* 26551 */
+ "COL5_EXPORT_FORMAT\0" /* 26570 */
+ "COL6_EXPORT_FORMAT\0" /* 26589 */
+ "COL7_EXPORT_FORMAT\0" /* 26608 */
+ "SX_RT_EXPORT_NO_CONVERSION\0" /* 26627 */
+ "SX_RT_EXPORT_32_R\0" /* 26654 */
+ "SX_RT_EXPORT_32_A\0" /* 26672 */
+ "SX_RT_EXPORT_10_11_11\0" /* 26690 */
+ "SX_RT_EXPORT_2_10_10_10\0" /* 26712 */
+ "SX_RT_EXPORT_8_8_8_8\0" /* 26736 */
+ "SX_RT_EXPORT_5_6_5\0" /* 26757 */
+ "SX_RT_EXPORT_1_5_5_5\0" /* 26776 */
+ "SX_RT_EXPORT_4_4_4_4\0" /* 26797 */
+ "SX_RT_EXPORT_16_16_GR\0" /* 26818 */
+ "SX_RT_EXPORT_16_16_AR\0" /* 26840 */
+ "MRT0\0" /* 26862 */
+ "MRT1\0" /* 26867 */
+ "MRT2\0" /* 26872 */
+ "MRT3\0" /* 26877 */
+ "MRT4\0" /* 26882 */
+ "MRT5\0" /* 26887 */
+ "MRT6\0" /* 26892 */
+ "MRT7\0" /* 26897 */
+ "EXACT\0" /* 26902 */
+ "11BIT_FORMAT\0" /* 26908 */
+ "10BIT_FORMAT\0" /* 26921 */
+ "8BIT_FORMAT\0" /* 26934 */
+ "6BIT_FORMAT\0" /* 26946 */
+ "5BIT_FORMAT\0" /* 26958 */
+ "4BIT_FORMAT\0" /* 26970 */
+ "MRT0_EPSILON\0" /* 26982 */
+ "MRT1_EPSILON\0" /* 26995 */
+ "MRT2_EPSILON\0" /* 27008 */
+ "MRT3_EPSILON\0" /* 27021 */
+ "MRT4_EPSILON\0" /* 27034 */
+ "MRT5_EPSILON\0" /* 27047 */
+ "MRT6_EPSILON\0" /* 27060 */
+ "MRT7_EPSILON\0" /* 27073 */
+ "MRT0_COLOR_OPT_DISABLE\0" /* 27086 */
+ "MRT0_ALPHA_OPT_DISABLE\0" /* 27109 */
+ "MRT1_COLOR_OPT_DISABLE\0" /* 27132 */
+ "MRT1_ALPHA_OPT_DISABLE\0" /* 27155 */
+ "MRT2_COLOR_OPT_DISABLE\0" /* 27178 */
+ "MRT2_ALPHA_OPT_DISABLE\0" /* 27201 */
+ "MRT3_COLOR_OPT_DISABLE\0" /* 27224 */
+ "MRT3_ALPHA_OPT_DISABLE\0" /* 27247 */
+ "MRT4_COLOR_OPT_DISABLE\0" /* 27270 */
+ "MRT4_ALPHA_OPT_DISABLE\0" /* 27293 */
+ "MRT5_COLOR_OPT_DISABLE\0" /* 27316 */
+ "MRT5_ALPHA_OPT_DISABLE\0" /* 27339 */
+ "MRT6_COLOR_OPT_DISABLE\0" /* 27362 */
+ "MRT6_ALPHA_OPT_DISABLE\0" /* 27385 */
+ "MRT7_COLOR_OPT_DISABLE\0" /* 27408 */
+ "MRT7_ALPHA_OPT_DISABLE\0" /* 27431 */
+ "PIXEN_ZERO_OPT_DISABLE\0" /* 27454 */
+ "BLEND_OPT_PRESERVE_NONE_IGNORE_ALL\0" /* 27477 */
+ "BLEND_OPT_PRESERVE_ALL_IGNORE_NONE\0" /* 27512 */
+ "BLEND_OPT_PRESERVE_C1_IGNORE_C0\0" /* 27547 */
+ "BLEND_OPT_PRESERVE_C0_IGNORE_C1\0" /* 27579 */
+ "BLEND_OPT_PRESERVE_A1_IGNORE_A0\0" /* 27611 */
+ "BLEND_OPT_PRESERVE_A0_IGNORE_A1\0" /* 27643 */
+ "BLEND_OPT_PRESERVE_NONE_IGNORE_A0\0" /* 27675 */
+ "BLEND_OPT_PRESERVE_NONE_IGNORE_NONE\0" /* 27709 */
+ "COLOR_SRC_OPT\0" /* 27745 */
+ "COLOR_DST_OPT\0" /* 27759 */
+ "OPT_COMB_NONE\0" /* 27773 */
+ "OPT_COMB_ADD\0" /* 27787 */
+ "OPT_COMB_SUBTRACT\0" /* 27800 */
+ "OPT_COMB_MIN\0" /* 27818 */
+ "OPT_COMB_MAX\0" /* 27831 */
+ "OPT_COMB_REVSUBTRACT\0" /* 27844 */
+ "OPT_COMB_BLEND_DISABLED\0" /* 27865 */
+ "OPT_COMB_SAFE_ADD\0" /* 27889 */
+ "COLOR_COMB_FCN\0" /* 27907 */
+ "ALPHA_SRC_OPT\0" /* 27922 */
+ "ALPHA_DST_OPT\0" /* 27936 */
+ "ALPHA_COMB_FCN\0" /* 27950 */
+ "BLEND_ZERO\0" /* 27965 */
+ "BLEND_ONE\0" /* 27976 */
+ "BLEND_SRC_COLOR\0" /* 27986 */
+ "BLEND_ONE_MINUS_SRC_COLOR\0" /* 28002 */
+ "BLEND_SRC_ALPHA\0" /* 28028 */
+ "BLEND_ONE_MINUS_SRC_ALPHA\0" /* 28044 */
+ "BLEND_DST_ALPHA\0" /* 28070 */
+ "BLEND_ONE_MINUS_DST_ALPHA\0" /* 28086 */
+ "BLEND_DST_COLOR\0" /* 28112 */
+ "BLEND_ONE_MINUS_DST_COLOR\0" /* 28128 */
+ "BLEND_SRC_ALPHA_SATURATE\0" /* 28154 */
+ "BLEND_CONSTANT_COLOR\0" /* 28179 */
+ "BLEND_ONE_MINUS_CONSTANT_COLOR\0" /* 28200 */
+ "BLEND_SRC1_COLOR\0" /* 28231 */
+ "BLEND_INV_SRC1_COLOR\0" /* 28248 */
+ "BLEND_SRC1_ALPHA\0" /* 28269 */
+ "BLEND_INV_SRC1_ALPHA\0" /* 28286 */
+ "BLEND_CONSTANT_ALPHA\0" /* 28307 */
+ "BLEND_ONE_MINUS_CONSTANT_ALPHA\0" /* 28328 */
+ "COLOR_SRCBLEND\0" /* 28359 */
+ "COMB_DST_PLUS_SRC\0" /* 28374 */
+ "COMB_SRC_MINUS_DST\0" /* 28392 */
+ "COMB_MIN_DST_SRC\0" /* 28411 */
+ "COMB_MAX_DST_SRC\0" /* 28428 */
+ "COMB_DST_MINUS_SRC\0" /* 28445 */
+ "COLOR_DESTBLEND\0" /* 28464 */
+ "ALPHA_SRCBLEND\0" /* 28480 */
+ "ALPHA_DESTBLEND\0" /* 28495 */
+ "SEPARATE_ALPHA_BLEND\0" /* 28511 */
+ "DISABLE_ROP3\0" /* 28540, 28532 */
+ "SRC_STATE_ID\0" /* 28545 */
+ "BASE_ADDR_GFX6\0" /* 28558 */
+ "BASE_ADDR_GFX9\0" /* 28573 */
+ "DI_SRC_SEL_DMA\0" /* 28588 */
+ "DI_SRC_SEL_IMMEDIATE\0" /* 28603 */
+ "DI_SRC_SEL_AUTO_INDEX\0" /* 28624 */
+ "DI_SRC_SEL_RESERVED\0" /* 28646 */
+ "SOURCE_SELECT\0" /* 28666 */
+ "DI_MAJOR_MODE_0\0" /* 28680 */
+ "DI_MAJOR_MODE_1\0" /* 28696 */
+ "MAJOR_MODE\0" /* 28712 */
+ "NOT_EOP\0" /* 28723 */
+ "USE_OPAQUE\0" /* 28731 */
+ "SPRITE_EN_R6XX\0" /* 28742 */
+ "UNROLLED_INST\0" /* 28757 */
+ "GRBM_SKEW_NO_DEC\0" /* 28771 */
+ "REG_RT_INDEX\0" /* 28788 */
+ "ADDRESS_LOW\0" /* 28801 */
+ "STENCIL_ENABLE\0" /* 28813 */
+ "Z_WRITE_ENABLE\0" /* 28828 */
+ "DEPTH_BOUNDS_ENABLE\0" /* 28843 */
+ "FRAG_NEVER\0" /* 28863 */
+ "FRAG_LESS\0" /* 28874 */
+ "FRAG_EQUAL\0" /* 28884 */
+ "FRAG_LEQUAL\0" /* 28895 */
+ "FRAG_GREATER\0" /* 28907 */
+ "FRAG_NOTEQUAL\0" /* 28920 */
+ "FRAG_GEQUAL\0" /* 28934 */
+ "FRAG_ALWAYS\0" /* 28946 */
+ "BACKFACE_ENABLE\0" /* 28958 */
+ "REF_NEVER\0" /* 28974 */
+ "REF_LESS\0" /* 28984 */
+ "REF_EQUAL\0" /* 28993 */
+ "REF_LEQUAL\0" /* 29003 */
+ "REF_GREATER\0" /* 29014 */
+ "REF_NOTEQUAL\0" /* 29026 */
+ "REF_GEQUAL\0" /* 29039 */
+ "REF_ALWAYS\0" /* 29050 */
+ "STENCILFUNC\0" /* 29061 */
+ "STENCILFUNC_BF\0" /* 29073 */
+ "ENABLE_COLOR_WRITES_ON_DEPTH_FAIL\0" /* 29088 */
+ "DISABLE_COLOR_WRITES_ON_DEPTH_PASS\0" /* 29122 */
+ "MAX_ANCHOR_SAMPLES\0" /* 29157 */
+ "PS_ITER_SAMPLES\0" /* 29176 */
+ "MASK_EXPORT_NUM_SAMPLES\0" /* 29192 */
+ "ALPHA_TO_MASK_NUM_SAMPLES\0" /* 29216 */
+ "HIGH_QUALITY_INTERSECTIONS\0" /* 29242 */
+ "INCOHERENT_EQAA_READS\0" /* 29269 */
+ "INTERPOLATE_COMP_Z\0" /* 29291 */
+ "INTERPOLATE_SRC_Z\0" /* 29310 */
+ "STATIC_ANCHOR_ASSOCIATIONS\0" /* 29328 */
+ "ALPHA_TO_MASK_EQAA_DISABLE\0" /* 29355 */
+ "OVERRASTERIZATION_AMOUNT\0" /* 29382 */
+ "ENABLE_POSTZ_OVERRASTERIZATION\0" /* 29407 */
+ "DISABLE_DUAL_QUAD\0" /* 29438 */
+ "DEGAMMA_ENABLE\0" /* 29456 */
+ "CB_DISABLE\0" /* 29471 */
+ "CB_NORMAL\0" /* 29482 */
+ "CB_ELIMINATE_FAST_CLEAR\0" /* 29505, 29492 */
+ "CB_RESOLVE\0" /* 29516 */
+ "CB_FMASK_DECOMPRESS\0" /* 29527 */
+ "CB_DCC_DECOMPRESS\0" /* 29547 */
+ "X_0X00\0" /* 29565 */
+ "X_0X05\0" /* 29572 */
+ "X_0X0A\0" /* 29579 */
+ "X_0X0F\0" /* 29586 */
+ "X_0X11\0" /* 29593 */
+ "X_0X22\0" /* 29600 */
+ "X_0X33\0" /* 29607 */
+ "X_0X44\0" /* 29614 */
+ "X_0X50\0" /* 29621 */
+ "X_0X55\0" /* 29628 */
+ "X_0X5A\0" /* 29635 */
+ "X_0X5F\0" /* 29642 */
+ "X_0X66\0" /* 29649 */
+ "X_0X77\0" /* 29656 */
+ "X_0X88\0" /* 29663 */
+ "X_0X99\0" /* 29670 */
+ "X_0XA0\0" /* 29677 */
+ "X_0XA5\0" /* 29684 */
+ "X_0XAA\0" /* 29691 */
+ "X_0XAF\0" /* 29698 */
+ "X_0XBB\0" /* 29705 */
+ "X_0XCC\0" /* 29712 */
+ "X_0XDD\0" /* 29719 */
+ "X_0XEE\0" /* 29726 */
+ "X_0XF0\0" /* 29733 */
+ "X_0XF5\0" /* 29740 */
+ "X_0XFA\0" /* 29747 */
+ "X_0XFF\0" /* 29754 */
+ "Z_EXPORT_ENABLE\0" /* 29761 */
+ "STENCIL_TEST_VAL_EXPORT_ENABLE\0" /* 29777 */
+ "STENCIL_OP_VAL_EXPORT_ENABLE\0" /* 29808 */
+ "LATE_Z\0" /* 29837 */
+ "EARLY_Z_THEN_LATE_Z\0" /* 29844 */
+ "RE_Z\0" /* 29864 */
+ "EARLY_Z_THEN_RE_Z\0" /* 29869 */
+ "KILL_ENABLE\0" /* 29887 */
+ "COVERAGE_TO_MASK_ENABLE\0" /* 29899 */
+ "MASK_EXPORT_ENABLE\0" /* 29923 */
+ "EXEC_ON_HIER_FAIL\0" /* 29942 */
+ "EXEC_ON_NOOP\0" /* 29960 */
+ "ALPHA_TO_MASK_DISABLE\0" /* 29973 */
+ "DEPTH_BEFORE_SHADER\0" /* 29995 */
+ "EXPORT_ANY_Z\0" /* 30015 */
+ "EXPORT_LESS_THAN_Z\0" /* 30028 */
+ "EXPORT_GREATER_THAN_Z\0" /* 30047 */
+ "EXPORT_RESERVED\0" /* 30069 */
+ "CONSERVATIVE_Z_EXPORT\0" /* 30085 */
+ "DUAL_QUAD_DISABLE\0" /* 30107 */
+ "PRIMITIVE_ORDERED_PIXEL_SHADER\0" /* 30125 */
+ "EXEC_IF_OVERLAPPED\0" /* 30156 */
+ "POPS_OVERLAP_NUM_SAMPLES\0" /* 30175 */
+ "UCP_ENA_0\0" /* 30200 */
+ "UCP_ENA_1\0" /* 30210 */
+ "UCP_ENA_2\0" /* 30220 */
+ "UCP_ENA_3\0" /* 30230 */
+ "UCP_ENA_4\0" /* 30240 */
+ "UCP_ENA_5\0" /* 30250 */
+ "PS_UCP_Y_SCALE_NEG\0" /* 30260 */
+ "PS_UCP_MODE\0" /* 30279 */
+ "CLIP_DISABLE\0" /* 30291 */
+ "UCP_CULL_ONLY_ENA\0" /* 30304 */
+ "BOUNDARY_EDGE_FLAG_ENA\0" /* 30322 */
+ "DX_CLIP_SPACE_DEF\0" /* 30345 */
+ "DIS_CLIP_ERR_DETECT\0" /* 30363 */
+ "VTX_KILL_OR\0" /* 30383 */
+ "DX_RASTERIZATION_KILL\0" /* 30395 */
+ "DX_LINEAR_ATTR_CLIP_ENA\0" /* 30417 */
+ "VTE_VPORT_PROVOKE_DISABLE\0" /* 30441 */
+ "ZCLIP_NEAR_DISABLE\0" /* 30467 */
+ "ZCLIP_FAR_DISABLE\0" /* 30486 */
+ "CULL_FRONT\0" /* 30504 */
+ "CULL_BACK\0" /* 30515 */
+ "FACE\0" /* 30525 */
+ "X_DISABLE_POLY_MODE\0" /* 30530, 30540 */
+ "X_DUAL_MODE\0" /* 30550 */
+ "X_DRAW_POINTS\0" /* 30562 */
+ "X_DRAW_LINES\0" /* 30576 */
+ "X_DRAW_TRIANGLES\0" /* 30589 */
+ "POLYMODE_FRONT_PTYPE\0" /* 30606 */
+ "POLYMODE_BACK_PTYPE\0" /* 30627 */
+ "POLY_OFFSET_FRONT_ENABLE\0" /* 30647 */
+ "POLY_OFFSET_BACK_ENABLE\0" /* 30672 */
+ "POLY_OFFSET_PARA_ENABLE\0" /* 30696 */
+ "VTX_WINDOW_OFFSET_ENABLE\0" /* 30720 */
+ "PROVOKING_VTX_LAST\0" /* 30745 */
+ "PERSP_CORR_DIS\0" /* 30764 */
+ "MULTI_PRIM_IB_ENA\0" /* 30779 */
+ "RIGHT_TRIANGLE_ALTERNATE_GRADIENT_REF\0" /* 30797 */
+ "NEW_QUAD_DECOMPOSITION\0" /* 30835 */
+ "VPORT_X_SCALE_ENA\0" /* 30858 */
+ "VPORT_X_OFFSET_ENA\0" /* 30876 */
+ "VPORT_Y_SCALE_ENA\0" /* 30895 */
+ "VPORT_Y_OFFSET_ENA\0" /* 30913 */
+ "VPORT_Z_SCALE_ENA\0" /* 30932 */
+ "VPORT_Z_OFFSET_ENA\0" /* 30950 */
+ "VTX_XY_FMT\0" /* 30969 */
+ "VTX_Z_FMT\0" /* 30980 */
+ "VTX_W0_FMT\0" /* 30990 */
+ "PERFCOUNTER_REF\0" /* 31001 */
+ "CLIP_DIST_ENA_0\0" /* 31017 */
+ "CLIP_DIST_ENA_1\0" /* 31033 */
+ "CLIP_DIST_ENA_2\0" /* 31049 */
+ "CLIP_DIST_ENA_3\0" /* 31065 */
+ "CLIP_DIST_ENA_4\0" /* 31081 */
+ "CLIP_DIST_ENA_5\0" /* 31097 */
+ "CLIP_DIST_ENA_6\0" /* 31113 */
+ "CLIP_DIST_ENA_7\0" /* 31129 */
+ "CULL_DIST_ENA_0\0" /* 31145 */
+ "CULL_DIST_ENA_1\0" /* 31161 */
+ "CULL_DIST_ENA_2\0" /* 31177 */
+ "CULL_DIST_ENA_3\0" /* 31193 */
+ "CULL_DIST_ENA_4\0" /* 31209 */
+ "CULL_DIST_ENA_5\0" /* 31225 */
+ "CULL_DIST_ENA_6\0" /* 31241 */
+ "CULL_DIST_ENA_7\0" /* 31257 */
+ "USE_VTX_POINT_SIZE\0" /* 31273 */
+ "USE_VTX_EDGE_FLAG\0" /* 31292 */
+ "USE_VTX_RENDER_TARGET_INDX\0" /* 31310 */
+ "USE_VTX_VIEWPORT_INDX\0" /* 31337 */
+ "USE_VTX_KILL_FLAG\0" /* 31359 */
+ "VS_OUT_MISC_VEC_ENA\0" /* 31377 */
+ "VS_OUT_CCDIST0_VEC_ENA\0" /* 31397 */
+ "VS_OUT_CCDIST1_VEC_ENA\0" /* 31420 */
+ "VS_OUT_MISC_SIDE_BUS_ENA\0" /* 31443 */
+ "USE_VTX_GS_CUT_FLAG\0" /* 31468 */
+ "USE_VTX_LINE_WIDTH\0" /* 31488 */
+ "USE_VTX_SHD_OBJPRIM_ID\0" /* 31507 */
+ "VTE_XY_INF_DISCARD\0" /* 31530 */
+ "VTE_Z_INF_DISCARD\0" /* 31549 */
+ "VTE_W_INF_DISCARD\0" /* 31567 */
+ "VTE_0XNANINF_IS_0\0" /* 31585 */
+ "VTE_XY_NAN_RETAIN\0" /* 31603 */
+ "VTE_Z_NAN_RETAIN\0" /* 31621 */
+ "VTE_W_NAN_RETAIN\0" /* 31638 */
+ "VTE_W_RECIP_NAN_IS_0\0" /* 31655 */
+ "VS_XY_NAN_TO_INF\0" /* 31676 */
+ "VS_XY_INF_RETAIN\0" /* 31693 */
+ "VS_Z_NAN_TO_INF\0" /* 31710 */
+ "VS_Z_INF_RETAIN\0" /* 31726 */
+ "VS_W_NAN_TO_INF\0" /* 31742 */
+ "VS_W_INF_RETAIN\0" /* 31758 */
+ "VS_CLIP_DIST_INF_DISCARD\0" /* 31774 */
+ "VTE_NO_OUTPUT_NEG_0\0" /* 31799 */
+ "LINE_STIPPLE_RESET\0" /* 31819 */
+ "EXPAND_FULL_LENGTH\0" /* 31838 */
+ "FRACTIONAL_ACCUM\0" /* 31857 */
+ "DIAMOND_ADJUST\0" /* 31874 */
+ "TRIANGLE_FILTER_DISABLE\0" /* 31889 */
+ "LINE_FILTER_DISABLE\0" /* 31913 */
+ "POINT_FILTER_DISABLE\0" /* 31933 */
+ "RECTANGLE_FILTER_DISABLE\0" /* 31954 */
+ "TRIANGLE_EXPAND_ENA\0" /* 31979 */
+ "LINE_EXPAND_ENA\0" /* 31999 */
+ "POINT_EXPAND_ENA\0" /* 32015 */
+ "RECTANGLE_EXPAND_ENA\0" /* 32032 */
+ "PRIM_EXPAND_CONSTANT\0" /* 32053 */
+ "XMAX_RIGHT_EXCLUSION\0" /* 32074 */
+ "YMAX_BOTTOM_EXCLUSION\0" /* 32095 */
+ "SMALL_PRIM_FILTER_ENABLE\0" /* 32117 */
+ "SRBSL_ENABLE\0" /* 32142 */
+ "MIN_SIZE\0" /* 32155 */
+ "MAX_SIZE\0" /* 32164 */
+ "LINE_PATTERN\0" /* 32173 */
+ "REPEAT_COUNT\0" /* 32186 */
+ "PATTERN_BIT_ORDER\0" /* 32199 */
+ "AUTO_RESET_CNTL\0" /* 32217 */
+ "VGT_OUTPATH_VTX_REUSE\0" /* 32233 */
+ "VGT_OUTPATH_TESS_EN\0" /* 32255 */
+ "VGT_OUTPATH_PASSTHRU\0" /* 32275 */
+ "VGT_OUTPATH_GS_BLOCK\0" /* 32296 */
+ "VGT_OUTPATH_HS_BLOCK\0" /* 32317 */
+ "PATH_SELECT\0" /* 32338 */
+ "TESS_MODE\0" /* 32350 */
+ "REUSE_DEPTH\0" /* 32360 */
+ "VGT_GRP_3D_POINT\0" /* 32372 */
+ "VGT_GRP_3D_LINE\0" /* 32389 */
+ "VGT_GRP_3D_TRI\0" /* 32405 */
+ "VGT_GRP_3D_RECT\0" /* 32420 */
+ "VGT_GRP_3D_QUAD\0" /* 32436 */
+ "VGT_GRP_2D_COPY_RECT_V0\0" /* 32452 */
+ "VGT_GRP_2D_COPY_RECT_V1\0" /* 32476 */
+ "VGT_GRP_2D_COPY_RECT_V2\0" /* 32500 */
+ "VGT_GRP_2D_COPY_RECT_V3\0" /* 32524 */
+ "VGT_GRP_2D_FILL_RECT\0" /* 32548 */
+ "VGT_GRP_2D_LINE\0" /* 32569 */
+ "VGT_GRP_2D_TRI\0" /* 32585 */
+ "VGT_GRP_PRIM_INDEX_LINE\0" /* 32600 */
+ "VGT_GRP_PRIM_INDEX_TRI\0" /* 32624 */
+ "VGT_GRP_PRIM_INDEX_QUAD\0" /* 32647 */
+ "VGT_GRP_3D_LINE_ADJ\0" /* 32671 */
+ "VGT_GRP_3D_TRI_ADJ\0" /* 32691 */
+ "VGT_GRP_3D_PATCH\0" /* 32710 */
+ "RETAIN_ORDER\0" /* 32727 */
+ "RETAIN_QUADS\0" /* 32740 */
+ "VGT_GRP_LIST\0" /* 32753 */
+ "VGT_GRP_STRIP\0" /* 32766 */
+ "VGT_GRP_FAN\0" /* 32780 */
+ "VGT_GRP_LOOP\0" /* 32792 */
+ "VGT_GRP_POLYGON\0" /* 32805 */
+ "PRIM_ORDER\0" /* 32821 */
+ "FIRST_DECR\0" /* 32832, 32838 */
+ "COMP_X_EN\0" /* 32843 */
+ "COMP_Y_EN\0" /* 32853 */
+ "COMP_Z_EN\0" /* 32863 */
+ "COMP_W_EN\0" /* 32873 */
+ "SHIFT\0" /* 32883 */
+ "VGT_GRP_INDEX_16\0" /* 32889 */
+ "VGT_GRP_INDEX_32\0" /* 32906 */
+ "VGT_GRP_UINT_16\0" /* 32923 */
+ "VGT_GRP_UINT_32\0" /* 32939 */
+ "VGT_GRP_SINT_16\0" /* 32955 */
+ "VGT_GRP_SINT_32\0" /* 32971 */
+ "VGT_GRP_FLOAT_32\0" /* 32987 */
+ "VGT_GRP_AUTO_PRIM\0" /* 33004 */
+ "VGT_GRP_FIX_1_23_TO_FLOAT\0" /* 33022 */
+ "X_CONV\0" /* 33048 */
+ "Y_CONV\0" /* 33055 */
+ "Z_CONV\0" /* 33062 */
+ "Z_OFFSET\0" /* 33069 */
+ "W_CONV\0" /* 33078 */
+ "W_OFFSET\0" /* 33085 */
+ "GS_OFF\0" /* 33094 */
+ "GS_SCENARIO_A\0" /* 33101 */
+ "GS_SCENARIO_B\0" /* 33115 */
+ "GS_SCENARIO_G\0" /* 33129 */
+ "GS_SCENARIO_C\0" /* 33143 */
+ "SPRITE_EN\0" /* 33157 */
+ "GS_CUT_1024\0" /* 33167 */
+ "GS_CUT_512\0" /* 33179 */
+ "GS_CUT_256\0" /* 33190 */
+ "GS_CUT_128\0" /* 33201 */
+ "CUT_MODE\0" /* 33212 */
+ "GS_C_PACK_EN\0" /* 33221 */
+ "RESERVED_2\0" /* 33234 */
+ "ES_PASSTHRU\0" /* 33245 */
+ "COMPUTE_MODE\0" /* 33257 */
+ "FAST_COMPUTE_MODE\0" /* 33270 */
+ "ELEMENT_INFO_EN\0" /* 33288 */
+ "PARTIAL_THD_AT_EOI\0" /* 33304 */
+ "SUPPRESS_CUTS\0" /* 33323 */
+ "ES_WRITE_OPTIMIZE\0" /* 33337 */
+ "GS_WRITE_OPTIMIZE\0" /* 33355 */
+ "X_0_OFFCHIP_GS\0" /* 33373 */
+ "X_3_ES_AND_GS_ARE_ONCHIP\0" /* 33388, 33406 */
+ "RESERVED_3\0" /* 33413 */
+ "RESERVED_4\0" /* 33424 */
+ "RESERVED_5\0" /* 33435 */
+ "ES_VERTS_PER_SUBGRP\0" /* 33446 */
+ "GS_PRIMS_PER_SUBGRP\0" /* 33466 */
+ "GS_INST_PRIMS_IN_SUBGRP\0" /* 33486 */
+ "MSAA_ENABLE\0" /* 33510 */
+ "VPORT_SCISSOR_ENABLE\0" /* 33522 */
+ "LINE_STIPPLE_ENABLE\0" /* 33543 */
+ "SEND_UNLIT_STILES_TO_PKR\0" /* 33563 */
+ "SCALE_LINE_WIDTH_PAD\0" /* 33588 */
+ "ALTERNATE_RBS_PER_TILE\0" /* 33609 */
+ "COARSE_TILE_STARTS_ON_EVEN_RB\0" /* 33632 */
+ "WALK_SIZE\0" /* 33662 */
+ "WALK_ALIGNMENT\0" /* 33672 */
+ "WALK_ALIGN8_PRIM_FITS_ST\0" /* 33687 */
+ "WALK_FENCE_ENABLE\0" /* 33712 */
+ "WALK_FENCE_SIZE\0" /* 33730 */
+ "SUPERTILE_WALK_ORDER_ENABLE\0" /* 33746, 33751 */
+ "TILE_COVER_DISABLE\0" /* 33774 */
+ "TILE_COVER_NO_SCISSOR\0" /* 33793 */
+ "ZMM_LINE_EXTENT\0" /* 33815 */
+ "ZMM_LINE_OFFSET\0" /* 33831 */
+ "ZMM_RECT_EXTENT\0" /* 33847 */
+ "KILL_PIX_POST_HI_Z\0" /* 33863 */
+ "KILL_PIX_POST_DETAIL_MASK\0" /* 33882 */
+ "PS_ITER_SAMPLE\0" /* 33908 */
+ "MULTI_SHADER_ENGINE_PRIM_DISCARD_ENABLE\0" /* 33923 */
+ "MULTI_GPU_SUPERTILE_ENABLE\0" /* 33963 */
+ "GPU_ID_OVERRIDE_ENABLE\0" /* 33990 */
+ "GPU_ID_OVERRIDE\0" /* 34013 */
+ "MULTI_GPU_PRIM_DISCARD_ENABLE\0" /* 34029 */
+ "FORCE_EOV_CNTDWN_ENABLE\0" /* 34059 */
+ "FORCE_EOV_REZ_ENABLE\0" /* 34083 */
+ "OUT_OF_ORDER_PRIMITIVE_ENABLE\0" /* 34104 */
+ "OUT_OF_ORDER_WATER_MARK\0" /* 34134 */
+ "GS_PER_ES\0" /* 34158 */
+ "ES_PER_GS\0" /* 34168 */
+ "GS_PER_VS\0" /* 34178 */
+ "OUTPRIM_TYPE_POINTLIST\0" /* 34188 */
+ "OUTPRIM_TYPE_LINESTRIP\0" /* 34211 */
+ "OUTPRIM_TYPE_TRISTRIP\0" /* 34234 */
+ "OUTPRIM_TYPE\0" /* 34256 */
+ "OUTPRIM_TYPE_1\0" /* 34269 */
+ "OUTPRIM_TYPE_2\0" /* 34284 */
+ "OUTPRIM_TYPE_3\0" /* 34299 */
+ "UNIQUE_TYPE_PER_STREAM\0" /* 34314 */
+ "VGT_INDEX_16\0" /* 34337 */
+ "VGT_INDEX_32\0" /* 34350 */
+ "VGT_INDEX_8\0" /* 34363 */
+ "VGT_DMA_SWAP_NONE\0" /* 34375 */
+ "VGT_DMA_SWAP_16_BIT\0" /* 34393 */
+ "VGT_DMA_SWAP_32_BIT\0" /* 34413 */
+ "VGT_DMA_SWAP_WORD\0" /* 34433 */
+ "SWAP_MODE\0" /* 34451 */
+ "VGT_DMA_BUF_MEM\0" /* 34461 */
+ "VGT_DMA_BUF_RING\0" /* 34477 */
+ "VGT_DMA_BUF_SETUP\0" /* 34494 */
+ "BUF_TYPE\0" /* 34512 */
+ "VGT_POLICY_LRU\0" /* 34521 */
+ "VGT_POLICY_STREAM\0" /* 34536 */
+ "RDREQ_POLICY_CIK\0" /* 34554 */
+ "RDREQ_POLICY\0" /* 34571 */
+ "REQ_PATH\0" /* 34584 */
+ "PRIMITIVEID_EN\0" /* 34593 */
+ "DISABLE_RESET_ON_EOI\0" /* 34608 */
+ "NGG_DISABLE_PROVOK_REUSE\0" /* 34629 */
+ "SAMPLE_STREAMOUTSTATS1\0" /* 34654 */
+ "SAMPLE_STREAMOUTSTATS2\0" /* 34677 */
+ "SAMPLE_STREAMOUTSTATS3\0" /* 34700 */
+ "CACHE_FLUSH_TS\0" /* 34723 */
+ "CONTEXT_DONE\0" /* 34738 */
+ "CACHE_FLUSH\0" /* 34751 */
+ "CS_PARTIAL_FLUSH\0" /* 34763 */
+ "VGT_STREAMOUT_SYNC\0" /* 34780 */
+ "VGT_STREAMOUT_RESET\0" /* 34799 */
+ "END_OF_PIPE_INCR_DE\0" /* 34819 */
+ "END_OF_PIPE_IB_END\0" /* 34839 */
+ "RST_PIX_CNT\0" /* 34858 */
+ "VS_PARTIAL_FLUSH\0" /* 34870 */
+ "PS_PARTIAL_FLUSH\0" /* 34887 */
+ "FLUSH_HS_OUTPUT\0" /* 34904 */
+ "FLUSH_LS_OUTPUT\0" /* 34920 */
+ "CACHE_FLUSH_AND_INV_TS_EVENT\0" /* 34936 */
+ "ZPASS_DONE\0" /* 34965 */
+ "CACHE_FLUSH_AND_INV_EVENT\0" /* 34976 */
+ "PERFCOUNTER_START\0" /* 35002 */
+ "PERFCOUNTER_STOP\0" /* 35020 */
+ "PIPELINESTAT_START\0" /* 35037 */
+ "PIPELINESTAT_STOP\0" /* 35056 */
+ "PERFCOUNTER_SAMPLE\0" /* 35074 */
+ "FLUSH_ES_OUTPUT\0" /* 35093 */
+ "FLUSH_GS_OUTPUT\0" /* 35109 */
+ "SAMPLE_PIPELINESTAT\0" /* 35125 */
+ "SO_VGTSTREAMOUT_FLUSH\0" /* 35145 */
+ "SAMPLE_STREAMOUTSTATS\0" /* 35167 */
+ "RESET_VTX_CNT\0" /* 35189 */
+ "BLOCK_CONTEXT_DONE\0" /* 35203 */
+ "CS_CONTEXT_DONE\0" /* 35222 */
+ "VGT_FLUSH\0" /* 35238 */
+ "SC_SEND_DB_VPZ\0" /* 35248 */
+ "BOTTOM_OF_PIPE_TS\0" /* 35263 */
+ "DB_CACHE_FLUSH_AND_INV\0" /* 35281 */
+ "FLUSH_AND_INV_DB_DATA_TS\0" /* 35304 */
+ "FLUSH_AND_INV_DB_META\0" /* 35329 */
+ "FLUSH_AND_INV_CB_DATA_TS\0" /* 35351 */
+ "FLUSH_AND_INV_CB_META\0" /* 35376 */
+ "FLUSH_AND_INV_CB_PIXEL_DATA\0" /* 35398 */
+ "THREAD_TRACE_START\0" /* 35426 */
+ "THREAD_TRACE_STOP\0" /* 35445 */
+ "THREAD_TRACE_MARKER\0" /* 35463 */
+ "THREAD_TRACE_FLUSH\0" /* 35483 */
+ "THREAD_TRACE_FINISH\0" /* 35502 */
+ "PIXEL_PIPE_STAT_CONTROL\0" /* 35522 */
+ "PIXEL_PIPE_STAT_DUMP\0" /* 35546 */
+ "PIXEL_PIPE_STAT_RESET\0" /* 35567 */
+ "BREAK_BATCH\0" /* 35589 */
+ "FLUSH_DFSM\0" /* 35601 */
+ "RESET_TO_LOWEST_VGT\0" /* 35612 */
+ "TGID_ROLLOVER\0" /* 35632 */
+ "ENABLE_NGG_PIPELINE\0" /* 35646 */
+ "ENABLE_LEGACY_PIPELINE\0" /* 35666 */
+ "EVENT_TYPE\0" /* 35689 */
+ "ADDRESS_HI_GFX6\0" /* 35700 */
+ "EXTENDED_EVENT\0" /* 35716 */
+ "ADDRESS_HI_GFX9\0" /* 35731 */
+ "RESET_EN\0" /* 35747 */
+ "PRIMGROUP_SIZE\0" /* 35756 */
+ "PARTIAL_VS_WAVE_ON\0" /* 35771 */
+ "SWITCH_ON_EOP\0" /* 35790 */
+ "PARTIAL_ES_WAVE_ON\0" /* 35804 */
+ "SWITCH_ON_EOI\0" /* 35823 */
+ "WD_SWITCH_ON_EOP\0" /* 35837 */
+ "MAX_PRIMGRP_IN_WAVE\0" /* 35854 */
+ "ITEMSIZE\0" /* 35874 */
+ "REUSE_OFF\0" /* 35883 */
+ "VTX_CNT_EN\0" /* 35893 */
+ "FULL_CACHE\0" /* 35904 */
+ "HTILE_USES_PRELOAD_WIN\0" /* 35915 */
+ "PRELOAD\0" /* 35938 */
+ "PREFETCH_WIDTH\0" /* 35946 */
+ "PREFETCH_HEIGHT\0" /* 35961 */
+ "DST_OUTSIDE_ZERO_TO_ONE\0" /* 35977 */
+ "TC_COMPATIBLE\0" /* 36001 */
+ "COMPAREFUNC0\0" /* 36015 */
+ "COMPAREVALUE0\0" /* 36028 */
+ "COMPAREMASK0\0" /* 36042 */
+ "COMPAREFUNC1\0" /* 36055 */
+ "COMPAREVALUE1\0" /* 36068 */
+ "COMPAREMASK1\0" /* 36082 */
+ "START_X\0" /* 36095 */
+ "START_Y\0" /* 36103 */
+ "MAX_X\0" /* 36111 */
+ "MAX_Y\0" /* 36117 */
+ "VERTEX_STRIDE\0" /* 36123 */
+ "MAX_VERT_OUT\0" /* 36137 */
+ "ACCUM_ISOLINE\0" /* 36150 */
+ "ACCUM_TRI\0" /* 36164 */
+ "ACCUM_QUAD\0" /* 36174 */
+ "DONUT_SPLIT\0" /* 36185 */
+ "TRAP_SPLIT\0" /* 36197 */
+ "LS_STAGE_OFF\0" /* 36208 */
+ "LS_STAGE_ON\0" /* 36221 */
+ "CS_STAGE_ON\0" /* 36233 */
+ "ES_STAGE_OFF\0" /* 36245 */
+ "ES_STAGE_DS\0" /* 36258 */
+ "ES_STAGE_REAL\0" /* 36270 */
+ "VS_STAGE_REAL\0" /* 36284 */
+ "VS_STAGE_DS\0" /* 36298 */
+ "VS_STAGE_COPY_SHADER\0" /* 36310 */
+ "DYNAMIC_HS\0" /* 36331 */
+ "DIS_DEALLOC_ACCUM_0\0" /* 36342 */
+ "DIS_DEALLOC_ACCUM_1\0" /* 36362 */
+ "VS_WAVE_ID_EN\0" /* 36382 */
+ "ORDERED_ID_MODE\0" /* 36396 */
+ "GS_FAST_LAUNCH\0" /* 36412 */
+ "NUM_PATCHES\0" /* 36427 */
+ "HS_NUM_INPUT_CP\0" /* 36439 */
+ "HS_NUM_OUTPUT_CP\0" /* 36455 */
+ "TESS_ISOLINE\0" /* 36472 */
+ "TESS_TRIANGLE\0" /* 36485 */
+ "TESS_QUAD\0" /* 36499 */
+ "PART_INTEGER\0" /* 36509 */
+ "PART_POW2\0" /* 36522 */
+ "PART_FRAC_ODD\0" /* 36532 */
+ "PART_FRAC_EVEN\0" /* 36546 */
+ "PARTITIONING\0" /* 36561 */
+ "OUTPUT_POINT\0" /* 36574 */
+ "OUTPUT_LINE\0" /* 36587 */
+ "OUTPUT_TRIANGLE_CW\0" /* 36599 */
+ "OUTPUT_TRIANGLE_CCW\0" /* 36618 */
+ "TOPOLOGY\0" /* 36638 */
+ "RESERVED_REDUC_AXIS\0" /* 36647 */
+ "DEPRECATED\0" /* 36667 */
+ "NUM_DS_WAVES_PER_SIMD\0" /* 36678 */
+ "DISABLE_DONUTS\0" /* 36700 */
+ "VGT_POLICY_BYPASS\0" /* 36715 */
+ "DISTRIBUTION_MODE_NO_DIST\0" /* 36733 */
+ "DISTRIBUTION_MODE_PATCHES\0" /* 36759 */
+ "DISTRIBUTION_MODE_DONUTS\0" /* 36785 */
+ "DISTRIBUTION_MODE_TRAPEZOIDS\0" /* 36810 */
+ "DISTRIBUTION_MODE\0" /* 36839 */
+ "ALPHA_TO_MASK_ENABLE\0" /* 36857 */
+ "ALPHA_TO_MASK_OFFSET0\0" /* 36878 */
+ "ALPHA_TO_MASK_OFFSET1\0" /* 36900 */
+ "ALPHA_TO_MASK_OFFSET2\0" /* 36922 */
+ "ALPHA_TO_MASK_OFFSET3\0" /* 36944 */
+ "OFFSET_ROUND\0" /* 36966 */
+ "POLY_OFFSET_NEG_NUM_DB_BITS\0" /* 36979 */
+ "POLY_OFFSET_DB_IS_FLOAT_FMT\0" /* 37007 */
+ "STREAMOUT_0_EN\0" /* 37035 */
+ "STREAMOUT_1_EN\0" /* 37050 */
+ "STREAMOUT_2_EN\0" /* 37065 */
+ "STREAMOUT_3_EN\0" /* 37080 */
+ "RAST_STREAM\0" /* 37095 */
+ "RAST_STREAM_MASK\0" /* 37107 */
+ "USE_RAST_STREAM_MASK\0" /* 37124 */
+ "EN_PRIMS_NEEDED_CNT\0" /* 37145 */
+ "STREAM_0_BUFFER_EN\0" /* 37165 */
+ "STREAM_1_BUFFER_EN\0" /* 37184 */
+ "STREAM_2_BUFFER_EN\0" /* 37203 */
+ "STREAM_3_BUFFER_EN\0" /* 37222 */
+ "DISTANCE_0\0" /* 37241 */
+ "DISTANCE_1\0" /* 37252 */
+ "DISTANCE_2\0" /* 37263 */
+ "DISTANCE_3\0" /* 37274 */
+ "DISTANCE_4\0" /* 37285 */
+ "DISTANCE_5\0" /* 37296 */
+ "DISTANCE_6\0" /* 37307 */
+ "DISTANCE_7\0" /* 37318 */
+ "DISTANCE_8\0" /* 37329 */
+ "DISTANCE_9\0" /* 37340 */
+ "DISTANCE_10\0" /* 37351 */
+ "DISTANCE_11\0" /* 37363 */
+ "DISTANCE_12\0" /* 37375 */
+ "DISTANCE_13\0" /* 37387 */
+ "DISTANCE_14\0" /* 37399 */
+ "DISTANCE_15\0" /* 37411 */
+ "EXPAND_LINE_WIDTH\0" /* 37423 */
+ "LAST_PIXEL\0" /* 37441 */
+ "PERPENDICULAR_ENDCAP_ENA\0" /* 37452 */
+ "DX10_DIAMOND_TEST_ENA\0" /* 37477 */
+ "MSAA_NUM_SAMPLES\0" /* 37499 */
+ "AA_MASK_CENTROID_DTMN\0" /* 37516 */
+ "MAX_SAMPLE_DIST\0" /* 37538 */
+ "MSAA_EXPOSED_SAMPLES\0" /* 37554 */
+ "DETAIL_TO_EXPOSED_MODE\0" /* 37575 */
+ "COVERAGE_TO_SHADER_SELECT\0" /* 37598 */
+ "PIX_CENTER\0" /* 37624 */
+ "X_TRUNCATE\0" /* 37635 */
+ "X_ROUND\0" /* 37646 */
+ "X_ROUND_TO_EVEN\0" /* 37654 */
+ "X_ROUND_TO_ODD\0" /* 37670 */
+ "ROUND_MODE\0" /* 37685 */
+ "X_16_8_FIXED_POINT_1_16TH\0" /* 37696 */
+ "X_16_8_FIXED_POINT_1_8TH\0" /* 37722 */
+ "X_16_8_FIXED_POINT_1_4TH\0" /* 37747 */
+ "X_16_8_FIXED_POINT_1_2\0" /* 37772 */
+ "X_16_8_FIXED_POINT_1\0" /* 37795 */
+ "X_16_8_FIXED_POINT_1_256TH\0" /* 37816 */
+ "X_14_10_FIXED_POINT_1_1024TH\0" /* 37843 */
+ "X_12_12_FIXED_POINT_1_4096TH\0" /* 37872 */
+ "QUANT_MODE\0" /* 37901 */
+ "S0_X\0" /* 37912 */
+ "S0_Y\0" /* 37917 */
+ "S1_X\0" /* 37922 */
+ "S1_Y\0" /* 37927 */
+ "S2_X\0" /* 37932 */
+ "S2_Y\0" /* 37937 */
+ "S3_X\0" /* 37942 */
+ "S3_Y\0" /* 37947 */
+ "S4_X\0" /* 37952 */
+ "S4_Y\0" /* 37957 */
+ "S5_X\0" /* 37962 */
+ "S5_Y\0" /* 37967 */
+ "S6_X\0" /* 37972 */
+ "S6_Y\0" /* 37977 */
+ "S7_X\0" /* 37982 */
+ "S7_Y\0" /* 37987 */
+ "S8_X\0" /* 37992 */
+ "S8_Y\0" /* 37997 */
+ "S9_X\0" /* 38002 */
+ "S9_Y\0" /* 38007 */
+ "S10_X\0" /* 38012 */
+ "S10_Y\0" /* 38018 */
+ "S11_X\0" /* 38024 */
+ "S11_Y\0" /* 38030 */
+ "S12_X\0" /* 38036 */
+ "S12_Y\0" /* 38042 */
+ "S13_X\0" /* 38048 */
+ "S13_Y\0" /* 38054 */
+ "S14_X\0" /* 38060 */
+ "S14_Y\0" /* 38066 */
+ "S15_X\0" /* 38072 */
+ "S15_Y\0" /* 38078 */
+ "AA_MASK_X0Y0\0" /* 38084 */
+ "AA_MASK_X1Y0\0" /* 38097 */
+ "AA_MASK_X0Y1\0" /* 38110 */
+ "AA_MASK_X1Y1\0" /* 38123 */
+ "REALIGN_DQUADS_AFTER_N_WAVES\0" /* 38136 */
+ "VTX_REUSE_DEPTH\0" /* 38165 */
+ "DEALLOC_DIST\0" /* 38181 */
+ "FMASK_TILE_MAX\0" /* 38194 */
+ "MIP_LEVEL\0" /* 38209 */
+ "ENDIAN_NONE\0" /* 38219 */
+ "ENDIAN_8IN16\0" /* 38231 */
+ "ENDIAN_8IN32\0" /* 38244 */
+ "ENDIAN_8IN64\0" /* 38257 */
+ "ENDIAN\0" /* 38270 */
+ "COLOR_INVALID\0" /* 38277 */
+ "COLOR_8\0" /* 38291 */
+ "COLOR_16\0" /* 38299 */
+ "COLOR_8_8\0" /* 38308 */
+ "COLOR_32\0" /* 38318 */
+ "COLOR_16_16\0" /* 38327 */
+ "COLOR_10_11_11\0" /* 38339 */
+ "COLOR_11_11_10\0" /* 38354 */
+ "COLOR_10_10_10_2\0" /* 38369 */
+ "COLOR_2_10_10_10\0" /* 38386 */
+ "COLOR_8_8_8_8\0" /* 38403 */
+ "COLOR_32_32\0" /* 38417 */
+ "COLOR_16_16_16_16\0" /* 38429 */
+ "COLOR_32_32_32_32\0" /* 38447 */
+ "COLOR_5_6_5\0" /* 38465 */
+ "COLOR_1_5_5_5\0" /* 38477 */
+ "COLOR_5_5_5_1\0" /* 38491 */
+ "COLOR_4_4_4_4\0" /* 38505 */
+ "COLOR_8_24\0" /* 38519 */
+ "COLOR_24_8\0" /* 38530 */
+ "COLOR_X24_8_32_FLOAT\0" /* 38541 */
+ "NUMBER_UNORM\0" /* 38562 */
+ "NUMBER_SNORM\0" /* 38575 */
+ "NUMBER_UINT\0" /* 38588 */
+ "NUMBER_SINT\0" /* 38600 */
+ "NUMBER_SRGB\0" /* 38612 */
+ "NUMBER_FLOAT\0" /* 38624 */
+ "NUMBER_TYPE\0" /* 38637 */
+ "SWAP_STD\0" /* 38649 */
+ "SWAP_ALT\0" /* 38658 */
+ "SWAP_STD_REV\0" /* 38667 */
+ "SWAP_ALT_REV\0" /* 38680 */
+ "COMP_SWAP\0" /* 38693 */
+ "BLEND_CLAMP\0" /* 38703 */
+ "BLEND_BYPASS\0" /* 38715 */
+ "SIMPLE_FLOAT\0" /* 38728 */
+ "CMASK_IS_LINEAR\0" /* 38741 */
+ "FORCE_OPT_AUTO\0" /* 38757 */
+ "FORCE_OPT_DISABLE\0" /* 38772 */
+ "FORCE_OPT_ENABLE_IF_SRC_A_0\0" /* 38790 */
+ "FORCE_OPT_ENABLE_IF_SRC_RGB_0\0" /* 38818 */
+ "FORCE_OPT_ENABLE_IF_SRC_ARGB_0\0" /* 38848 */
+ "FORCE_OPT_ENABLE_IF_SRC_A_1\0" /* 38879 */
+ "FORCE_OPT_ENABLE_IF_SRC_RGB_1\0" /* 38907 */
+ "FORCE_OPT_ENABLE_IF_SRC_ARGB_1\0" /* 38937 */
+ "BLEND_OPT_DONT_RD_DST\0" /* 38968 */
+ "BLEND_OPT_DISCARD_PIXEL\0" /* 38990 */
+ "FMASK_COMPRESSION_DISABLE\0" /* 39014 */
+ "FMASK_COMPRESS_1FRAG_ONLY\0" /* 39040 */
+ "DCC_ENABLE\0" /* 39066 */
+ "CMASK_ADDR_TYPE\0" /* 39077 */
+ "FMASK_TILE_MODE_INDEX\0" /* 39093 */
+ "FMASK_BANK_HEIGHT\0" /* 39115 */
+ "NUM_FRAGMENTS\0" /* 39133 */
+ "FORCE_DST_ALPHA_1\0" /* 39147 */
+ "MIP0_DEPTH\0" /* 39165 */
+ "COLOR_SW_MODE\0" /* 39176 */
+ "FMASK_SW_MODE\0" /* 39190 */
+ "RESOURCE_TYPE\0" /* 39204 */
+ "KEY_CLEAR_ENABLE\0" /* 39218 */
+ "MAX_UNCOMPRESSED_BLOCK_SIZE\0" /* 39235 */
+ "MIN_COMPRESSED_BLOCK_SIZE\0" /* 39263 */
+ "MAX_COMPRESSED_BLOCK_SIZE\0" /* 39289 */
+ "INDEPENDENT_64B_BLOCKS\0" /* 39315 */
+ "LOSSY_RGB_PRECISION\0" /* 39338 */
+ "LOSSY_ALPHA_PRECISION\0" /* 39358 */
+ "MATCH_ALL_BITS\0" /* 39380 */
+ "BASE_HI\0" /* 39395 */
+ "EN_INST_OPT_BASIC\0" /* 39403 */
+ "EN_INST_OPT_ADV\0" /* 39421 */
+ "HW_USE_ONLY\0" /* 39437 */
+ "DWB\0" /* 39449 */
+ "GRAD_ADJ_0\0" /* 39453 */
+ "GRAD_ADJ_1\0" /* 39464 */
+ "GRAD_ADJ_2\0" /* 39475 */
+ "GRAD_ADJ_3\0" /* 39486 */
+ "TTRACE_STALL_ALL\0" /* 39497 */
+ "ALLOC_ARB_LRU_ENA\0" /* 39514 */
+ "EXP_ARB_LRU_ENA\0" /* 39532 */
+ "PS_PKR_PRIORITY_CNTL\0" /* 39548 */
+ "BATON_RESET_DISABLE\0" /* 39569 */
+ "CRC_SIMD_ID_WADDR_DISABLE\0" /* 39589 */
+ "LBPW_CU_CHK_MODE\0" /* 39615 */
+ "LBPW_CU_CHK_CNT\0" /* 39632 */
+ "CSC_PWR_SAVE_DISABLE\0" /* 39648 */
+ "CSG_PWR_SAVE_DISABLE\0" /* 39669 */
+ "CONTEXT_SAVE_WAIT_GDS_REQUEST_CYCLE_OVHD\0" /* 39690 */
+ "CONTEXT_SAVE_WAIT_GDS_GRANT_CYCLE_OVHD\0" /* 39731 */
+ "SPI_SHADER_LATE_ALLOC_GS\0" /* 39770 */
+ "X_MAX\0" /* 39795 */
+ "Y_MAX\0" /* 39801 */
+ "PARTIALLY_RESIDENT\0" /* 39807 */
+ "FAULT_BEHAVIOR\0" /* 39826 */
+ "ITERATE_FLUSH\0" /* 39841 */
+ "MAXMIP\0" /* 39855 */
+ "FORCE_ON\0" /* 39862 */
+ "PUNCHOUT_MODE\0" /* 39871 */
+ "POPS_DRAIN_PS_ON_OVERLAP\0" /* 39885 */
+ "DISALLOW_OVERFLOW\0" /* 39910 */
+ "PS_INVOKE_MASK\0" /* 39928 */
+ "EPITCH\0" /* 39943 */
+ "NUM_SE\0" /* 39950 */
+ "DISABLE_SRBSL_DB_OPTIMIZED_PACKING\0" /* 39957 */
+ "PERFMON_ENABLE\0" /* 39992 */
+ "LEFT_QTR\0" /* 40007 */
+ "LEFT_HALF\0" /* 40016 */
+ "RIGHT_HALF\0" /* 40026 */
+ "RIGHT_QTR\0" /* 40037 */
+ "TOP_QTR\0" /* 40047 */
+ "TOP_HALF\0" /* 40055 */
+ "BOT_HALF\0" /* 40064 */
+ "BOT_QTR\0" /* 40073 */
+ "LEFT_EYE_FOV_LEFT\0" /* 40081 */
+ "LEFT_EYE_FOV_RIGHT\0" /* 40099 */
+ "RIGHT_EYE_FOV_LEFT\0" /* 40118 */
+ "RIGHT_EYE_FOV_RIGHT\0" /* 40137 */
+ "FOV_TOP\0" /* 40157 */
+ "FOV_BOT\0" /* 40165 */
+ "OBJ_ID_SEL\0" /* 40173 */
+ "ADD_PIPED_PRIM_ID\0" /* 40184 */
+ "EN_32BIT_OBJPRIMID\0" /* 40202 */
+ "VERTEX_REUSE_OFF\0" /* 40221 */
+ "INDEX_BUF_EDGE_FLAG_ENA\0" /* 40238 */
+ "DISCARD_0_AREA_TRIANGLES\0" /* 40262 */
+ "DISCARD_0_AREA_LINES\0" /* 40287 */
+ "DISCARD_0_AREA_POINTS\0" /* 40308 */
+ "DISCARD_0_AREA_RECTANGLES\0" /* 40330 */
+ "USE_PROVOKING_ZW\0" /* 40356 */
+ "MAX_PRIMS_PER_SUBGROUP\0" /* 40373 */
+ "OBJPRIM_ID_EN\0" /* 40396 */
+ "EN_REG_RT_INDEX\0" /* 40410 */
+ "EN_PIPELINE_PRIMID\0" /* 40426 */
+ "OBJECT_ID_INST_EN\0" /* 40445 */
+ "COMPOUND_INDEX_EN\0" /* 40463 */
+ "BINNING_ALLOWED\0" /* 40481 */
+ "FORCE_BINNING_ON\0" /* 40497 */
+ "DISABLE_BINNING_USE_NEW_SC\0" /* 40514 */
+ "DISABLE_BINNING_USE_LEGACY_SC\0" /* 40541 */
+ "BINNING_MODE\0" /* 40571 */
+ "BIN_SIZE_X\0" /* 40584 */
+ "BIN_SIZE_Y\0" /* 40595 */
+ "BIN_SIZE_X_EXTEND\0" /* 40606 */
+ "BIN_SIZE_Y_EXTEND\0" /* 40624 */
+ "CONTEXT_STATES_PER_BIN\0" /* 40642 */
+ "PERSISTENT_STATES_PER_BIN\0" /* 40665 */
+ "DISABLE_START_OF_PRIM\0" /* 40691 */
+ "FPOVS_PER_BATCH\0" /* 40713 */
+ "OPTIMAL_BIN_SELECTION\0" /* 40729 */
+ "MAX_ALLOC_COUNT\0" /* 40751 */
+ "MAX_PRIM_PER_BATCH\0" /* 40767 */
+ "OVER_RAST_ENABLE\0" /* 40786 */
+ "OVER_RAST_SAMPLE_SELECT\0" /* 40803 */
+ "UNDER_RAST_ENABLE\0" /* 40827 */
+ "UNDER_RAST_SAMPLE_SELECT\0" /* 40845 */
+ "PBB_UNCERTAINTY_REGION_ENABLE\0" /* 40870 */
+ "ZMM_TRI_EXTENT\0" /* 40900 */
+ "ZMM_TRI_OFFSET\0" /* 40915 */
+ "OVERRIDE_OVER_RAST_INNER_TO_NORMAL\0" /* 40930 */
+ "OVERRIDE_UNDER_RAST_INNER_TO_NORMAL\0" /* 40965 */
+ "DEGENERATE_OVERRIDE_INNER_TO_NORMAL_DISABLE\0" /* 41001 */
+ "UNCERTAINTY_REGION_MODE\0" /* 41045 */
+ "OUTER_UNCERTAINTY_EDGERULE_OVERRIDE\0" /* 41069 */
+ "INNER_UNCERTAINTY_EDGERULE_OVERRIDE\0" /* 41105 */
+ "NULL_SQUAD_AA_MASK_ENABLE\0" /* 41141 */
+ "COVERAGE_AA_MASK_ENABLE\0" /* 41167 */
+ "PREZ_AA_MASK_ENABLE\0" /* 41191 */
+ "POSTZ_AA_MASK_ENABLE\0" /* 41211 */
+ "CENTROID_SAMPLE_OVERRIDE\0" /* 41232 */
+ "MAX_DEALLOCS_IN_WAVE\0" /* 41257 */
+ "BASE_256B\0" /* 41278 */
+ "MIP0_HEIGHT\0" /* 41288 */
+ "MIP0_WIDTH\0" /* 41300 */
+ "DRAW_INDEX_LOC\0" /* 41311 */
+ "IB_BASE_LO\0" /* 41326 */
+ "IB_BASE_HI\0" /* 41337 */
+ "CP_DMA_WORD0\0" /* 41348 */
+ "CP_DMA_WORD1\0" /* 41361 */
+ "CP_DMA_WORD2\0" /* 41374 */
+ "CP_DMA_WORD3\0" /* 41387 */
+ "COMMAND\0" /* 41400 */
+ "DMA_DATA_WORD0\0" /* 41408 */
+ "SRBM_STATUS2\0" /* 41423 */
+ "SRBM_STATUS\0" /* 41436 */
+ "SRBM_STATUS3\0" /* 41448 */
+ "SDMA0_STATUS_REG\0" /* 41461 */
+ "SDMA1_STATUS_REG\0" /* 41478 */
+ "GRBM_STATUS2\0" /* 41495 */
+ "GRBM_STATUS\0" /* 41508 */
+ "CP_STRMOUT_CNTL\0" /* 41520 */
+ "CP_COHER_CNTL\0" /* 41536 */
+ "CP_COHER_SIZE\0" /* 41550 */
+ "CP_COHER_BASE\0" /* 41564 */
+ "GRBM_STATUS_SE0\0" /* 41578 */
+ "GRBM_STATUS_SE1\0" /* 41594 */
+ "GRBM_STATUS_SE2\0" /* 41610 */
+ "GRBM_STATUS_SE3\0" /* 41626 */
+ "CP_COHER_BASE_HI\0" /* 41642 */
+ "CP_COHER_START_DELAY\0" /* 41659 */
+ "CP_COHER_STATUS\0" /* 41680 */
+ "CP_CPC_STATUS\0" /* 41696 */
+ "CP_CPC_BUSY_STAT\0" /* 41710 */
+ "CP_CPC_STALLED_STAT1\0" /* 41727 */
+ "CP_CPF_STATUS\0" /* 41748 */
+ "CP_CPF_BUSY_STAT\0" /* 41762 */
+ "CP_CPF_STALLED_STAT1\0" /* 41779 */
+ "CP_COHER_SIZE_HI\0" /* 41800 */
+ "VGT_VTX_VECT_EJECT_REG\0" /* 41817 */
+ "VGT_CACHE_INVALIDATION\0" /* 41840 */
+ "VGT_ESGS_RING_SIZE\0" /* 41863 */
+ "VGT_GSVS_RING_SIZE\0" /* 41882 */
+ "VGT_GS_VERTEX_REUSE\0" /* 41901 */
+ "VGT_PRIMITIVE_TYPE\0" /* 41921 */
+ "VGT_INDEX_TYPE\0" /* 41940 */
+ "VGT_STRMOUT_BUFFER_FILLED_SIZE_0\0" /* 41955 */
+ "VGT_STRMOUT_BUFFER_FILLED_SIZE_1\0" /* 41988 */
+ "VGT_STRMOUT_BUFFER_FILLED_SIZE_2\0" /* 42021 */
+ "VGT_STRMOUT_BUFFER_FILLED_SIZE_3\0" /* 42054 */
+ "VGT_NUM_INDICES\0" /* 42087 */
+ "VGT_NUM_INSTANCES\0" /* 42103 */
+ "VGT_TF_RING_SIZE\0" /* 42121 */
+ "VGT_HS_OFFCHIP_PARAM\0" /* 42138 */
+ "VGT_TF_MEMORY_BASE\0" /* 42159 */
+ "PA_CL_ENHANCE\0" /* 42178 */
+ "PA_SU_LINE_STIPPLE_VALUE\0" /* 42192 */
+ "PA_SC_LINE_STIPPLE_STATE\0" /* 42217 */
+ "CP_STALLED_STAT3\0" /* 42242 */
+ "CP_STALLED_STAT1\0" /* 42259 */
+ "CP_STALLED_STAT2\0" /* 42276 */
+ "CP_STAT\0" /* 42293 */
+ "GRBM_GFX_INDEX\0" /* 42301 */
+ "PA_SC_SCREEN_EXTENT_MIN_0\0" /* 42316 */
+ "PA_SC_SCREEN_EXTENT_MAX_0\0" /* 42342 */
+ "PA_SC_SCREEN_EXTENT_MIN_1\0" /* 42368 */
+ "PA_SC_SCREEN_EXTENT_MAX_1\0" /* 42394 */
+ "PA_SC_ENHANCE\0" /* 42420 */
+ "SQC_CACHES\0" /* 42434 */
+ "SQ_RANDOM_WAVE_PRI\0" /* 42445 */
+ "SQ_EXP_0\0" /* 42464 */
+ "TA_CS_BC_BASE_ADDR\0" /* 42473 */
+ "TA_CS_BC_BASE_ADDR_HI\0" /* 42492 */
+ "DB_OCCLUSION_COUNT0_LOW\0" /* 42514 */
+ "SQ_BUF_RSRC_WORD0\0" /* 42538 */
+ "DB_OCCLUSION_COUNT0_HI\0" /* 42556 */
+ "SQ_BUF_RSRC_WORD1\0" /* 42579 */
+ "DB_OCCLUSION_COUNT1_LOW\0" /* 42597 */
+ "SQ_BUF_RSRC_WORD2\0" /* 42621 */
+ "DB_OCCLUSION_COUNT1_HI\0" /* 42639 */
+ "SQ_BUF_RSRC_WORD3\0" /* 42662 */
+ "DB_OCCLUSION_COUNT2_LOW\0" /* 42680 */
+ "SQ_IMG_RSRC_WORD0\0" /* 42704 */
+ "DB_OCCLUSION_COUNT2_HI\0" /* 42722 */
+ "SQ_IMG_RSRC_WORD1\0" /* 42745 */
+ "DB_OCCLUSION_COUNT3_LOW\0" /* 42763 */
+ "SQ_IMG_RSRC_WORD2\0" /* 42787 */
+ "DB_OCCLUSION_COUNT3_HI\0" /* 42805 */
+ "SQ_IMG_RSRC_WORD3\0" /* 42828 */
+ "SQ_IMG_RSRC_WORD4\0" /* 42846 */
+ "SQ_IMG_RSRC_WORD5\0" /* 42864 */
+ "SQ_IMG_RSRC_WORD6\0" /* 42882 */
+ "SQ_IMG_RSRC_WORD7\0" /* 42900 */
+ "SQ_IMG_SAMP_WORD0\0" /* 42918 */
+ "SQ_IMG_SAMP_WORD1\0" /* 42936 */
+ "SQ_IMG_SAMP_WORD2\0" /* 42954 */
+ "SQ_IMG_SAMP_WORD3\0" /* 42972 */
+ "SPI_DYN_GPR_LOCK_EN\0" /* 42990 */
+ "SPI_STATIC_THREAD_MGMT_1\0" /* 43010 */
+ "SPI_STATIC_THREAD_MGMT_2\0" /* 43035 */
+ "SPI_STATIC_THREAD_MGMT_3\0" /* 43060 */
+ "SPI_PS_MAX_WAVE_ID\0" /* 43085 */
+ "SPI_ARB_PRIORITY\0" /* 43104 */
+ "SPI_ARB_CYCLES_0\0" /* 43121 */
+ "SPI_ARB_CYCLES_1\0" /* 43138 */
+ "SQ_FLAT_SCRATCH_WORD0\0" /* 43155 */
+ "SQ_FLAT_SCRATCH_WORD1\0" /* 43177 */
+ "DB_ZPASS_COUNT_LOW\0" /* 43199 */
+ "DB_ZPASS_COUNT_HI\0" /* 43218 */
+ "SPI_CONFIG_CNTL\0" /* 43236 */
+ "SPI_CONFIG_CNTL_1\0" /* 43252 */
+ "SPI_RESOURCE_RESERVE_CU_AB_0\0" /* 43270 */
+ "DB_SUBTILE_CONTROL\0" /* 43299 */
+ "GB_ADDR_CONFIG\0" /* 43318 */
+ "GB_TILE_MODE0\0" /* 43333 */
+ "GB_TILE_MODE1\0" /* 43347 */
+ "GB_TILE_MODE2\0" /* 43361 */
+ "GB_TILE_MODE3\0" /* 43375 */
+ "GB_TILE_MODE4\0" /* 43389 */
+ "GB_TILE_MODE5\0" /* 43403 */
+ "GB_TILE_MODE6\0" /* 43417 */
+ "GB_TILE_MODE7\0" /* 43431 */
+ "GB_TILE_MODE8\0" /* 43445 */
+ "GB_TILE_MODE9\0" /* 43459 */
+ "GB_TILE_MODE10\0" /* 43473 */
+ "GB_TILE_MODE11\0" /* 43488 */
+ "GB_TILE_MODE12\0" /* 43503 */
+ "GB_TILE_MODE13\0" /* 43518 */
+ "GB_TILE_MODE14\0" /* 43533 */
+ "GB_TILE_MODE15\0" /* 43548 */
+ "GB_TILE_MODE16\0" /* 43563 */
+ "GB_TILE_MODE17\0" /* 43578 */
+ "GB_TILE_MODE18\0" /* 43593 */
+ "GB_TILE_MODE19\0" /* 43608 */
+ "GB_TILE_MODE20\0" /* 43623 */
+ "GB_TILE_MODE21\0" /* 43638 */
+ "GB_TILE_MODE22\0" /* 43653 */
+ "GB_TILE_MODE23\0" /* 43668 */
+ "GB_TILE_MODE24\0" /* 43683 */
+ "GB_TILE_MODE25\0" /* 43698 */
+ "GB_TILE_MODE26\0" /* 43713 */
+ "GB_TILE_MODE27\0" /* 43728 */
+ "GB_TILE_MODE28\0" /* 43743 */
+ "GB_TILE_MODE29\0" /* 43758 */
+ "GB_TILE_MODE30\0" /* 43773 */
+ "GB_TILE_MODE31\0" /* 43788 */
+ "GB_MACROTILE_MODE0\0" /* 43803 */
+ "GB_MACROTILE_MODE1\0" /* 43822 */
+ "GB_MACROTILE_MODE2\0" /* 43841 */
+ "GB_MACROTILE_MODE3\0" /* 43860 */
+ "GB_MACROTILE_MODE4\0" /* 43879 */
+ "GB_MACROTILE_MODE5\0" /* 43898 */
+ "GB_MACROTILE_MODE6\0" /* 43917 */
+ "GB_MACROTILE_MODE7\0" /* 43936 */
+ "GB_MACROTILE_MODE8\0" /* 43955 */
+ "GB_MACROTILE_MODE9\0" /* 43974 */
+ "GB_MACROTILE_MODE10\0" /* 43993 */
+ "GB_MACROTILE_MODE11\0" /* 44013 */
+ "GB_MACROTILE_MODE12\0" /* 44033 */
+ "GB_MACROTILE_MODE13\0" /* 44053 */
+ "GB_MACROTILE_MODE14\0" /* 44073 */
+ "GB_MACROTILE_MODE15\0" /* 44093 */
+ "SPI_SHADER_TBA_LO_PS\0" /* 44113 */
+ "SPI_SHADER_TBA_HI_PS\0" /* 44134 */
+ "SPI_SHADER_TMA_LO_PS\0" /* 44155 */
+ "SPI_SHADER_TMA_HI_PS\0" /* 44176 */
+ "SPI_SHADER_PGM_RSRC3_PS\0" /* 44197 */
+ "SPI_SHADER_PGM_LO_PS\0" /* 44221 */
+ "SPI_SHADER_PGM_HI_PS\0" /* 44242 */
+ "SPI_SHADER_PGM_RSRC1_PS\0" /* 44263 */
+ "SPI_SHADER_PGM_RSRC2_PS\0" /* 44287 */
+ "SPI_SHADER_USER_DATA_PS_0\0" /* 44311 */
+ "SPI_SHADER_USER_DATA_PS_1\0" /* 44337 */
+ "SPI_SHADER_USER_DATA_PS_2\0" /* 44363 */
+ "SPI_SHADER_USER_DATA_PS_3\0" /* 44389 */
+ "SPI_SHADER_USER_DATA_PS_4\0" /* 44415 */
+ "SPI_SHADER_USER_DATA_PS_5\0" /* 44441 */
+ "SPI_SHADER_USER_DATA_PS_6\0" /* 44467 */
+ "SPI_SHADER_USER_DATA_PS_7\0" /* 44493 */
+ "SPI_SHADER_USER_DATA_PS_8\0" /* 44519 */
+ "SPI_SHADER_USER_DATA_PS_9\0" /* 44545 */
+ "SPI_SHADER_USER_DATA_PS_10\0" /* 44571 */
+ "SPI_SHADER_USER_DATA_PS_11\0" /* 44598 */
+ "SPI_SHADER_USER_DATA_PS_12\0" /* 44625 */
+ "SPI_SHADER_USER_DATA_PS_13\0" /* 44652 */
+ "SPI_SHADER_USER_DATA_PS_14\0" /* 44679 */
+ "SPI_SHADER_USER_DATA_PS_15\0" /* 44706 */
+ "SPI_SHADER_TBA_LO_VS\0" /* 44733 */
+ "SPI_SHADER_TBA_HI_VS\0" /* 44754 */
+ "SPI_SHADER_TMA_LO_VS\0" /* 44775 */
+ "SPI_SHADER_TMA_HI_VS\0" /* 44796 */
+ "SPI_SHADER_PGM_RSRC3_VS\0" /* 44817 */
+ "SPI_SHADER_LATE_ALLOC_VS\0" /* 44841 */
+ "SPI_SHADER_PGM_LO_VS\0" /* 44866 */
+ "SPI_SHADER_PGM_HI_VS\0" /* 44887 */
+ "SPI_SHADER_PGM_RSRC1_VS\0" /* 44908 */
+ "SPI_SHADER_PGM_RSRC2_VS\0" /* 44932 */
+ "SPI_SHADER_USER_DATA_VS_0\0" /* 44956 */
+ "SPI_SHADER_USER_DATA_VS_1\0" /* 44982 */
+ "SPI_SHADER_USER_DATA_VS_2\0" /* 45008 */
+ "SPI_SHADER_USER_DATA_VS_3\0" /* 45034 */
+ "SPI_SHADER_USER_DATA_VS_4\0" /* 45060 */
+ "SPI_SHADER_USER_DATA_VS_5\0" /* 45086 */
+ "SPI_SHADER_USER_DATA_VS_6\0" /* 45112 */
+ "SPI_SHADER_USER_DATA_VS_7\0" /* 45138 */
+ "SPI_SHADER_USER_DATA_VS_8\0" /* 45164 */
+ "SPI_SHADER_USER_DATA_VS_9\0" /* 45190 */
+ "SPI_SHADER_USER_DATA_VS_10\0" /* 45216 */
+ "SPI_SHADER_USER_DATA_VS_11\0" /* 45243 */
+ "SPI_SHADER_USER_DATA_VS_12\0" /* 45270 */
+ "SPI_SHADER_USER_DATA_VS_13\0" /* 45297 */
+ "SPI_SHADER_USER_DATA_VS_14\0" /* 45324 */
+ "SPI_SHADER_USER_DATA_VS_15\0" /* 45351 */
+ "SPI_SHADER_TBA_LO_GS\0" /* 45378 */
+ "SPI_SHADER_TBA_HI_GS\0" /* 45399 */
+ "SPI_SHADER_TMA_LO_GS\0" /* 45420 */
+ "SPI_SHADER_TMA_HI_GS\0" /* 45441 */
+ "SPI_SHADER_PGM_RSRC3_GS\0" /* 45462 */
+ "SPI_SHADER_PGM_LO_GS\0" /* 45486 */
+ "SPI_SHADER_PGM_HI_GS\0" /* 45507 */
+ "SPI_SHADER_PGM_RSRC1_GS\0" /* 45528 */
+ "SPI_SHADER_PGM_RSRC2_GS\0" /* 45552 */
+ "SPI_SHADER_USER_DATA_GS_0\0" /* 45576 */
+ "SPI_SHADER_USER_DATA_GS_1\0" /* 45602 */
+ "SPI_SHADER_USER_DATA_GS_2\0" /* 45628 */
+ "SPI_SHADER_USER_DATA_GS_3\0" /* 45654 */
+ "SPI_SHADER_USER_DATA_GS_4\0" /* 45680 */
+ "SPI_SHADER_USER_DATA_GS_5\0" /* 45706 */
+ "SPI_SHADER_USER_DATA_GS_6\0" /* 45732 */
+ "SPI_SHADER_USER_DATA_GS_7\0" /* 45758 */
+ "SPI_SHADER_USER_DATA_GS_8\0" /* 45784 */
+ "SPI_SHADER_USER_DATA_GS_9\0" /* 45810 */
+ "SPI_SHADER_USER_DATA_GS_10\0" /* 45836 */
+ "SPI_SHADER_USER_DATA_GS_11\0" /* 45863 */
+ "SPI_SHADER_USER_DATA_GS_12\0" /* 45890 */
+ "SPI_SHADER_USER_DATA_GS_13\0" /* 45917 */
+ "SPI_SHADER_USER_DATA_GS_14\0" /* 45944 */
+ "SPI_SHADER_USER_DATA_GS_15\0" /* 45971 */
+ "SPI_SHADER_TBA_LO_ES\0" /* 45998 */
+ "SPI_SHADER_TBA_HI_ES\0" /* 46019 */
+ "SPI_SHADER_TMA_LO_ES\0" /* 46040 */
+ "SPI_SHADER_TMA_HI_ES\0" /* 46061 */
+ "SPI_SHADER_PGM_RSRC3_ES\0" /* 46082 */
+ "SPI_SHADER_PGM_LO_ES\0" /* 46106 */
+ "SPI_SHADER_PGM_HI_ES\0" /* 46127 */
+ "SPI_SHADER_PGM_RSRC1_ES\0" /* 46148 */
+ "SPI_SHADER_PGM_RSRC2_ES\0" /* 46172 */
+ "SPI_SHADER_USER_DATA_ES_0\0" /* 46196 */
+ "SPI_SHADER_USER_DATA_ES_1\0" /* 46222 */
+ "SPI_SHADER_USER_DATA_ES_2\0" /* 46248 */
+ "SPI_SHADER_USER_DATA_ES_3\0" /* 46274 */
+ "SPI_SHADER_USER_DATA_ES_4\0" /* 46300 */
+ "SPI_SHADER_USER_DATA_ES_5\0" /* 46326 */
+ "SPI_SHADER_USER_DATA_ES_6\0" /* 46352 */
+ "SPI_SHADER_USER_DATA_ES_7\0" /* 46378 */
+ "SPI_SHADER_USER_DATA_ES_8\0" /* 46404 */
+ "SPI_SHADER_USER_DATA_ES_9\0" /* 46430 */
+ "SPI_SHADER_USER_DATA_ES_10\0" /* 46456 */
+ "SPI_SHADER_USER_DATA_ES_11\0" /* 46483 */
+ "SPI_SHADER_USER_DATA_ES_12\0" /* 46510 */
+ "SPI_SHADER_USER_DATA_ES_13\0" /* 46537 */
+ "SPI_SHADER_USER_DATA_ES_14\0" /* 46564 */
+ "SPI_SHADER_USER_DATA_ES_15\0" /* 46591 */
+ "SPI_SHADER_TBA_LO_HS\0" /* 46618 */
+ "SPI_SHADER_TBA_HI_HS\0" /* 46639 */
+ "SPI_SHADER_TMA_LO_HS\0" /* 46660 */
+ "SPI_SHADER_TMA_HI_HS\0" /* 46681 */
+ "SPI_SHADER_PGM_RSRC3_HS\0" /* 46702 */
+ "SPI_SHADER_PGM_LO_HS\0" /* 46726 */
+ "SPI_SHADER_PGM_HI_HS\0" /* 46747 */
+ "SPI_SHADER_PGM_RSRC1_HS\0" /* 46768 */
+ "SPI_SHADER_PGM_RSRC2_HS\0" /* 46792 */
+ "SPI_SHADER_USER_DATA_HS_0\0" /* 46816 */
+ "SPI_SHADER_USER_DATA_HS_1\0" /* 46842 */
+ "SPI_SHADER_USER_DATA_HS_2\0" /* 46868 */
+ "SPI_SHADER_USER_DATA_HS_3\0" /* 46894 */
+ "SPI_SHADER_USER_DATA_HS_4\0" /* 46920 */
+ "SPI_SHADER_USER_DATA_HS_5\0" /* 46946 */
+ "SPI_SHADER_USER_DATA_HS_6\0" /* 46972 */
+ "SPI_SHADER_USER_DATA_HS_7\0" /* 46998 */
+ "SPI_SHADER_USER_DATA_HS_8\0" /* 47024 */
+ "SPI_SHADER_USER_DATA_HS_9\0" /* 47050 */
+ "SPI_SHADER_USER_DATA_HS_10\0" /* 47076 */
+ "SPI_SHADER_USER_DATA_HS_11\0" /* 47103 */
+ "SPI_SHADER_USER_DATA_HS_12\0" /* 47130 */
+ "SPI_SHADER_USER_DATA_HS_13\0" /* 47157 */
+ "SPI_SHADER_USER_DATA_HS_14\0" /* 47184 */
+ "SPI_SHADER_USER_DATA_HS_15\0" /* 47211 */
+ "SPI_SHADER_TBA_LO_LS\0" /* 47238 */
+ "SPI_SHADER_TBA_HI_LS\0" /* 47259 */
+ "SPI_SHADER_TMA_LO_LS\0" /* 47280 */
+ "SPI_SHADER_TMA_HI_LS\0" /* 47301 */
+ "SPI_SHADER_PGM_RSRC3_LS\0" /* 47322 */
+ "SPI_SHADER_PGM_LO_LS\0" /* 47346 */
+ "SPI_SHADER_PGM_HI_LS\0" /* 47367 */
+ "SPI_SHADER_PGM_RSRC1_LS\0" /* 47388 */
+ "SPI_SHADER_PGM_RSRC2_LS\0" /* 47412 */
+ "SPI_SHADER_USER_DATA_LS_0\0" /* 47436 */
+ "SPI_SHADER_USER_DATA_LS_1\0" /* 47462 */
+ "SPI_SHADER_USER_DATA_LS_2\0" /* 47488 */
+ "SPI_SHADER_USER_DATA_LS_3\0" /* 47514 */
+ "SPI_SHADER_USER_DATA_LS_4\0" /* 47540 */
+ "SPI_SHADER_USER_DATA_LS_5\0" /* 47566 */
+ "SPI_SHADER_USER_DATA_LS_6\0" /* 47592 */
+ "SPI_SHADER_USER_DATA_LS_7\0" /* 47618 */
+ "SPI_SHADER_USER_DATA_LS_8\0" /* 47644 */
+ "SPI_SHADER_USER_DATA_LS_9\0" /* 47670 */
+ "SPI_SHADER_USER_DATA_LS_10\0" /* 47696 */
+ "SPI_SHADER_USER_DATA_LS_11\0" /* 47723 */
+ "SPI_SHADER_USER_DATA_LS_12\0" /* 47750 */
+ "SPI_SHADER_USER_DATA_LS_13\0" /* 47777 */
+ "SPI_SHADER_USER_DATA_LS_14\0" /* 47804 */
+ "SPI_SHADER_USER_DATA_LS_15\0" /* 47831 */
+ "COMPUTE_DISPATCH_INITIATOR\0" /* 47858 */
+ "COMPUTE_DIM_X\0" /* 47885 */
+ "COMPUTE_DIM_Y\0" /* 47899 */
+ "COMPUTE_DIM_Z\0" /* 47913 */
+ "COMPUTE_START_X\0" /* 47927 */
+ "COMPUTE_START_Y\0" /* 47943 */
+ "COMPUTE_START_Z\0" /* 47959 */
+ "COMPUTE_NUM_THREAD_X\0" /* 47975 */
+ "COMPUTE_NUM_THREAD_Y\0" /* 47996 */
+ "COMPUTE_NUM_THREAD_Z\0" /* 48017 */
+ "COMPUTE_MAX_WAVE_ID\0" /* 48038 */
+ "COMPUTE_PIPELINESTAT_ENABLE\0" /* 48058 */
+ "COMPUTE_PERFCOUNT_ENABLE\0" /* 48086 */
+ "COMPUTE_PGM_LO\0" /* 48111 */
+ "COMPUTE_PGM_HI\0" /* 48126 */
+ "COMPUTE_TBA_LO\0" /* 48141 */
+ "COMPUTE_TBA_HI\0" /* 48156 */
+ "COMPUTE_TMA_LO\0" /* 48171 */
+ "COMPUTE_TMA_HI\0" /* 48186 */
+ "COMPUTE_PGM_RSRC1\0" /* 48201 */
+ "COMPUTE_PGM_RSRC2\0" /* 48219 */
+ "COMPUTE_VMID\0" /* 48237 */
+ "COMPUTE_RESOURCE_LIMITS\0" /* 48250 */
+ "COMPUTE_STATIC_THREAD_MGMT_SE0\0" /* 48274 */
+ "COMPUTE_STATIC_THREAD_MGMT_SE1\0" /* 48305 */
+ "COMPUTE_TMPRING_SIZE\0" /* 48336 */
+ "COMPUTE_STATIC_THREAD_MGMT_SE2\0" /* 48357 */
+ "COMPUTE_STATIC_THREAD_MGMT_SE3\0" /* 48388 */
+ "COMPUTE_RESTART_X\0" /* 48419 */
+ "COMPUTE_RESTART_Y\0" /* 48437 */
+ "COMPUTE_RESTART_Z\0" /* 48455 */
+ "COMPUTE_MISC_RESERVED\0" /* 48473 */
+ "COMPUTE_DISPATCH_ID\0" /* 48495 */
+ "COMPUTE_THREADGROUP_ID\0" /* 48515 */
+ "COMPUTE_RELAUNCH\0" /* 48538 */
+ "COMPUTE_WAVE_RESTORE_ADDR_LO\0" /* 48555 */
+ "COMPUTE_WAVE_RESTORE_ADDR_HI\0" /* 48584 */
+ "COMPUTE_WAVE_RESTORE_CONTROL\0" /* 48613 */
+ "COMPUTE_USER_DATA_0\0" /* 48642 */
+ "COMPUTE_USER_DATA_1\0" /* 48662 */
+ "COMPUTE_USER_DATA_2\0" /* 48682 */
+ "COMPUTE_USER_DATA_3\0" /* 48702 */
+ "COMPUTE_USER_DATA_4\0" /* 48722 */
+ "COMPUTE_USER_DATA_5\0" /* 48742 */
+ "COMPUTE_USER_DATA_6\0" /* 48762 */
+ "COMPUTE_USER_DATA_7\0" /* 48782 */
+ "COMPUTE_USER_DATA_8\0" /* 48802 */
+ "COMPUTE_USER_DATA_9\0" /* 48822 */
+ "COMPUTE_USER_DATA_10\0" /* 48842 */
+ "COMPUTE_USER_DATA_11\0" /* 48863 */
+ "COMPUTE_USER_DATA_12\0" /* 48884 */
+ "COMPUTE_USER_DATA_13\0" /* 48905 */
+ "COMPUTE_USER_DATA_14\0" /* 48926 */
+ "COMPUTE_USER_DATA_15\0" /* 48947 */
+ "COMPUTE_NOWHERE\0" /* 48968 */
+ "CPG_PERFCOUNTER1_LO\0" /* 48984 */
+ "CPG_PERFCOUNTER1_HI\0" /* 49004 */
+ "CPG_PERFCOUNTER0_LO\0" /* 49024 */
+ "CPG_PERFCOUNTER0_HI\0" /* 49044 */
+ "CPC_PERFCOUNTER1_LO\0" /* 49064 */
+ "CPC_PERFCOUNTER1_HI\0" /* 49084 */
+ "CPC_PERFCOUNTER0_LO\0" /* 49104 */
+ "CPC_PERFCOUNTER0_HI\0" /* 49124 */
+ "CPF_PERFCOUNTER1_LO\0" /* 49144 */
+ "CPF_PERFCOUNTER1_HI\0" /* 49164 */
+ "CPF_PERFCOUNTER0_LO\0" /* 49184 */
+ "CPF_PERFCOUNTER0_HI\0" /* 49204 */
+ "GRBM_PERFCOUNTER0_LO\0" /* 49224 */
+ "GRBM_PERFCOUNTER0_HI\0" /* 49245 */
+ "GRBM_PERFCOUNTER1_LO\0" /* 49266 */
+ "GRBM_PERFCOUNTER1_HI\0" /* 49287 */
+ "GRBM_SE0_PERFCOUNTER_LO\0" /* 49308 */
+ "GRBM_SE0_PERFCOUNTER_HI\0" /* 49332 */
+ "GRBM_SE1_PERFCOUNTER_LO\0" /* 49356 */
+ "GRBM_SE1_PERFCOUNTER_HI\0" /* 49380 */
+ "GRBM_SE2_PERFCOUNTER_LO\0" /* 49404 */
+ "GRBM_SE2_PERFCOUNTER_HI\0" /* 49428 */
+ "GRBM_SE3_PERFCOUNTER_LO\0" /* 49452 */
+ "GRBM_SE3_PERFCOUNTER_HI\0" /* 49476 */
+ "WD_PERFCOUNTER0_LO\0" /* 49500 */
+ "WD_PERFCOUNTER0_HI\0" /* 49519 */
+ "WD_PERFCOUNTER1_LO\0" /* 49538 */
+ "WD_PERFCOUNTER1_HI\0" /* 49557 */
+ "WD_PERFCOUNTER2_LO\0" /* 49576 */
+ "WD_PERFCOUNTER2_HI\0" /* 49595 */
+ "WD_PERFCOUNTER3_LO\0" /* 49614 */
+ "WD_PERFCOUNTER3_HI\0" /* 49633 */
+ "IA_PERFCOUNTER0_LO\0" /* 49652 */
+ "IA_PERFCOUNTER0_HI\0" /* 49671 */
+ "IA_PERFCOUNTER1_LO\0" /* 49690 */
+ "IA_PERFCOUNTER1_HI\0" /* 49709 */
+ "IA_PERFCOUNTER2_LO\0" /* 49728 */
+ "IA_PERFCOUNTER2_HI\0" /* 49747 */
+ "IA_PERFCOUNTER3_LO\0" /* 49766 */
+ "IA_PERFCOUNTER3_HI\0" /* 49785 */
+ "VGT_PERFCOUNTER0_LO\0" /* 49804 */
+ "VGT_PERFCOUNTER0_HI\0" /* 49824 */
+ "VGT_PERFCOUNTER1_LO\0" /* 49844 */
+ "VGT_PERFCOUNTER1_HI\0" /* 49864 */
+ "VGT_PERFCOUNTER2_LO\0" /* 49884 */
+ "VGT_PERFCOUNTER2_HI\0" /* 49904 */
+ "VGT_PERFCOUNTER3_LO\0" /* 49924 */
+ "VGT_PERFCOUNTER3_HI\0" /* 49944 */
+ "PA_SU_PERFCOUNTER0_LO\0" /* 49964 */
+ "PA_SU_PERFCOUNTER0_HI\0" /* 49986 */
+ "PA_SU_PERFCOUNTER1_LO\0" /* 50008 */
+ "PA_SU_PERFCOUNTER1_HI\0" /* 50030 */
+ "PA_SU_PERFCOUNTER2_LO\0" /* 50052 */
+ "PA_SU_PERFCOUNTER2_HI\0" /* 50074 */
+ "PA_SU_PERFCOUNTER3_LO\0" /* 50096 */
+ "PA_SU_PERFCOUNTER3_HI\0" /* 50118 */
+ "PA_SC_PERFCOUNTER0_LO\0" /* 50140 */
+ "PA_SC_PERFCOUNTER0_HI\0" /* 50162 */
+ "PA_SC_PERFCOUNTER1_LO\0" /* 50184 */
+ "PA_SC_PERFCOUNTER1_HI\0" /* 50206 */
+ "PA_SC_PERFCOUNTER2_LO\0" /* 50228 */
+ "PA_SC_PERFCOUNTER2_HI\0" /* 50250 */
+ "PA_SC_PERFCOUNTER3_LO\0" /* 50272 */
+ "PA_SC_PERFCOUNTER3_HI\0" /* 50294 */
+ "PA_SC_PERFCOUNTER4_LO\0" /* 50316 */
+ "PA_SC_PERFCOUNTER4_HI\0" /* 50338 */
+ "PA_SC_PERFCOUNTER5_LO\0" /* 50360 */
+ "PA_SC_PERFCOUNTER5_HI\0" /* 50382 */
+ "PA_SC_PERFCOUNTER6_LO\0" /* 50404 */
+ "PA_SC_PERFCOUNTER6_HI\0" /* 50426 */
+ "PA_SC_PERFCOUNTER7_LO\0" /* 50448 */
+ "PA_SC_PERFCOUNTER7_HI\0" /* 50470 */
+ "SPI_PERFCOUNTER0_HI\0" /* 50492 */
+ "SPI_PERFCOUNTER0_LO\0" /* 50512 */
+ "SPI_PERFCOUNTER1_HI\0" /* 50532 */
+ "SPI_PERFCOUNTER1_LO\0" /* 50552 */
+ "SPI_PERFCOUNTER2_HI\0" /* 50572 */
+ "SPI_PERFCOUNTER2_LO\0" /* 50592 */
+ "SPI_PERFCOUNTER3_HI\0" /* 50612 */
+ "SPI_PERFCOUNTER3_LO\0" /* 50632 */
+ "SPI_PERFCOUNTER4_HI\0" /* 50652 */
+ "SPI_PERFCOUNTER4_LO\0" /* 50672 */
+ "SPI_PERFCOUNTER5_HI\0" /* 50692 */
+ "SPI_PERFCOUNTER5_LO\0" /* 50712 */
+ "SQ_PERFCOUNTER0_LO\0" /* 50732 */
+ "SQ_PERFCOUNTER0_HI\0" /* 50751 */
+ "SQ_PERFCOUNTER1_LO\0" /* 50770 */
+ "SQ_PERFCOUNTER1_HI\0" /* 50789 */
+ "SQ_PERFCOUNTER2_LO\0" /* 50808 */
+ "SQ_PERFCOUNTER2_HI\0" /* 50827 */
+ "SQ_PERFCOUNTER3_LO\0" /* 50846 */
+ "SQ_PERFCOUNTER3_HI\0" /* 50865 */
+ "SQ_PERFCOUNTER4_LO\0" /* 50884 */
+ "SQ_PERFCOUNTER4_HI\0" /* 50903 */
+ "SQ_PERFCOUNTER5_LO\0" /* 50922 */
+ "SQ_PERFCOUNTER5_HI\0" /* 50941 */
+ "SQ_PERFCOUNTER6_LO\0" /* 50960 */
+ "SQ_PERFCOUNTER6_HI\0" /* 50979 */
+ "SQ_PERFCOUNTER7_LO\0" /* 50998 */
+ "SQ_PERFCOUNTER7_HI\0" /* 51017 */
+ "SQ_PERFCOUNTER8_LO\0" /* 51036 */
+ "SQ_PERFCOUNTER8_HI\0" /* 51055 */
+ "SQ_PERFCOUNTER9_LO\0" /* 51074 */
+ "SQ_PERFCOUNTER9_HI\0" /* 51093 */
+ "SQ_PERFCOUNTER10_LO\0" /* 51112 */
+ "SQ_PERFCOUNTER10_HI\0" /* 51132 */
+ "SQ_PERFCOUNTER11_LO\0" /* 51152 */
+ "SQ_PERFCOUNTER11_HI\0" /* 51172 */
+ "SQ_PERFCOUNTER12_LO\0" /* 51192 */
+ "SQ_PERFCOUNTER12_HI\0" /* 51212 */
+ "SQ_PERFCOUNTER13_LO\0" /* 51232 */
+ "SQ_PERFCOUNTER13_HI\0" /* 51252 */
+ "SQ_PERFCOUNTER14_LO\0" /* 51272 */
+ "SQ_PERFCOUNTER14_HI\0" /* 51292 */
+ "SQ_PERFCOUNTER15_LO\0" /* 51312 */
+ "SQ_PERFCOUNTER15_HI\0" /* 51332 */
+ "SX_PERFCOUNTER0_LO\0" /* 51352 */
+ "SX_PERFCOUNTER0_HI\0" /* 51371 */
+ "SX_PERFCOUNTER1_LO\0" /* 51390 */
+ "SX_PERFCOUNTER1_HI\0" /* 51409 */
+ "SX_PERFCOUNTER2_LO\0" /* 51428 */
+ "SX_PERFCOUNTER2_HI\0" /* 51447 */
+ "SX_PERFCOUNTER3_LO\0" /* 51466 */
+ "SX_PERFCOUNTER3_HI\0" /* 51485 */
+ "GDS_PERFCOUNTER0_LO\0" /* 51504 */
+ "GDS_PERFCOUNTER0_HI\0" /* 51524 */
+ "GDS_PERFCOUNTER1_LO\0" /* 51544 */
+ "GDS_PERFCOUNTER1_HI\0" /* 51564 */
+ "GDS_PERFCOUNTER2_LO\0" /* 51584 */
+ "GDS_PERFCOUNTER2_HI\0" /* 51604 */
+ "GDS_PERFCOUNTER3_LO\0" /* 51624 */
+ "GDS_PERFCOUNTER3_HI\0" /* 51644 */
+ "TA_PERFCOUNTER0_LO\0" /* 51664 */
+ "TA_PERFCOUNTER0_HI\0" /* 51683 */
+ "TA_PERFCOUNTER1_LO\0" /* 51702 */
+ "TA_PERFCOUNTER1_HI\0" /* 51721 */
+ "TD_PERFCOUNTER0_LO\0" /* 51740 */
+ "TD_PERFCOUNTER0_HI\0" /* 51759 */
+ "TD_PERFCOUNTER1_LO\0" /* 51778 */
+ "TD_PERFCOUNTER1_HI\0" /* 51797 */
+ "TCP_PERFCOUNTER0_LO\0" /* 51816 */
+ "TCP_PERFCOUNTER0_HI\0" /* 51836 */
+ "TCP_PERFCOUNTER1_LO\0" /* 51856 */
+ "TCP_PERFCOUNTER1_HI\0" /* 51876 */
+ "TCP_PERFCOUNTER2_LO\0" /* 51896 */
+ "TCP_PERFCOUNTER2_HI\0" /* 51916 */
+ "TCP_PERFCOUNTER3_LO\0" /* 51936 */
+ "TCP_PERFCOUNTER3_HI\0" /* 51956 */
+ "TCC_PERFCOUNTER0_LO\0" /* 51976 */
+ "TCC_PERFCOUNTER0_HI\0" /* 51996 */
+ "TCC_PERFCOUNTER1_LO\0" /* 52016 */
+ "TCC_PERFCOUNTER1_HI\0" /* 52036 */
+ "TCC_PERFCOUNTER2_LO\0" /* 52056 */
+ "TCC_PERFCOUNTER2_HI\0" /* 52076 */
+ "TCC_PERFCOUNTER3_LO\0" /* 52096 */
+ "TCC_PERFCOUNTER3_HI\0" /* 52116 */
+ "TCA_PERFCOUNTER0_LO\0" /* 52136 */
+ "TCA_PERFCOUNTER0_HI\0" /* 52156 */
+ "TCA_PERFCOUNTER1_LO\0" /* 52176 */
+ "TCA_PERFCOUNTER1_HI\0" /* 52196 */
+ "TCA_PERFCOUNTER2_LO\0" /* 52216 */
+ "TCA_PERFCOUNTER2_HI\0" /* 52236 */
+ "TCA_PERFCOUNTER3_LO\0" /* 52256 */
+ "TCA_PERFCOUNTER3_HI\0" /* 52276 */
+ "CB_PERFCOUNTER0_LO\0" /* 52296 */
+ "CB_PERFCOUNTER0_HI\0" /* 52315 */
+ "CB_PERFCOUNTER1_LO\0" /* 52334 */
+ "CB_PERFCOUNTER1_HI\0" /* 52353 */
+ "CB_PERFCOUNTER2_LO\0" /* 52372 */
+ "CB_PERFCOUNTER2_HI\0" /* 52391 */
+ "CB_PERFCOUNTER3_LO\0" /* 52410 */
+ "CB_PERFCOUNTER3_HI\0" /* 52429 */
+ "DB_PERFCOUNTER0_LO\0" /* 52448 */
+ "DB_PERFCOUNTER0_HI\0" /* 52467 */
+ "DB_PERFCOUNTER1_LO\0" /* 52486 */
+ "DB_PERFCOUNTER1_HI\0" /* 52505 */
+ "DB_PERFCOUNTER2_LO\0" /* 52524 */
+ "DB_PERFCOUNTER2_HI\0" /* 52543 */
+ "DB_PERFCOUNTER3_LO\0" /* 52562 */
+ "DB_PERFCOUNTER3_HI\0" /* 52581 */
+ "RLC_PERFCOUNTER0_LO\0" /* 52600 */
+ "RLC_PERFCOUNTER0_HI\0" /* 52620 */
+ "RLC_PERFCOUNTER1_LO\0" /* 52640 */
+ "RLC_PERFCOUNTER1_HI\0" /* 52660 */
+ "CPG_PERFCOUNTER1_SELECT\0" /* 52680 */
+ "CPG_PERFCOUNTER0_SELECT1\0" /* 52704 */
+ "CPG_PERFCOUNTER0_SELECT\0" /* 52729 */
+ "CPC_PERFCOUNTER1_SELECT\0" /* 52753 */
+ "CPC_PERFCOUNTER0_SELECT1\0" /* 52777 */
+ "CPF_PERFCOUNTER1_SELECT\0" /* 52802 */
+ "CPF_PERFCOUNTER0_SELECT1\0" /* 52826 */
+ "CPF_PERFCOUNTER0_SELECT\0" /* 52851 */
+ "CP_PERFMON_CNTL\0" /* 52875 */
+ "CPC_PERFCOUNTER0_SELECT\0" /* 52891 */
+ "GRBM_PERFCOUNTER0_SELECT\0" /* 52915 */
+ "GRBM_PERFCOUNTER1_SELECT\0" /* 52940 */
+ "GRBM_SE0_PERFCOUNTER_SELECT\0" /* 52965 */
+ "GRBM_SE1_PERFCOUNTER_SELECT\0" /* 52993 */
+ "GRBM_SE2_PERFCOUNTER_SELECT\0" /* 53021 */
+ "GRBM_SE3_PERFCOUNTER_SELECT\0" /* 53049 */
+ "WD_PERFCOUNTER0_SELECT\0" /* 53077 */
+ "WD_PERFCOUNTER1_SELECT\0" /* 53100 */
+ "WD_PERFCOUNTER2_SELECT\0" /* 53123 */
+ "WD_PERFCOUNTER3_SELECT\0" /* 53146 */
+ "IA_PERFCOUNTER0_SELECT\0" /* 53169 */
+ "IA_PERFCOUNTER1_SELECT\0" /* 53192 */
+ "IA_PERFCOUNTER2_SELECT\0" /* 53215 */
+ "IA_PERFCOUNTER3_SELECT\0" /* 53238 */
+ "IA_PERFCOUNTER0_SELECT1\0" /* 53261 */
+ "VGT_PERFCOUNTER0_SELECT\0" /* 53285 */
+ "VGT_PERFCOUNTER1_SELECT\0" /* 53309 */
+ "VGT_PERFCOUNTER2_SELECT\0" /* 53333 */
+ "VGT_PERFCOUNTER3_SELECT\0" /* 53357 */
+ "VGT_PERFCOUNTER0_SELECT1\0" /* 53381 */
+ "VGT_PERFCOUNTER1_SELECT1\0" /* 53406 */
+ "VGT_PERFCOUNTER_SEID_MASK\0" /* 53431 */
+ "PA_SU_PERFCOUNTER0_SELECT\0" /* 53457 */
+ "PA_SU_PERFCOUNTER0_SELECT1\0" /* 53483 */
+ "PA_SU_PERFCOUNTER1_SELECT\0" /* 53510 */
+ "PA_SU_PERFCOUNTER1_SELECT1\0" /* 53536 */
+ "PA_SU_PERFCOUNTER2_SELECT\0" /* 53563 */
+ "PA_SU_PERFCOUNTER3_SELECT\0" /* 53589 */
+ "PA_SC_PERFCOUNTER0_SELECT\0" /* 53615 */
+ "PA_SC_PERFCOUNTER0_SELECT1\0" /* 53641 */
+ "PA_SC_PERFCOUNTER1_SELECT\0" /* 53668 */
+ "PA_SC_PERFCOUNTER2_SELECT\0" /* 53694 */
+ "PA_SC_PERFCOUNTER3_SELECT\0" /* 53720 */
+ "PA_SC_PERFCOUNTER4_SELECT\0" /* 53746 */
+ "PA_SC_PERFCOUNTER5_SELECT\0" /* 53772 */
+ "PA_SC_PERFCOUNTER6_SELECT\0" /* 53798 */
+ "PA_SC_PERFCOUNTER7_SELECT\0" /* 53824 */
+ "SPI_PERFCOUNTER0_SELECT\0" /* 53850 */
+ "SPI_PERFCOUNTER1_SELECT\0" /* 53874 */
+ "SPI_PERFCOUNTER2_SELECT\0" /* 53898 */
+ "SPI_PERFCOUNTER3_SELECT\0" /* 53922 */
+ "SPI_PERFCOUNTER0_SELECT1\0" /* 53946 */
+ "SPI_PERFCOUNTER1_SELECT1\0" /* 53971 */
+ "SPI_PERFCOUNTER2_SELECT1\0" /* 53996 */
+ "SPI_PERFCOUNTER3_SELECT1\0" /* 54021 */
+ "SPI_PERFCOUNTER4_SELECT\0" /* 54046 */
+ "SPI_PERFCOUNTER5_SELECT\0" /* 54070 */
+ "SPI_PERFCOUNTER_BINS\0" /* 54094 */
+ "SQ_PERFCOUNTER0_SELECT\0" /* 54115 */
+ "SQ_PERFCOUNTER1_SELECT\0" /* 54138 */
+ "SQ_PERFCOUNTER2_SELECT\0" /* 54161 */
+ "SQ_PERFCOUNTER3_SELECT\0" /* 54184 */
+ "SQ_PERFCOUNTER4_SELECT\0" /* 54207 */
+ "SQ_PERFCOUNTER5_SELECT\0" /* 54230 */
+ "SQ_PERFCOUNTER6_SELECT\0" /* 54253 */
+ "SQ_PERFCOUNTER7_SELECT\0" /* 54276 */
+ "SQ_PERFCOUNTER8_SELECT\0" /* 54299 */
+ "SQ_PERFCOUNTER9_SELECT\0" /* 54322 */
+ "SQ_PERFCOUNTER10_SELECT\0" /* 54345 */
+ "SQ_PERFCOUNTER11_SELECT\0" /* 54369 */
+ "SQ_PERFCOUNTER12_SELECT\0" /* 54393 */
+ "SQ_PERFCOUNTER13_SELECT\0" /* 54417 */
+ "SQ_PERFCOUNTER14_SELECT\0" /* 54441 */
+ "SQ_PERFCOUNTER15_SELECT\0" /* 54465 */
+ "SQ_PERFCOUNTER_CTRL\0" /* 54489 */
+ "SQ_PERFCOUNTER_MASK\0" /* 54509 */
+ "SQ_PERFCOUNTER_CTRL2\0" /* 54529 */
+ "SX_PERFCOUNTER0_SELECT\0" /* 54550 */
+ "SX_PERFCOUNTER1_SELECT\0" /* 54573 */
+ "SX_PERFCOUNTER2_SELECT\0" /* 54596 */
+ "SX_PERFCOUNTER3_SELECT\0" /* 54619 */
+ "SX_PERFCOUNTER0_SELECT1\0" /* 54642 */
+ "SX_PERFCOUNTER1_SELECT1\0" /* 54666 */
+ "GDS_PERFCOUNTER0_SELECT\0" /* 54690 */
+ "GDS_PERFCOUNTER1_SELECT\0" /* 54714 */
+ "GDS_PERFCOUNTER2_SELECT\0" /* 54738 */
+ "GDS_PERFCOUNTER3_SELECT\0" /* 54762 */
+ "GDS_PERFCOUNTER0_SELECT1\0" /* 54786 */
+ "TA_PERFCOUNTER0_SELECT\0" /* 54811 */
+ "TA_PERFCOUNTER0_SELECT1\0" /* 54834 */
+ "TA_PERFCOUNTER1_SELECT\0" /* 54858 */
+ "TD_PERFCOUNTER0_SELECT\0" /* 54881 */
+ "TD_PERFCOUNTER0_SELECT1\0" /* 54904 */
+ "TD_PERFCOUNTER1_SELECT\0" /* 54928 */
+ "TCP_PERFCOUNTER0_SELECT\0" /* 54951 */
+ "TCP_PERFCOUNTER0_SELECT1\0" /* 54975 */
+ "TCP_PERFCOUNTER1_SELECT\0" /* 55000 */
+ "TCP_PERFCOUNTER1_SELECT1\0" /* 55024 */
+ "TCP_PERFCOUNTER2_SELECT\0" /* 55049 */
+ "TCP_PERFCOUNTER3_SELECT\0" /* 55073 */
+ "TCC_PERFCOUNTER0_SELECT\0" /* 55097 */
+ "TCC_PERFCOUNTER0_SELECT1\0" /* 55121 */
+ "TCC_PERFCOUNTER1_SELECT\0" /* 55146 */
+ "TCC_PERFCOUNTER1_SELECT1\0" /* 55170 */
+ "TCC_PERFCOUNTER2_SELECT\0" /* 55195 */
+ "TCC_PERFCOUNTER3_SELECT\0" /* 55219 */
+ "TCA_PERFCOUNTER0_SELECT\0" /* 55243 */
+ "TCA_PERFCOUNTER0_SELECT1\0" /* 55267 */
+ "TCA_PERFCOUNTER1_SELECT\0" /* 55292 */
+ "TCA_PERFCOUNTER1_SELECT1\0" /* 55316 */
+ "TCA_PERFCOUNTER2_SELECT\0" /* 55341 */
+ "TCA_PERFCOUNTER3_SELECT\0" /* 55365 */
+ "CB_PERFCOUNTER_FILTER\0" /* 55389 */
+ "CB_PERFCOUNTER0_SELECT\0" /* 55411 */
+ "CB_PERFCOUNTER0_SELECT1\0" /* 55434 */
+ "CB_PERFCOUNTER1_SELECT\0" /* 55458 */
+ "CB_PERFCOUNTER2_SELECT\0" /* 55481 */
+ "CB_PERFCOUNTER3_SELECT\0" /* 55504 */
+ "DB_PERFCOUNTER0_SELECT\0" /* 55527 */
+ "DB_PERFCOUNTER0_SELECT1\0" /* 55550 */
+ "DB_PERFCOUNTER1_SELECT\0" /* 55574 */
+ "DB_PERFCOUNTER1_SELECT1\0" /* 55597 */
+ "DB_PERFCOUNTER2_SELECT\0" /* 55621 */
+ "DB_PERFCOUNTER3_SELECT\0" /* 55644 */
+ "DB_RENDER_CONTROL\0" /* 55667 */
+ "DB_COUNT_CONTROL\0" /* 55685 */
+ "DB_DEPTH_VIEW\0" /* 55702 */
+ "DB_RENDER_OVERRIDE\0" /* 55716 */
+ "DB_RENDER_OVERRIDE2\0" /* 55735 */
+ "DB_HTILE_DATA_BASE\0" /* 55755 */
+ "DB_DEPTH_BOUNDS_MIN\0" /* 55774 */
+ "DB_DEPTH_BOUNDS_MAX\0" /* 55794 */
+ "DB_STENCIL_CLEAR\0" /* 55814 */
+ "DB_DEPTH_CLEAR\0" /* 55831 */
+ "PA_SC_SCREEN_SCISSOR_TL\0" /* 55846 */
+ "PA_SC_SCREEN_SCISSOR_BR\0" /* 55870 */
+ "DB_DEPTH_INFO\0" /* 55894 */
+ "DB_Z_INFO\0" /* 55908 */
+ "DB_STENCIL_INFO\0" /* 55918 */
+ "DB_Z_READ_BASE\0" /* 55934 */
+ "DB_STENCIL_READ_BASE\0" /* 55949 */
+ "DB_Z_WRITE_BASE\0" /* 55970 */
+ "DB_STENCIL_WRITE_BASE\0" /* 55986 */
+ "DB_DEPTH_SIZE\0" /* 56008 */
+ "DB_DEPTH_SLICE\0" /* 56022 */
+ "TA_BC_BASE_ADDR\0" /* 56037 */
+ "TA_BC_BASE_ADDR_HI\0" /* 56053 */
+ "COHER_DEST_BASE_HI_0\0" /* 56072 */
+ "COHER_DEST_BASE_HI_1\0" /* 56093 */
+ "COHER_DEST_BASE_HI_2\0" /* 56114 */
+ "COHER_DEST_BASE_HI_3\0" /* 56135 */
+ "COHER_DEST_BASE_2\0" /* 56156 */
+ "COHER_DEST_BASE_3\0" /* 56174 */
+ "PA_SC_WINDOW_OFFSET\0" /* 56192 */
+ "PA_SC_WINDOW_SCISSOR_TL\0" /* 56212 */
+ "PA_SC_WINDOW_SCISSOR_BR\0" /* 56236 */
+ "PA_SC_CLIPRECT_RULE\0" /* 56260 */
+ "PA_SC_CLIPRECT_0_TL\0" /* 56280 */
+ "PA_SC_CLIPRECT_0_BR\0" /* 56300 */
+ "PA_SC_CLIPRECT_1_TL\0" /* 56320 */
+ "PA_SC_CLIPRECT_1_BR\0" /* 56340 */
+ "PA_SC_CLIPRECT_2_TL\0" /* 56360 */
+ "PA_SC_CLIPRECT_2_BR\0" /* 56380 */
+ "PA_SC_CLIPRECT_3_TL\0" /* 56400 */
+ "PA_SC_CLIPRECT_3_BR\0" /* 56420 */
+ "PA_SC_EDGERULE\0" /* 56440 */
+ "PA_SU_HARDWARE_SCREEN_OFFSET\0" /* 56455 */
+ "CB_TARGET_MASK\0" /* 56484 */
+ "CB_SHADER_MASK\0" /* 56499 */
+ "PA_SC_GENERIC_SCISSOR_TL\0" /* 56514 */
+ "PA_SC_GENERIC_SCISSOR_BR\0" /* 56539 */
+ "COHER_DEST_BASE_0\0" /* 56564 */
+ "COHER_DEST_BASE_1\0" /* 56582 */
+ "PA_SC_VPORT_SCISSOR_0_TL\0" /* 56600 */
+ "PA_SC_VPORT_SCISSOR_0_BR\0" /* 56625 */
+ "PA_SC_VPORT_SCISSOR_1_TL\0" /* 56650 */
+ "PA_SC_VPORT_SCISSOR_1_BR\0" /* 56675 */
+ "PA_SC_VPORT_SCISSOR_2_TL\0" /* 56700 */
+ "PA_SC_VPORT_SCISSOR_2_BR\0" /* 56725 */
+ "PA_SC_VPORT_SCISSOR_3_TL\0" /* 56750 */
+ "PA_SC_VPORT_SCISSOR_3_BR\0" /* 56775 */
+ "PA_SC_VPORT_SCISSOR_4_TL\0" /* 56800 */
+ "PA_SC_VPORT_SCISSOR_4_BR\0" /* 56825 */
+ "PA_SC_VPORT_SCISSOR_5_TL\0" /* 56850 */
+ "PA_SC_VPORT_SCISSOR_5_BR\0" /* 56875 */
+ "PA_SC_VPORT_SCISSOR_6_TL\0" /* 56900 */
+ "PA_SC_VPORT_SCISSOR_6_BR\0" /* 56925 */
+ "PA_SC_VPORT_SCISSOR_7_TL\0" /* 56950 */
+ "PA_SC_VPORT_SCISSOR_7_BR\0" /* 56975 */
+ "PA_SC_VPORT_SCISSOR_8_TL\0" /* 57000 */
+ "PA_SC_VPORT_SCISSOR_8_BR\0" /* 57025 */
+ "PA_SC_VPORT_SCISSOR_9_TL\0" /* 57050 */
+ "PA_SC_VPORT_SCISSOR_9_BR\0" /* 57075 */
+ "PA_SC_VPORT_SCISSOR_10_TL\0" /* 57100 */
+ "PA_SC_VPORT_SCISSOR_10_BR\0" /* 57126 */
+ "PA_SC_VPORT_SCISSOR_11_TL\0" /* 57152 */
+ "PA_SC_VPORT_SCISSOR_11_BR\0" /* 57178 */
+ "PA_SC_VPORT_SCISSOR_12_TL\0" /* 57204 */
+ "PA_SC_VPORT_SCISSOR_12_BR\0" /* 57230 */
+ "PA_SC_VPORT_SCISSOR_13_TL\0" /* 57256 */
+ "PA_SC_VPORT_SCISSOR_13_BR\0" /* 57282 */
+ "PA_SC_VPORT_SCISSOR_14_TL\0" /* 57308 */
+ "PA_SC_VPORT_SCISSOR_14_BR\0" /* 57334 */
+ "PA_SC_VPORT_SCISSOR_15_TL\0" /* 57360 */
+ "PA_SC_VPORT_SCISSOR_15_BR\0" /* 57386 */
+ "PA_SC_VPORT_ZMIN_0\0" /* 57412 */
+ "PA_SC_VPORT_ZMAX_0\0" /* 57431 */
+ "PA_SC_VPORT_ZMIN_1\0" /* 57450 */
+ "PA_SC_VPORT_ZMAX_1\0" /* 57469 */
+ "PA_SC_VPORT_ZMIN_2\0" /* 57488 */
+ "PA_SC_VPORT_ZMAX_2\0" /* 57507 */
+ "PA_SC_VPORT_ZMIN_3\0" /* 57526 */
+ "PA_SC_VPORT_ZMAX_3\0" /* 57545 */
+ "PA_SC_VPORT_ZMIN_4\0" /* 57564 */
+ "PA_SC_VPORT_ZMAX_4\0" /* 57583 */
+ "PA_SC_VPORT_ZMIN_5\0" /* 57602 */
+ "PA_SC_VPORT_ZMAX_5\0" /* 57621 */
+ "PA_SC_VPORT_ZMIN_6\0" /* 57640 */
+ "PA_SC_VPORT_ZMAX_6\0" /* 57659 */
+ "PA_SC_VPORT_ZMIN_7\0" /* 57678 */
+ "PA_SC_VPORT_ZMAX_7\0" /* 57697 */
+ "PA_SC_VPORT_ZMIN_8\0" /* 57716 */
+ "PA_SC_VPORT_ZMAX_8\0" /* 57735 */
+ "PA_SC_VPORT_ZMIN_9\0" /* 57754 */
+ "PA_SC_VPORT_ZMAX_9\0" /* 57773 */
+ "PA_SC_VPORT_ZMIN_10\0" /* 57792 */
+ "PA_SC_VPORT_ZMAX_10\0" /* 57812 */
+ "PA_SC_VPORT_ZMIN_11\0" /* 57832 */
+ "PA_SC_VPORT_ZMAX_11\0" /* 57852 */
+ "PA_SC_VPORT_ZMIN_12\0" /* 57872 */
+ "PA_SC_VPORT_ZMAX_12\0" /* 57892 */
+ "PA_SC_VPORT_ZMIN_13\0" /* 57912 */
+ "PA_SC_VPORT_ZMAX_13\0" /* 57932 */
+ "PA_SC_VPORT_ZMIN_14\0" /* 57952 */
+ "PA_SC_VPORT_ZMAX_14\0" /* 57972 */
+ "PA_SC_VPORT_ZMIN_15\0" /* 57992 */
+ "PA_SC_VPORT_ZMAX_15\0" /* 58012 */
+ "PA_SC_RASTER_CONFIG\0" /* 58032 */
+ "PA_SC_RASTER_CONFIG_1\0" /* 58052 */
+ "PA_SC_SCREEN_EXTENT_CONTROL\0" /* 58074 */
+ "VGT_MAX_VTX_INDX\0" /* 58102 */
+ "VGT_MIN_VTX_INDX\0" /* 58119 */
+ "VGT_INDX_OFFSET\0" /* 58136 */
+ "VGT_MULTI_PRIM_IB_RESET_INDX\0" /* 58152 */
+ "CB_BLEND_RED\0" /* 58181 */
+ "CB_BLEND_GREEN\0" /* 58194 */
+ "CB_BLEND_BLUE\0" /* 58209 */
+ "CB_BLEND_ALPHA\0" /* 58223 */
+ "CB_DCC_CONTROL\0" /* 58238 */
+ "DB_STENCIL_CONTROL\0" /* 58253 */
+ "DB_STENCILREFMASK\0" /* 58272 */
+ "DB_STENCILREFMASK_BF\0" /* 58290 */
+ "PA_CL_VPORT_XSCALE\0" /* 58311 */
+ "PA_CL_VPORT_XOFFSET\0" /* 58330 */
+ "PA_CL_VPORT_YSCALE\0" /* 58350 */
+ "PA_CL_VPORT_YOFFSET\0" /* 58369 */
+ "PA_CL_VPORT_ZSCALE\0" /* 58389 */
+ "PA_CL_VPORT_ZOFFSET\0" /* 58408 */
+ "PA_CL_VPORT_XSCALE_1\0" /* 58428 */
+ "PA_CL_VPORT_XOFFSET_1\0" /* 58449 */
+ "PA_CL_VPORT_YSCALE_1\0" /* 58471 */
+ "PA_CL_VPORT_YOFFSET_1\0" /* 58492 */
+ "PA_CL_VPORT_ZSCALE_1\0" /* 58514 */
+ "PA_CL_VPORT_ZOFFSET_1\0" /* 58535 */
+ "PA_CL_VPORT_XSCALE_2\0" /* 58557 */
+ "PA_CL_VPORT_XOFFSET_2\0" /* 58578 */
+ "PA_CL_VPORT_YSCALE_2\0" /* 58600 */
+ "PA_CL_VPORT_YOFFSET_2\0" /* 58621 */
+ "PA_CL_VPORT_ZSCALE_2\0" /* 58643 */
+ "PA_CL_VPORT_ZOFFSET_2\0" /* 58664 */
+ "PA_CL_VPORT_XSCALE_3\0" /* 58686 */
+ "PA_CL_VPORT_XOFFSET_3\0" /* 58707 */
+ "PA_CL_VPORT_YSCALE_3\0" /* 58729 */
+ "PA_CL_VPORT_YOFFSET_3\0" /* 58750 */
+ "PA_CL_VPORT_ZSCALE_3\0" /* 58772 */
+ "PA_CL_VPORT_ZOFFSET_3\0" /* 58793 */
+ "PA_CL_VPORT_XSCALE_4\0" /* 58815 */
+ "PA_CL_VPORT_XOFFSET_4\0" /* 58836 */
+ "PA_CL_VPORT_YSCALE_4\0" /* 58858 */
+ "PA_CL_VPORT_YOFFSET_4\0" /* 58879 */
+ "PA_CL_VPORT_ZSCALE_4\0" /* 58901 */
+ "PA_CL_VPORT_ZOFFSET_4\0" /* 58922 */
+ "PA_CL_VPORT_XSCALE_5\0" /* 58944 */
+ "PA_CL_VPORT_XOFFSET_5\0" /* 58965 */
+ "PA_CL_VPORT_YSCALE_5\0" /* 58987 */
+ "PA_CL_VPORT_YOFFSET_5\0" /* 59008 */
+ "PA_CL_VPORT_ZSCALE_5\0" /* 59030 */
+ "PA_CL_VPORT_ZOFFSET_5\0" /* 59051 */
+ "PA_CL_VPORT_XSCALE_6\0" /* 59073 */
+ "PA_CL_VPORT_XOFFSET_6\0" /* 59094 */
+ "PA_CL_VPORT_YSCALE_6\0" /* 59116 */
+ "PA_CL_VPORT_YOFFSET_6\0" /* 59137 */
+ "PA_CL_VPORT_ZSCALE_6\0" /* 59159 */
+ "PA_CL_VPORT_ZOFFSET_6\0" /* 59180 */
+ "PA_CL_VPORT_XSCALE_7\0" /* 59202 */
+ "PA_CL_VPORT_XOFFSET_7\0" /* 59223 */
+ "PA_CL_VPORT_YSCALE_7\0" /* 59245 */
+ "PA_CL_VPORT_YOFFSET_7\0" /* 59266 */
+ "PA_CL_VPORT_ZSCALE_7\0" /* 59288 */
+ "PA_CL_VPORT_ZOFFSET_7\0" /* 59309 */
+ "PA_CL_VPORT_XSCALE_8\0" /* 59331 */
+ "PA_CL_VPORT_XOFFSET_8\0" /* 59352 */
+ "PA_CL_VPORT_YSCALE_8\0" /* 59374 */
+ "PA_CL_VPORT_YOFFSET_8\0" /* 59395 */
+ "PA_CL_VPORT_ZSCALE_8\0" /* 59417 */
+ "PA_CL_VPORT_ZOFFSET_8\0" /* 59438 */
+ "PA_CL_VPORT_XSCALE_9\0" /* 59460 */
+ "PA_CL_VPORT_XOFFSET_9\0" /* 59481 */
+ "PA_CL_VPORT_YSCALE_9\0" /* 59503 */
+ "PA_CL_VPORT_YOFFSET_9\0" /* 59524 */
+ "PA_CL_VPORT_ZSCALE_9\0" /* 59546 */
+ "PA_CL_VPORT_ZOFFSET_9\0" /* 59567 */
+ "PA_CL_VPORT_XSCALE_10\0" /* 59589 */
+ "PA_CL_VPORT_XOFFSET_10\0" /* 59611 */
+ "PA_CL_VPORT_YSCALE_10\0" /* 59634 */
+ "PA_CL_VPORT_YOFFSET_10\0" /* 59656 */
+ "PA_CL_VPORT_ZSCALE_10\0" /* 59679 */
+ "PA_CL_VPORT_ZOFFSET_10\0" /* 59701 */
+ "PA_CL_VPORT_XSCALE_11\0" /* 59724 */
+ "PA_CL_VPORT_XOFFSET_11\0" /* 59746 */
+ "PA_CL_VPORT_YSCALE_11\0" /* 59769 */
+ "PA_CL_VPORT_YOFFSET_11\0" /* 59791 */
+ "PA_CL_VPORT_ZSCALE_11\0" /* 59814 */
+ "PA_CL_VPORT_ZOFFSET_11\0" /* 59836 */
+ "PA_CL_VPORT_XSCALE_12\0" /* 59859 */
+ "PA_CL_VPORT_XOFFSET_12\0" /* 59881 */
+ "PA_CL_VPORT_YSCALE_12\0" /* 59904 */
+ "PA_CL_VPORT_YOFFSET_12\0" /* 59926 */
+ "PA_CL_VPORT_ZSCALE_12\0" /* 59949 */
+ "PA_CL_VPORT_ZOFFSET_12\0" /* 59971 */
+ "PA_CL_VPORT_XSCALE_13\0" /* 59994 */
+ "PA_CL_VPORT_XOFFSET_13\0" /* 60016 */
+ "PA_CL_VPORT_YSCALE_13\0" /* 60039 */
+ "PA_CL_VPORT_YOFFSET_13\0" /* 60061 */
+ "PA_CL_VPORT_ZSCALE_13\0" /* 60084 */
+ "PA_CL_VPORT_ZOFFSET_13\0" /* 60106 */
+ "PA_CL_VPORT_XSCALE_14\0" /* 60129 */
+ "PA_CL_VPORT_XOFFSET_14\0" /* 60151 */
+ "PA_CL_VPORT_YSCALE_14\0" /* 60174 */
+ "PA_CL_VPORT_YOFFSET_14\0" /* 60196 */
+ "PA_CL_VPORT_ZSCALE_14\0" /* 60219 */
+ "PA_CL_VPORT_ZOFFSET_14\0" /* 60241 */
+ "PA_CL_VPORT_XSCALE_15\0" /* 60264 */
+ "PA_CL_VPORT_XOFFSET_15\0" /* 60286 */
+ "PA_CL_VPORT_YSCALE_15\0" /* 60309 */
+ "PA_CL_VPORT_YOFFSET_15\0" /* 60331 */
+ "PA_CL_VPORT_ZSCALE_15\0" /* 60354 */
+ "PA_CL_VPORT_ZOFFSET_15\0" /* 60376 */
+ "PA_CL_UCP_0_X\0" /* 60399 */
+ "PA_CL_UCP_0_Y\0" /* 60413 */
+ "PA_CL_UCP_0_Z\0" /* 60427 */
+ "PA_CL_UCP_0_W\0" /* 60441 */
+ "PA_CL_UCP_1_X\0" /* 60455 */
+ "PA_CL_UCP_1_Y\0" /* 60469 */
+ "PA_CL_UCP_1_Z\0" /* 60483 */
+ "PA_CL_UCP_1_W\0" /* 60497 */
+ "PA_CL_UCP_2_X\0" /* 60511 */
+ "PA_CL_UCP_2_Y\0" /* 60525 */
+ "PA_CL_UCP_2_Z\0" /* 60539 */
+ "PA_CL_UCP_2_W\0" /* 60553 */
+ "PA_CL_UCP_3_X\0" /* 60567 */
+ "PA_CL_UCP_3_Y\0" /* 60581 */
+ "PA_CL_UCP_3_Z\0" /* 60595 */
+ "PA_CL_UCP_3_W\0" /* 60609 */
+ "PA_CL_UCP_4_X\0" /* 60623 */
+ "PA_CL_UCP_4_Y\0" /* 60637 */
+ "PA_CL_UCP_4_Z\0" /* 60651 */
+ "PA_CL_UCP_4_W\0" /* 60665 */
+ "PA_CL_UCP_5_X\0" /* 60679 */
+ "PA_CL_UCP_5_Y\0" /* 60693 */
+ "PA_CL_UCP_5_Z\0" /* 60707 */
+ "PA_CL_UCP_5_W\0" /* 60721 */
+ "SPI_PS_INPUT_CNTL_0\0" /* 60735 */
+ "SPI_PS_INPUT_CNTL_1\0" /* 60755 */
+ "SPI_PS_INPUT_CNTL_2\0" /* 60775 */
+ "SPI_PS_INPUT_CNTL_3\0" /* 60795 */
+ "SPI_PS_INPUT_CNTL_4\0" /* 60815 */
+ "SPI_PS_INPUT_CNTL_5\0" /* 60835 */
+ "SPI_PS_INPUT_CNTL_6\0" /* 60855 */
+ "SPI_PS_INPUT_CNTL_7\0" /* 60875 */
+ "SPI_PS_INPUT_CNTL_8\0" /* 60895 */
+ "SPI_PS_INPUT_CNTL_9\0" /* 60915 */
+ "SPI_PS_INPUT_CNTL_10\0" /* 60935 */
+ "SPI_PS_INPUT_CNTL_11\0" /* 60956 */
+ "SPI_PS_INPUT_CNTL_12\0" /* 60977 */
+ "SPI_PS_INPUT_CNTL_13\0" /* 60998 */
+ "SPI_PS_INPUT_CNTL_14\0" /* 61019 */
+ "SPI_PS_INPUT_CNTL_15\0" /* 61040 */
+ "SPI_PS_INPUT_CNTL_16\0" /* 61061 */
+ "SPI_PS_INPUT_CNTL_17\0" /* 61082 */
+ "SPI_PS_INPUT_CNTL_18\0" /* 61103 */
+ "SPI_PS_INPUT_CNTL_19\0" /* 61124 */
+ "SPI_PS_INPUT_CNTL_20\0" /* 61145 */
+ "SPI_PS_INPUT_CNTL_21\0" /* 61166 */
+ "SPI_PS_INPUT_CNTL_22\0" /* 61187 */
+ "SPI_PS_INPUT_CNTL_23\0" /* 61208 */
+ "SPI_PS_INPUT_CNTL_24\0" /* 61229 */
+ "SPI_PS_INPUT_CNTL_25\0" /* 61250 */
+ "SPI_PS_INPUT_CNTL_26\0" /* 61271 */
+ "SPI_PS_INPUT_CNTL_27\0" /* 61292 */
+ "SPI_PS_INPUT_CNTL_28\0" /* 61313 */
+ "SPI_PS_INPUT_CNTL_29\0" /* 61334 */
+ "SPI_PS_INPUT_CNTL_30\0" /* 61355 */
+ "SPI_PS_INPUT_CNTL_31\0" /* 61376 */
+ "SPI_VS_OUT_CONFIG\0" /* 61397 */
+ "SPI_PS_INPUT_ENA\0" /* 61415 */
+ "SPI_PS_INPUT_ADDR\0" /* 61432 */
+ "SPI_INTERP_CONTROL_0\0" /* 61450 */
+ "SPI_PS_IN_CONTROL\0" /* 61471 */
+ "SPI_BARYC_CNTL\0" /* 61489 */
+ "SPI_TMPRING_SIZE\0" /* 61504 */
+ "SPI_WAVE_MGMT_1\0" /* 61521 */
+ "SPI_WAVE_MGMT_2\0" /* 61537 */
+ "SPI_SHADER_POS_FORMAT\0" /* 61553 */
+ "SPI_SHADER_Z_FORMAT\0" /* 61575 */
+ "SPI_SHADER_COL_FORMAT\0" /* 61595 */
+ "SX_PS_DOWNCONVERT\0" /* 61617 */
+ "SX_BLEND_OPT_EPSILON\0" /* 61635 */
+ "SX_BLEND_OPT_CONTROL\0" /* 61656 */
+ "SX_MRT0_BLEND_OPT\0" /* 61677 */
+ "SX_MRT1_BLEND_OPT\0" /* 61695 */
+ "SX_MRT2_BLEND_OPT\0" /* 61713 */
+ "SX_MRT3_BLEND_OPT\0" /* 61731 */
+ "SX_MRT4_BLEND_OPT\0" /* 61749 */
+ "SX_MRT5_BLEND_OPT\0" /* 61767 */
+ "SX_MRT6_BLEND_OPT\0" /* 61785 */
+ "SX_MRT7_BLEND_OPT\0" /* 61803 */
+ "CB_BLEND0_CONTROL\0" /* 61821 */
+ "CB_BLEND1_CONTROL\0" /* 61839 */
+ "CB_BLEND2_CONTROL\0" /* 61857 */
+ "CB_BLEND3_CONTROL\0" /* 61875 */
+ "CB_BLEND4_CONTROL\0" /* 61893 */
+ "CB_BLEND5_CONTROL\0" /* 61911 */
+ "CB_BLEND6_CONTROL\0" /* 61929 */
+ "CB_BLEND7_CONTROL\0" /* 61947 */
+ "CS_COPY_STATE\0" /* 61965 */
+ "PA_CL_POINT_X_RAD\0" /* 61979 */
+ "PA_CL_POINT_Y_RAD\0" /* 61997 */
+ "PA_CL_POINT_SIZE\0" /* 62015 */
+ "PA_CL_POINT_CULL_RAD\0" /* 62032 */
+ "VGT_DMA_BASE_HI\0" /* 62053 */
+ "VGT_DMA_BASE\0" /* 62069 */
+ "VGT_DRAW_INITIATOR\0" /* 62082 */
+ "VGT_IMMED_DATA\0" /* 62101 */
+ "VGT_EVENT_ADDRESS_REG\0" /* 62116 */
+ "DB_DEPTH_CONTROL\0" /* 62138 */
+ "DB_EQAA\0" /* 62155 */
+ "CB_COLOR_CONTROL\0" /* 62163 */
+ "DB_SHADER_CONTROL\0" /* 62180 */
+ "PA_CL_CLIP_CNTL\0" /* 62198 */
+ "PA_SU_SC_MODE_CNTL\0" /* 62214 */
+ "PA_CL_VTE_CNTL\0" /* 62233 */
+ "PA_CL_VS_OUT_CNTL\0" /* 62248 */
+ "PA_CL_NANINF_CNTL\0" /* 62266 */
+ "PA_SU_LINE_STIPPLE_CNTL\0" /* 62284 */
+ "PA_SU_LINE_STIPPLE_SCALE\0" /* 62308 */
+ "PA_SU_PRIM_FILTER_CNTL\0" /* 62333 */
+ "PA_SU_SMALL_PRIM_FILTER_CNTL\0" /* 62356 */
+ "PA_SU_POINT_SIZE\0" /* 62385 */
+ "PA_SU_POINT_MINMAX\0" /* 62402 */
+ "PA_SU_LINE_CNTL\0" /* 62421 */
+ "PA_SC_LINE_STIPPLE\0" /* 62437 */
+ "VGT_OUTPUT_PATH_CNTL\0" /* 62456 */
+ "VGT_HOS_CNTL\0" /* 62477 */
+ "VGT_HOS_MAX_TESS_LEVEL\0" /* 62490 */
+ "VGT_HOS_MIN_TESS_LEVEL\0" /* 62513 */
+ "VGT_HOS_REUSE_DEPTH\0" /* 62536 */
+ "VGT_GROUP_PRIM_TYPE\0" /* 62556 */
+ "VGT_GROUP_FIRST_DECR\0" /* 62576 */
+ "VGT_GROUP_DECR\0" /* 62597 */
+ "VGT_GROUP_VECT_0_CNTL\0" /* 62612 */
+ "VGT_GROUP_VECT_1_CNTL\0" /* 62634 */
+ "VGT_GROUP_VECT_0_FMT_CNTL\0" /* 62656 */
+ "VGT_GROUP_VECT_1_FMT_CNTL\0" /* 62682 */
+ "VGT_GS_MODE\0" /* 62708 */
+ "VGT_GS_ONCHIP_CNTL\0" /* 62720 */
+ "PA_SC_MODE_CNTL_0\0" /* 62739 */
+ "PA_SC_MODE_CNTL_1\0" /* 62757 */
+ "VGT_ENHANCE\0" /* 62775 */
+ "VGT_GS_PER_ES\0" /* 62787 */
+ "VGT_ES_PER_GS\0" /* 62801 */
+ "VGT_GS_PER_VS\0" /* 62815 */
+ "VGT_GSVS_RING_OFFSET_1\0" /* 62829 */
+ "VGT_GSVS_RING_OFFSET_2\0" /* 62852 */
+ "VGT_GSVS_RING_OFFSET_3\0" /* 62875 */
+ "VGT_GS_OUT_PRIM_TYPE\0" /* 62898 */
+ "IA_ENHANCE\0" /* 62919 */
+ "VGT_DMA_SIZE\0" /* 62930 */
+ "VGT_DMA_MAX_SIZE\0" /* 62943 */
+ "VGT_DMA_INDEX_TYPE\0" /* 62960 */
+ "WD_ENHANCE\0" /* 62979 */
+ "VGT_PRIMITIVEID_EN\0" /* 62990 */
+ "VGT_DMA_NUM_INSTANCES\0" /* 63009 */
+ "VGT_PRIMITIVEID_RESET\0" /* 63031 */
+ "VGT_EVENT_INITIATOR\0" /* 63053 */
+ "VGT_MULTI_PRIM_IB_RESET_EN\0" /* 63073 */
+ "VGT_INSTANCE_STEP_RATE_0\0" /* 63100 */
+ "VGT_INSTANCE_STEP_RATE_1\0" /* 63125 */
+ "IA_MULTI_VGT_PARAM\0" /* 63150 */
+ "VGT_ESGS_RING_ITEMSIZE\0" /* 63169 */
+ "VGT_GSVS_RING_ITEMSIZE\0" /* 63192 */
+ "VGT_REUSE_OFF\0" /* 63215 */
+ "VGT_VTX_CNT_EN\0" /* 63229 */
+ "DB_HTILE_SURFACE\0" /* 63244 */
+ "DB_SRESULTS_COMPARE_STATE0\0" /* 63261 */
+ "DB_SRESULTS_COMPARE_STATE1\0" /* 63288 */
+ "DB_PRELOAD_CONTROL\0" /* 63315 */
+ "VGT_STRMOUT_BUFFER_SIZE_0\0" /* 63334 */
+ "VGT_STRMOUT_VTX_STRIDE_0\0" /* 63360 */
+ "VGT_STRMOUT_BUFFER_OFFSET_0\0" /* 63385 */
+ "VGT_STRMOUT_BUFFER_SIZE_1\0" /* 63413 */
+ "VGT_STRMOUT_VTX_STRIDE_1\0" /* 63439 */
+ "VGT_STRMOUT_BUFFER_OFFSET_1\0" /* 63464 */
+ "VGT_STRMOUT_BUFFER_SIZE_2\0" /* 63492 */
+ "VGT_STRMOUT_VTX_STRIDE_2\0" /* 63518 */
+ "VGT_STRMOUT_BUFFER_OFFSET_2\0" /* 63543 */
+ "VGT_STRMOUT_BUFFER_SIZE_3\0" /* 63571 */
+ "VGT_STRMOUT_VTX_STRIDE_3\0" /* 63597 */
+ "VGT_STRMOUT_BUFFER_OFFSET_3\0" /* 63622 */
+ "VGT_STRMOUT_DRAW_OPAQUE_OFFSET\0" /* 63650 */
+ "VGT_STRMOUT_DRAW_OPAQUE_BUFFER_FILLED_SIZE\0" /* 63681 */
+ "VGT_STRMOUT_DRAW_OPAQUE_VERTEX_STRIDE\0" /* 63724 */
+ "VGT_GS_MAX_VERT_OUT\0" /* 63762 */
+ "VGT_TESS_DISTRIBUTION\0" /* 63782 */
+ "VGT_SHADER_STAGES_EN\0" /* 63804 */
+ "VGT_LS_HS_CONFIG\0" /* 63825 */
+ "VGT_GS_VERT_ITEMSIZE\0" /* 63842 */
+ "VGT_GS_VERT_ITEMSIZE_1\0" /* 63863 */
+ "VGT_GS_VERT_ITEMSIZE_2\0" /* 63886 */
+ "VGT_GS_VERT_ITEMSIZE_3\0" /* 63909 */
+ "VGT_TF_PARAM\0" /* 63932 */
+ "DB_ALPHA_TO_MASK\0" /* 63945 */
+ "VGT_DISPATCH_DRAW_INDEX\0" /* 63962 */
+ "PA_SU_POLY_OFFSET_DB_FMT_CNTL\0" /* 63986 */
+ "PA_SU_POLY_OFFSET_CLAMP\0" /* 64016 */
+ "PA_SU_POLY_OFFSET_FRONT_SCALE\0" /* 64040 */
+ "PA_SU_POLY_OFFSET_FRONT_OFFSET\0" /* 64070 */
+ "PA_SU_POLY_OFFSET_BACK_SCALE\0" /* 64101 */
+ "PA_SU_POLY_OFFSET_BACK_OFFSET\0" /* 64130 */
+ "VGT_GS_INSTANCE_CNT\0" /* 64160 */
+ "VGT_STRMOUT_CONFIG\0" /* 64180 */
+ "VGT_STRMOUT_BUFFER_CONFIG\0" /* 64199 */
+ "PA_SC_CENTROID_PRIORITY_0\0" /* 64225 */
+ "PA_SC_CENTROID_PRIORITY_1\0" /* 64251 */
+ "PA_SC_LINE_CNTL\0" /* 64277 */
+ "PA_SC_AA_CONFIG\0" /* 64293 */
+ "PA_SU_VTX_CNTL\0" /* 64309 */
+ "PA_CL_GB_VERT_CLIP_ADJ\0" /* 64324 */
+ "PA_CL_GB_VERT_DISC_ADJ\0" /* 64347 */
+ "PA_CL_GB_HORZ_CLIP_ADJ\0" /* 64370 */
+ "PA_CL_GB_HORZ_DISC_ADJ\0" /* 64393 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_0\0" /* 64416 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_1\0" /* 64450 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_2\0" /* 64484 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y0_3\0" /* 64518 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_0\0" /* 64552 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_1\0" /* 64586 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_2\0" /* 64620 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y0_3\0" /* 64654 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_0\0" /* 64688 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_1\0" /* 64722 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_2\0" /* 64756 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X0Y1_3\0" /* 64790 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_0\0" /* 64824 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_1\0" /* 64858 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_2\0" /* 64892 */
+ "PA_SC_AA_SAMPLE_LOCS_PIXEL_X1Y1_3\0" /* 64926 */
+ "PA_SC_AA_MASK_X0Y0_X1Y0\0" /* 64960 */
+ "PA_SC_AA_MASK_X0Y1_X1Y1\0" /* 64984 */
+ "PA_SC_SHADER_CONTROL\0" /* 65008 */
+ "VGT_VERTEX_REUSE_BLOCK_CNTL\0" /* 65029 */
+ "VGT_OUT_DEALLOC_CNTL\0" /* 65057 */
+ "CB_COLOR0_BASE\0" /* 65078 */
+ "CB_COLOR0_PITCH\0" /* 65093 */
+ "CB_COLOR0_SLICE\0" /* 65109 */
+ "CB_COLOR0_VIEW\0" /* 65125 */
+ "CB_COLOR0_INFO\0" /* 65140 */
+ "CB_COLOR0_ATTRIB\0" /* 65155 */
+ "CB_COLOR0_DCC_CONTROL\0" /* 65172 */
+ "CB_COLOR0_CMASK\0" /* 65194 */
+ "CB_COLOR0_CMASK_SLICE\0" /* 65210 */
+ "CB_COLOR0_FMASK\0" /* 65232 */
+ "CB_COLOR0_FMASK_SLICE\0" /* 65248 */
+ "CB_COLOR0_CLEAR_WORD0\0" /* 65270 */
+ "CB_COLOR0_CLEAR_WORD1\0" /* 65292 */
+ "CB_COLOR0_DCC_BASE\0" /* 65314 */
+ "CB_COLOR1_BASE\0" /* 65333 */
+ "CB_COLOR1_PITCH\0" /* 65348 */
+ "CB_COLOR1_SLICE\0" /* 65364 */
+ "CB_COLOR1_VIEW\0" /* 65380 */
+ "CB_COLOR1_INFO\0" /* 65395 */
+ "CB_COLOR1_ATTRIB\0" /* 65410 */
+ "CB_COLOR1_DCC_CONTROL\0" /* 65427 */
+ "CB_COLOR1_CMASK\0" /* 65449 */
+ "CB_COLOR1_CMASK_SLICE\0" /* 65465 */
+ "CB_COLOR1_FMASK\0" /* 65487 */
+ "CB_COLOR1_FMASK_SLICE\0" /* 65503 */
+ "CB_COLOR1_CLEAR_WORD0\0" /* 65525 */
+ "CB_COLOR1_CLEAR_WORD1\0" /* 65547 */
+ "CB_COLOR1_DCC_BASE\0" /* 65569 */
+ "CB_COLOR2_BASE\0" /* 65588 */
+ "CB_COLOR2_PITCH\0" /* 65603 */
+ "CB_COLOR2_SLICE\0" /* 65619 */
+ "CB_COLOR2_VIEW\0" /* 65635 */
+ "CB_COLOR2_INFO\0" /* 65650 */
+ "CB_COLOR2_ATTRIB\0" /* 65665 */
+ "CB_COLOR2_DCC_CONTROL\0" /* 65682 */
+ "CB_COLOR2_CMASK\0" /* 65704 */
+ "CB_COLOR2_CMASK_SLICE\0" /* 65720 */
+ "CB_COLOR2_FMASK\0" /* 65742 */
+ "CB_COLOR2_FMASK_SLICE\0" /* 65758 */
+ "CB_COLOR2_CLEAR_WORD0\0" /* 65780 */
+ "CB_COLOR2_CLEAR_WORD1\0" /* 65802 */
+ "CB_COLOR2_DCC_BASE\0" /* 65824 */
+ "CB_COLOR3_BASE\0" /* 65843 */
+ "CB_COLOR3_PITCH\0" /* 65858 */
+ "CB_COLOR3_SLICE\0" /* 65874 */
+ "CB_COLOR3_VIEW\0" /* 65890 */
+ "CB_COLOR3_INFO\0" /* 65905 */
+ "CB_COLOR3_ATTRIB\0" /* 65920 */
+ "CB_COLOR3_DCC_CONTROL\0" /* 65937 */
+ "CB_COLOR3_CMASK\0" /* 65959 */
+ "CB_COLOR3_CMASK_SLICE\0" /* 65975 */
+ "CB_COLOR3_FMASK\0" /* 65997 */
+ "CB_COLOR3_FMASK_SLICE\0" /* 66013 */
+ "CB_COLOR3_CLEAR_WORD0\0" /* 66035 */
+ "CB_COLOR3_CLEAR_WORD1\0" /* 66057 */
+ "CB_COLOR3_DCC_BASE\0" /* 66079 */
+ "CB_COLOR4_BASE\0" /* 66098 */
+ "CB_COLOR4_PITCH\0" /* 66113 */
+ "CB_COLOR4_SLICE\0" /* 66129 */
+ "CB_COLOR4_VIEW\0" /* 66145 */
+ "CB_COLOR4_INFO\0" /* 66160 */
+ "CB_COLOR4_ATTRIB\0" /* 66175 */
+ "CB_COLOR4_DCC_CONTROL\0" /* 66192 */
+ "CB_COLOR4_CMASK\0" /* 66214 */
+ "CB_COLOR4_CMASK_SLICE\0" /* 66230 */
+ "CB_COLOR4_FMASK\0" /* 66252 */
+ "CB_COLOR4_FMASK_SLICE\0" /* 66268 */
+ "CB_COLOR4_CLEAR_WORD0\0" /* 66290 */
+ "CB_COLOR4_CLEAR_WORD1\0" /* 66312 */
+ "CB_COLOR4_DCC_BASE\0" /* 66334 */
+ "CB_COLOR5_BASE\0" /* 66353 */
+ "CB_COLOR5_PITCH\0" /* 66368 */
+ "CB_COLOR5_SLICE\0" /* 66384 */
+ "CB_COLOR5_VIEW\0" /* 66400 */
+ "CB_COLOR5_INFO\0" /* 66415 */
+ "CB_COLOR5_ATTRIB\0" /* 66430 */
+ "CB_COLOR5_DCC_CONTROL\0" /* 66447 */
+ "CB_COLOR5_CMASK\0" /* 66469 */
+ "CB_COLOR5_CMASK_SLICE\0" /* 66485 */
+ "CB_COLOR5_FMASK\0" /* 66507 */
+ "CB_COLOR5_FMASK_SLICE\0" /* 66523 */
+ "CB_COLOR5_CLEAR_WORD0\0" /* 66545 */
+ "CB_COLOR5_CLEAR_WORD1\0" /* 66567 */
+ "CB_COLOR5_DCC_BASE\0" /* 66589 */
+ "CB_COLOR6_BASE\0" /* 66608 */
+ "CB_COLOR6_PITCH\0" /* 66623 */
+ "CB_COLOR6_SLICE\0" /* 66639 */
+ "CB_COLOR6_VIEW\0" /* 66655 */
+ "CB_COLOR6_INFO\0" /* 66670 */
+ "CB_COLOR6_ATTRIB\0" /* 66685 */
+ "CB_COLOR6_DCC_CONTROL\0" /* 66702 */
+ "CB_COLOR6_CMASK\0" /* 66724 */
+ "CB_COLOR6_CMASK_SLICE\0" /* 66740 */
+ "CB_COLOR6_FMASK\0" /* 66762 */
+ "CB_COLOR6_FMASK_SLICE\0" /* 66778 */
+ "CB_COLOR6_CLEAR_WORD0\0" /* 66800 */
+ "CB_COLOR6_CLEAR_WORD1\0" /* 66822 */
+ "CB_COLOR6_DCC_BASE\0" /* 66844 */
+ "CB_COLOR7_BASE\0" /* 66863 */
+ "CB_COLOR7_PITCH\0" /* 66878 */
+ "CB_COLOR7_SLICE\0" /* 66894 */
+ "CB_COLOR7_VIEW\0" /* 66910 */
+ "CB_COLOR7_INFO\0" /* 66925 */
+ "CB_COLOR7_ATTRIB\0" /* 66940 */
+ "CB_COLOR7_DCC_CONTROL\0" /* 66957 */
+ "CB_COLOR7_CMASK\0" /* 66979 */
+ "CB_COLOR7_CMASK_SLICE\0" /* 66995 */
+ "CB_COLOR7_FMASK\0" /* 67017 */
+ "CB_COLOR7_FMASK_SLICE\0" /* 67033 */
+ "CB_COLOR7_CLEAR_WORD0\0" /* 67055 */
+ "CB_COLOR7_CLEAR_WORD1\0" /* 67077 */
+ "CB_COLOR7_DCC_BASE\0" /* 67099 */
+ "VGT_TF_MEMORY_BASE_HI\0" /* 67118 */
+ "WD_POS_BUF_BASE\0" /* 67140 */
+ "WD_POS_BUF_BASE_HI\0" /* 67156 */
+ "WD_CNTL_SB_BUF_BASE\0" /* 67175 */
+ "WD_CNTL_SB_BUF_BASE_HI\0" /* 67195 */
+ "WD_INDEX_BUF_BASE\0" /* 67218 */
+ "WD_INDEX_BUF_BASE_HI\0" /* 67236 */
+ "VGT_OBJECT_ID\0" /* 67257 */
+ "VGT_INSTANCE_BASE_ID\0" /* 67271 */
+ "SQC_WRITEBACK\0" /* 67292 */
+ "TA_GRAD_ADJ_UCONFIG\0" /* 67306 */
+ "SPI_CONFIG_CNTL_2\0" /* 67326 */
+ "SPI_SHADER_USER_DATA_PS_16\0" /* 67344 */
+ "SPI_SHADER_USER_DATA_PS_17\0" /* 67371 */
+ "SPI_SHADER_USER_DATA_PS_18\0" /* 67398 */
+ "SPI_SHADER_USER_DATA_PS_19\0" /* 67425 */
+ "SPI_SHADER_USER_DATA_PS_20\0" /* 67452 */
+ "SPI_SHADER_USER_DATA_PS_21\0" /* 67479 */
+ "SPI_SHADER_USER_DATA_PS_22\0" /* 67506 */
+ "SPI_SHADER_USER_DATA_PS_23\0" /* 67533 */
+ "SPI_SHADER_USER_DATA_PS_24\0" /* 67560 */
+ "SPI_SHADER_USER_DATA_PS_25\0" /* 67587 */
+ "SPI_SHADER_USER_DATA_PS_26\0" /* 67614 */
+ "SPI_SHADER_USER_DATA_PS_27\0" /* 67641 */
+ "SPI_SHADER_USER_DATA_PS_28\0" /* 67668 */
+ "SPI_SHADER_USER_DATA_PS_29\0" /* 67695 */
+ "SPI_SHADER_USER_DATA_PS_30\0" /* 67722 */
+ "SPI_SHADER_USER_DATA_PS_31\0" /* 67749 */
+ "SPI_SHADER_USER_DATA_VS_16\0" /* 67776 */
+ "SPI_SHADER_USER_DATA_VS_17\0" /* 67803 */
+ "SPI_SHADER_USER_DATA_VS_18\0" /* 67830 */
+ "SPI_SHADER_USER_DATA_VS_19\0" /* 67857 */
+ "SPI_SHADER_USER_DATA_VS_20\0" /* 67884 */
+ "SPI_SHADER_USER_DATA_VS_21\0" /* 67911 */
+ "SPI_SHADER_USER_DATA_VS_22\0" /* 67938 */
+ "SPI_SHADER_USER_DATA_VS_23\0" /* 67965 */
+ "SPI_SHADER_USER_DATA_VS_24\0" /* 67992 */
+ "SPI_SHADER_USER_DATA_VS_25\0" /* 68019 */
+ "SPI_SHADER_USER_DATA_VS_26\0" /* 68046 */
+ "SPI_SHADER_USER_DATA_VS_27\0" /* 68073 */
+ "SPI_SHADER_USER_DATA_VS_28\0" /* 68100 */
+ "SPI_SHADER_USER_DATA_VS_29\0" /* 68127 */
+ "SPI_SHADER_USER_DATA_VS_30\0" /* 68154 */
+ "SPI_SHADER_USER_DATA_VS_31\0" /* 68181 */
+ "SPI_SHADER_PGM_RSRC2_GS_VS\0" /* 68208 */
+ "SPI_SHADER_PGM_RSRC4_GS\0" /* 68235 */
+ "SPI_SHADER_USER_DATA_ADDR_LO_GS\0" /* 68259 */
+ "SPI_SHADER_USER_DATA_ADDR_HI_GS\0" /* 68291 */
+ "SPI_SHADER_USER_DATA_ES_16\0" /* 68323 */
+ "SPI_SHADER_USER_DATA_ES_17\0" /* 68350 */
+ "SPI_SHADER_USER_DATA_ES_18\0" /* 68377 */
+ "SPI_SHADER_USER_DATA_ES_19\0" /* 68404 */
+ "SPI_SHADER_USER_DATA_ES_20\0" /* 68431 */
+ "SPI_SHADER_USER_DATA_ES_21\0" /* 68458 */
+ "SPI_SHADER_USER_DATA_ES_22\0" /* 68485 */
+ "SPI_SHADER_USER_DATA_ES_23\0" /* 68512 */
+ "SPI_SHADER_USER_DATA_ES_24\0" /* 68539 */
+ "SPI_SHADER_USER_DATA_ES_25\0" /* 68566 */
+ "SPI_SHADER_USER_DATA_ES_26\0" /* 68593 */
+ "SPI_SHADER_USER_DATA_ES_27\0" /* 68620 */
+ "SPI_SHADER_USER_DATA_ES_28\0" /* 68647 */
+ "SPI_SHADER_USER_DATA_ES_29\0" /* 68674 */
+ "SPI_SHADER_USER_DATA_ES_30\0" /* 68701 */
+ "SPI_SHADER_USER_DATA_ES_31\0" /* 68728 */
+ "SPI_SHADER_PGM_RSRC4_HS\0" /* 68755 */
+ "SPI_SHADER_USER_DATA_ADDR_LO_HS\0" /* 68779 */
+ "SPI_SHADER_USER_DATA_ADDR_HI_HS\0" /* 68811 */
+ "SPI_SHADER_USER_DATA_LS_16\0" /* 68843 */
+ "SPI_SHADER_USER_DATA_LS_17\0" /* 68870 */
+ "SPI_SHADER_USER_DATA_LS_18\0" /* 68897 */
+ "SPI_SHADER_USER_DATA_LS_19\0" /* 68924 */
+ "SPI_SHADER_USER_DATA_LS_20\0" /* 68951 */
+ "SPI_SHADER_USER_DATA_LS_21\0" /* 68978 */
+ "SPI_SHADER_USER_DATA_LS_22\0" /* 69005 */
+ "SPI_SHADER_USER_DATA_LS_23\0" /* 69032 */
+ "SPI_SHADER_USER_DATA_LS_24\0" /* 69059 */
+ "SPI_SHADER_USER_DATA_LS_25\0" /* 69086 */
+ "SPI_SHADER_USER_DATA_LS_26\0" /* 69113 */
+ "SPI_SHADER_USER_DATA_LS_27\0" /* 69140 */
+ "SPI_SHADER_USER_DATA_LS_28\0" /* 69167 */
+ "SPI_SHADER_USER_DATA_LS_29\0" /* 69194 */
+ "SPI_SHADER_USER_DATA_LS_30\0" /* 69221 */
+ "SPI_SHADER_USER_DATA_LS_31\0" /* 69248 */
+ "SPI_SHADER_USER_DATA_COMMON_0\0" /* 69275 */
+ "SPI_SHADER_USER_DATA_COMMON_1\0" /* 69305 */
+ "SPI_SHADER_USER_DATA_COMMON_2\0" /* 69335 */
+ "SPI_SHADER_USER_DATA_COMMON_3\0" /* 69365 */
+ "SPI_SHADER_USER_DATA_COMMON_4\0" /* 69395 */
+ "SPI_SHADER_USER_DATA_COMMON_5\0" /* 69425 */
+ "SPI_SHADER_USER_DATA_COMMON_6\0" /* 69455 */
+ "SPI_SHADER_USER_DATA_COMMON_7\0" /* 69485 */
+ "SPI_SHADER_USER_DATA_COMMON_8\0" /* 69515 */
+ "SPI_SHADER_USER_DATA_COMMON_9\0" /* 69545 */
+ "SPI_SHADER_USER_DATA_COMMON_10\0" /* 69575 */
+ "SPI_SHADER_USER_DATA_COMMON_11\0" /* 69606 */
+ "SPI_SHADER_USER_DATA_COMMON_12\0" /* 69637 */
+ "SPI_SHADER_USER_DATA_COMMON_13\0" /* 69668 */
+ "SPI_SHADER_USER_DATA_COMMON_14\0" /* 69699 */
+ "SPI_SHADER_USER_DATA_COMMON_15\0" /* 69730 */
+ "SPI_SHADER_USER_DATA_COMMON_16\0" /* 69761 */
+ "SPI_SHADER_USER_DATA_COMMON_17\0" /* 69792 */
+ "SPI_SHADER_USER_DATA_COMMON_18\0" /* 69823 */
+ "SPI_SHADER_USER_DATA_COMMON_19\0" /* 69854 */
+ "SPI_SHADER_USER_DATA_COMMON_20\0" /* 69885 */
+ "SPI_SHADER_USER_DATA_COMMON_21\0" /* 69916 */
+ "SPI_SHADER_USER_DATA_COMMON_22\0" /* 69947 */
+ "SPI_SHADER_USER_DATA_COMMON_23\0" /* 69978 */
+ "SPI_SHADER_USER_DATA_COMMON_24\0" /* 70009 */
+ "SPI_SHADER_USER_DATA_COMMON_25\0" /* 70040 */
+ "SPI_SHADER_USER_DATA_COMMON_26\0" /* 70071 */
+ "SPI_SHADER_USER_DATA_COMMON_27\0" /* 70102 */
+ "SPI_SHADER_USER_DATA_COMMON_28\0" /* 70133 */
+ "SPI_SHADER_USER_DATA_COMMON_29\0" /* 70164 */
+ "SPI_SHADER_USER_DATA_COMMON_30\0" /* 70195 */
+ "SPI_SHADER_USER_DATA_COMMON_31\0" /* 70226 */
+ "COMPUTE_DISPATCH_PKT_ADDR_LO\0" /* 70257 */
+ "COMPUTE_DISPATCH_PKT_ADDR_HI\0" /* 70286 */
+ "COMPUTE_DISPATCH_SCRATCH_BASE_LO\0" /* 70315 */
+ "COMPUTE_DISPATCH_SCRATCH_BASE_HI\0" /* 70348 */
+ "CPF_LATENCY_STATS_DATA\0" /* 70381 */
+ "CPG_LATENCY_STATS_DATA\0" /* 70404 */
+ "CPC_LATENCY_STATS_DATA\0" /* 70427 */
+ "CPF_TC_PERF_COUNTER_WINDOW_SELECT\0" /* 70450 */
+ "CPG_TC_PERF_COUNTER_WINDOW_SELECT\0" /* 70484 */
+ "CPF_LATENCY_STATS_SELECT\0" /* 70518 */
+ "CPG_LATENCY_STATS_SELECT\0" /* 70543 */
+ "CPC_LATENCY_STATS_SELECT\0" /* 70568 */
+ "DB_HTILE_DATA_BASE_HI\0" /* 70593 */
+ "DB_Z_READ_BASE_HI\0" /* 70615 */
+ "DB_STENCIL_READ_BASE_HI\0" /* 70633 */
+ "DB_Z_WRITE_BASE_HI\0" /* 70657 */
+ "DB_STENCIL_WRITE_BASE_HI\0" /* 70676 */
+ "DB_DFSM_CONTROL\0" /* 70701 */
+ "DB_RENDER_FILTER\0" /* 70717 */
+ "DB_Z_INFO2\0" /* 70734 */
+ "DB_STENCIL_INFO2\0" /* 70745 */
+ "PA_SC_TILE_STEERING_OVERRIDE\0" /* 70762 */
+ "CP_PERFMON_CNTX_CNTL\0" /* 70791 */
+ "PA_SC_RIGHT_VERT_GRID\0" /* 70812 */
+ "PA_SC_LEFT_VERT_GRID\0" /* 70834 */
+ "PA_SC_HORIZ_GRID\0" /* 70855 */
+ "PA_SC_FOV_WINDOW_LR\0" /* 70872 */
+ "PA_SC_FOV_WINDOW_TB\0" /* 70892 */
+ "CB_MRT0_EPITCH\0" /* 70912 */
+ "CB_MRT1_EPITCH\0" /* 70927 */
+ "CB_MRT2_EPITCH\0" /* 70942 */
+ "CB_MRT3_EPITCH\0" /* 70957 */
+ "CB_MRT4_EPITCH\0" /* 70972 */
+ "CB_MRT5_EPITCH\0" /* 70987 */
+ "CB_MRT6_EPITCH\0" /* 71002 */
+ "CB_MRT7_EPITCH\0" /* 71017 */
+ "PA_CL_OBJPRIM_ID_CNTL\0" /* 71032 */
+ "PA_CL_NGG_CNTL\0" /* 71054 */
+ "PA_SU_OVER_RASTERIZATION_CNTL\0" /* 71069 */
+ "VGT_GS_MAX_PRIMS_PER_SUBGROUP\0" /* 71099 */
+ "VGT_DRAW_PAYLOAD_CNTL\0" /* 71129 */
+ "VGT_INDEX_PAYLOAD_CNTL\0" /* 71151 */
+ "VGT_DMA_EVENT_INITIATOR\0" /* 71174 */
+ "PA_SC_BINNER_CNTL_0\0" /* 71198 */
+ "PA_SC_BINNER_CNTL_1\0" /* 71218 */
+ "PA_SC_CONSERVATIVE_RASTERIZATION_CNTL\0" /* 71238 */
+ "PA_SC_NGG_MODE_CNTL\0" /* 71276 */
+ "CB_COLOR0_BASE_EXT\0" /* 71296 */
+ "CB_COLOR0_ATTRIB2\0" /* 71315 */
+ "CB_COLOR0_CMASK_BASE_EXT\0" /* 71333 */
+ "CB_COLOR0_FMASK_BASE_EXT\0" /* 71358 */
+ "CB_COLOR0_DCC_BASE_EXT\0" /* 71383 */
+ "CB_COLOR1_BASE_EXT\0" /* 71406 */
+ "CB_COLOR1_ATTRIB2\0" /* 71425 */
+ "CB_COLOR1_CMASK_BASE_EXT\0" /* 71443 */
+ "CB_COLOR1_FMASK_BASE_EXT\0" /* 71468 */
+ "CB_COLOR1_DCC_BASE_EXT\0" /* 71493 */
+ "CB_COLOR2_BASE_EXT\0" /* 71516 */
+ "CB_COLOR2_ATTRIB2\0" /* 71535 */
+ "CB_COLOR2_CMASK_BASE_EXT\0" /* 71553 */
+ "CB_COLOR2_FMASK_BASE_EXT\0" /* 71578 */
+ "CB_COLOR2_DCC_BASE_EXT\0" /* 71603 */
+ "CB_COLOR3_BASE_EXT\0" /* 71626 */
+ "CB_COLOR3_ATTRIB2\0" /* 71645 */
+ "CB_COLOR3_CMASK_BASE_EXT\0" /* 71663 */
+ "CB_COLOR3_FMASK_BASE_EXT\0" /* 71688 */
+ "CB_COLOR3_DCC_BASE_EXT\0" /* 71713 */
+ "CB_COLOR4_BASE_EXT\0" /* 71736 */
+ "CB_COLOR4_ATTRIB2\0" /* 71755 */
+ "CB_COLOR4_CMASK_BASE_EXT\0" /* 71773 */
+ "CB_COLOR4_FMASK_BASE_EXT\0" /* 71798 */
+ "CB_COLOR4_DCC_BASE_EXT\0" /* 71823 */
+ "CB_COLOR5_BASE_EXT\0" /* 71846 */
+ "CB_COLOR5_ATTRIB2\0" /* 71865 */
+ "CB_COLOR5_CMASK_BASE_EXT\0" /* 71883 */
+ "CB_COLOR5_FMASK_BASE_EXT\0" /* 71908 */
+ "CB_COLOR5_DCC_BASE_EXT\0" /* 71933 */
+ "CB_COLOR6_BASE_EXT\0" /* 71956 */
+ "CB_COLOR6_ATTRIB2\0" /* 71975 */
+ "CB_COLOR6_CMASK_BASE_EXT\0" /* 71993 */
+ "CB_COLOR6_FMASK_BASE_EXT\0" /* 72018 */
+ "CB_COLOR6_DCC_BASE_EXT\0" /* 72043 */
+ "CB_COLOR7_BASE_EXT\0" /* 72066 */
+ "CB_COLOR7_ATTRIB2\0" /* 72085 */
+ "CB_COLOR7_CMASK_BASE_EXT\0" /* 72103 */
+ "CB_COLOR7_FMASK_BASE_EXT\0" /* 72128 */
+ "CB_COLOR7_DCC_BASE_EXT\0" /* 72153 */;
+
+static const int sid_strings_offsets[] = {
+ /* 0 */ 509, 867, 871, 874,
+ /* 4 */ 911, 931, 943, 949, 953, 962,
+ /* 10 */ 1020, 949, 391, 1029,
+ /* 14 */ 1059, 949, 1068, 1076,
+ /* 18 */ 1191, 1196, 1204, 1212,
+ /* 22 */ 1238, 922,
+ /* 24 */ 1253, 1263,
+ /* 26 */ 5827, 5838, 5854, 5869, 5885, 5899, 5912, 5927, 5942, 5957, 5969, 5988, 6008, 6026, 6045, 6060, 6075, 6097, 6112, 6127, 6142, 6158, 6172, 6199, 6226, 6253, 6280, 6304, 6324,
+ /* 55 */ 6353, 6374,
+ /* 57 */ 5827, 5838, 5854, 5869, 5885, 5899, 5912, -1, -1, 5957, 5969, 5988, 6008, 6026, -1, -1, 6075, 6097, 6112, 6127, 6142, 6158, 6172, 6199, 6226, 6253, 6280, 6304, 6324,
+ /* 86 */ 8345, 8357, 8369, 8381,
+ /* 90 */ 8773, -1, -1, -1, -1, -1, -1, -1, 8784, 8796, -1, -1, 8808, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8819,
+ /* 123 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8845,
+ /* 186 */ 8940, 8949, 8958, 8976, 8994, 9003, 9012, 9021,
+ /* 194 */ 9070, 9091, 9112, 9135, 9158, 9178, 9198, 9223,
+ /* 202 */ 9255, 9279, 9297, 9316, 9336, 9355, 9377, 9402, 9427, 9454, 9481, 9505, 9527, 9555, 9580, 9608,
+ /* 218 */ 9716, 9728, 9747, 9766,
+ /* 222 */ 9824, 9848, 9866, 9885, 9905, 9924, 9946, 9971, 9996, 10023, 10050, 10074, 10096, 10124, 10149, 10177, 10205, 10227, 10251, 10275, 10299, 10320, 10341, 10366, 10395, 10420, 10446, 10469, 10493, 10520, 10548, 10576, 10604, 10626, 10648, 10672, 10692, 10712, 10732, 10752, 10772, 10792, 10812, 10851, 10890, 10919, 10948, 10977, 11006, 11035, 11064, 11095, 11125, 11156, 11186, 11216, 11247, 11278, 11298, 11320, 11338, 11365, 11389, 11415,
+ /* 286 */ 11466, 11487, 11508, 11531, 11554, 11574, 11594, 11619, 11640, 11666, 11686, 11708, 11734, 11755, 11779, 11806,
+ /* 302 */ 9824, 9848, 9866, 9885, 9905, 9924, 9946, 9971, 9996, 10023, 10050, 10074, 10096, 10124, 10149, 10177, 10205, 10227, 10251, 10275, 10299, 10320, 10341, 10366, 10395, 10420, 10446, 10469, 10493, 10520, 10548, 11849, 10604, 10626, 10648, 10672, 10692, 10712, 10732, 10752, 10772, 10792, 11869, 11897, 11936, 11975, 11997, 12025, 12053, 12086, 12114, 12142, 12175, 12199, 12226, 12259, 12298, 11278, 11298, 12326, 12348, 12370, 12394, 11415,
+ /* 366 */ 11466, 11487, 11508, 11531, 11554, 11574, 12438, 11619, 12464, 11666, 12488,
+ /* 377 */ 12530, 12546, 12562, 12578, 12594, 12610, 12626, 12644, 12661, 12679, 12696, 12713, 12731,
+ /* 390 */ 12766, 12782, 12798, 12814, 12830, 12846, 12862, 12878, 12894, 12911, 12928, 12945, 12963, 12981,
+ /* 404 */ 13018, 13036, 13054, 13072, 13090, 13108, 13126, 13144, 13162, 13180,
+ /* 414 */ 13306, 13325, 13344, 13363, 13382, 13401, 13420, 13439, 13458, 13473, 13488, 13503, 13520, 13541, 13562, 13582,
+ /* 430 */ 13644, 13660, 13676, 13692, 13708, 13724,
+ /* 436 */ 13980, 13992, 14006, 14030, 14060, 14085, 14116, 14136,
+ /* 444 */ 14202, 14229, 14255, 14282, 14313, 14342, 14372, 14406,
+ /* 452 */ 14628, 14651,
+ /* 454 */ 14628, 14651, 14691, 14720,
+ /* 458 */ 14766, 14787, 14809,
+ /* 461 */ 14966, 14998, 15031, 15064,
+ /* 465 */ 15268,
+ /* 466 */ 15567, 15583, 15599, 15615, 15631, 15647, 15663, 15679, 15695, 15711, 15727, 15743, 15758, 15773, 15788, 15804,
+ /* 482 */ 16350, 16381, 16409, 16438,
+ /* 486 */ 16483, 16504, 16525, 16546, 16567, -1, -1, 16588, 16609, -1, -1, -1, 16631, 16652, 16673, 16695,
+ /* 502 */ 16723, 16736, 16759, 16782, 16805, 16825, 16846, 16867, 16888, 16914, 16940, 16966, 16993, 17020, 17047,
+ /* 517 */ 17086, 17111, 17137, 17163, 17189, 17214, 17239,
+ /* 524 */ 17275, 17298, 17321, 17344,
+ /* 528 */ 17378, 17402, 17426, 17450,
+ /* 532 */ 17486, 17511, 17536, 17561,
+ /* 536 */ 17604, 17621, 17638, 17655,
+ /* 540 */ 16350, 16381, 16409, 17673,
+ /* 544 */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17801, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17815, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 17829,
+ /* 785 */ 19010, 19028, 19043,
+ /* 788 */ 20659, 20669, 20682, 20696,
+ /* 792 */ 20993, 21008, 21024, 21040,
+ /* 796 */ 21205, 21215, 21233, 21243,
+ /* 800 */ 16483, 16504, 16525, -1, 16567, 21676, 21698,
+ /* 807 */ 16723, -1, -1, -1, 16805, 16825, 16846, 16867, 16888, 16914, 16940, 16966, 16993, 17020, 17047, -1, 21723, 21750,
+ /* 825 */ 21778, 21788, 21793, 21798,
+ /* 829 */ 21940, 21956,
+ /* 831 */ 22452, 22475, 22498, 22521,
+ /* 835 */ 22568, 22593, 22618, 22643,
+ /* 839 */ 22693, 22717, 22741, 22765,
+ /* 843 */ 22797, 22822, 22847, 22872,
+ /* 847 */ 22906, 22931, 22956, 22981,
+ /* 851 */ 23015, 23041, 23067, 23093,
+ /* 855 */ 23129, 23152, 23175, 23198,
+ /* 859 */ 23228, 23262, 23297, 23332,
+ /* 863 */ 23375, 23409, 23444, 23479,
+ /* 867 */ 23522, 23545, 23568, 23591,
+ /* 871 */ 23621, 23655, 23690, 23725,
+ /* 875 */ 23773, 23807, 23842, 23877,
+ /* 879 */ 23951, 23979, 24007, 24035,
+ /* 883 */ 24075, 24114, 24154, 24194,
+ /* 887 */ 24252, 24291, 24331, 24371,
+ /* 891 */ 24560, 24573, 24586, 24599, 24620, 24639, 24657, 24675, 24690, 24707, 24724, 24736, 24747, 24759, 24772, 24784,
+ /* 907 */ 25008,
+ /* 908 */ 25537, 25558, 25579, 25600, 25621,
+ /* 913 */ 25915,
+ /* 914 */ 26095, 26111, 26128, 26145, 26166,
+ /* 919 */ 26259, 26275, 26291, 26308, 26325, 26346, 26370, 26394, 26417, 26440,
+ /* 929 */ 26627, 26654, 26672, 26690, 26712, 26736, 26757, 26776, 26797, 26818, 26840,
+ /* 940 */ 26902, 26908, -1, 26921, -1, -1, -1, 26934, -1, -1, -1, 26946, -1, 26958, -1, 26970,
+ /* 956 */ 27477, 27512, 27547, 27579, 27611, 27643, 27675, 27709,
+ /* 964 */ 27773, 27787, 27800, 27818, 27831, 27844, 27865, 27889,
+ /* 972 */ 27965, 27976, 27986, 28002, 28028, 28044, 28070, 28086, 28112, 28128, 28154, -1, -1, 28179, 28200, 28231, 28248, 28269, 28286, 28307, 28328,
+ /* 993 */ 28374, 28392, 28411, 28428, 28445,
+ /* 998 */ 28588, 28603, 28624, 28646,
+ /* 1002 */ 28680, 28696,
+ /* 1004 */ 28863, 28874, 28884, 28895, 28907, 28920, 28934, 28946,
+ /* 1012 */ 28974, 28984, 28993, 29003, 29014, 29026, 29039, 29050,
+ /* 1020 */ 29471, 29482, 29492, 29516, -1, 29527, 29547,
+ /* 1027 */ 29565, -1, -1, -1, -1, 29572, -1, -1, -1, -1, 29579, -1, -1, -1, -1, 29586, -1, 29593, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29600, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29607, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29614, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29621, -1, -1, -1, -1, 29628, -1, -1, -1, -1, 29635, -1, -1, -1, -1, 29642, -1, -1, -1, -1, -1, -1, 29649, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29656, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29663, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29670, -1, -1, -1, -1, -1, -1, 29677, -1, -1, -1, -1, 29684, -1, -1, -1, -1, 29691, -1, -1, -1, -1, 29698, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29705, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29712, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29719, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29726, -1, 29733, -1, -1, -1, -1, 29740, -1, -1, -1, -1, 29747, -1, -1, -1, -1, 29754,
+ /* 1283 */ 29837, 29844, 29864, 29869,
+ /* 1287 */ 30015, 30028, 30047, 30069,
+ /* 1291 */ 30530, 30550,
+ /* 1293 */ 30562, 30576, 30589,
+ /* 1296 */ 32233, 32255, 32275, 32296, 32317,
+ /* 1301 */ 32372, 32389, 32405, 32420, 32436, 32452, 32476, 32500, 32524, 32548, 32569, 32585, 32600, 32624, 32647, 32671, 32691, 32710,
+ /* 1319 */ 32753, 32766, 32780, 32792, 32805,
+ /* 1324 */ 32889, 32906, 32923, 32939, 32955, 32971, 32987, 33004, 33022,
+ /* 1333 */ 33094, 33101, 33115, 33129, 33143, 33157,
+ /* 1339 */ 33167, 33179, 33190, 33201,
+ /* 1343 */ 33373, -1, -1, 33388,
+ /* 1347 */ 34188, 34211, 34234,
+ /* 1350 */ 34337, 34350, 34363,
+ /* 1353 */ 34375, 34393, 34413, 34433,
+ /* 1357 */ 34461, 34477, 34494,
+ /* 1360 */ 34521, 34536,
+ /* 1362 */ -1, 34654, 34677, 34700, 34723, 34738, 34751, 34763, 34780, -1, 34799, 34819, 34839, 34858, 35589, 34870, 34887, 34904, 35601, 35612, 34936, 34965, 34976, 35002, 35020, 35037, 35056, 35074, 35093, 35109, 35125, 35145, 35167, 35189, 35203, 35222, 35238, 35632, -1, 35248, 35263, -1, 35281, 35304, 35329, 35351, 35376, 7971, 7998, 35398, -1, 35426, 35445, 35463, 35483, 35502, 35522, 35546, 35567, -1, -1, 35646, 35666,
+ /* 1425 */ 36208, 36221, 36233,
+ /* 1428 */ 36245, 36258, 36270,
+ /* 1431 */ 36284, 36298, 36310,
+ /* 1434 */ 36472, 36485, 36499,
+ /* 1437 */ 36509, 36522, 36532, 36546,
+ /* 1441 */ 36574, 36587, 36599, 36618,
+ /* 1445 */ 34521, 34536, 36715,
+ /* 1448 */ 36733, 36759, 36785, 36810,
+ /* 1452 */ 37635, 37646, 37654, 37670,
+ /* 1456 */ 37696, 37722, 37747, 37772, 37795, 37816, 37843, 37872,
+ /* 1464 */ 38219, 38231, 38244, 38257,
+ /* 1468 */ 38277, 38291, 38299, 38308, 38318, 38327, 38339, 38354, 38369, 38386, 38403, 38417, 38429, -1, 38447, -1, 38465, 38477, 38491, 38505, 38519, 38530, 38541,
+ /* 1491 */ 38562, 38575, -1, -1, 38588, 38600, 38612, 38624,
+ /* 1499 */ 38649, 38658, 38667, 38680,
+ /* 1503 */ 38757, 38772, 38790, 38818, 38848, 38879, 38907, 38937,
+ /* 1511 */ 13470, 13015, 13214, 953,
+ /* 1515 */ 245, 39862, 20659, 953,
+ /* 1519 */ 40481, 40497, 40514, 40541,
+};
+
+#endif
diff --git a/lib/mesa/src/amd/common/sid_tables.py b/lib/mesa/src/amd/common/sid_tables.py
new file mode 100644
index 000000000..0a2b7ef1f
--- /dev/null
+++ b/lib/mesa/src/amd/common/sid_tables.py
@@ -0,0 +1,310 @@
+
+CopyRight = '''
+/*
+ * Copyright 2015 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * on the rights to use, copy, modify, merge, publish, distribute, sub
+ * license, and/or sell copies of the Software, and to permit persons to whom
+ * the Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
+ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+ * USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
+'''
+
+import sys
+import re
+
+
+class StringTable:
+ """
+ A class for collecting multiple strings in a single larger string that is
+ used by indexing (to avoid relocations in the resulting binary)
+ """
+ def __init__(self):
+ self.table = []
+ self.length = 0
+
+ def add(self, string):
+ # We might get lucky with string being a suffix of a previously added string
+ for te in self.table:
+ if te[0].endswith(string):
+ idx = te[1] + len(te[0]) - len(string)
+ te[2].add(idx)
+ return idx
+
+ idx = self.length
+ self.table.append((string, idx, set((idx,))))
+ self.length += len(string) + 1
+
+ return idx
+
+ def emit(self, filp, name, static=True):
+ """
+ Write
+ [static] const char name[] = "...";
+ to filp.
+ """
+ fragments = [
+ '"%s\\0" /* %s */' % (
+ te[0].encode('string_escape'),
+ ', '.join(str(idx) for idx in te[2])
+ )
+ for te in self.table
+ ]
+ filp.write('%sconst char %s[] =\n%s;\n' % (
+ 'static ' if static else '',
+ name,
+ '\n'.join('\t' + fragment for fragment in fragments)
+ ))
+
+class IntTable:
+ """
+ A class for collecting multiple arrays of integers in a single big array
+ that is used by indexing (to avoid relocations in the resulting binary)
+ """
+ def __init__(self, typename):
+ self.typename = typename
+ self.table = []
+ self.idxs = set()
+
+ def add(self, array):
+ # We might get lucky and find the array somewhere in the existing data
+ try:
+ idx = 0
+ while True:
+ idx = self.table.index(array[0], idx, len(self.table) - len(array) + 1)
+
+ for i in range(1, len(array)):
+ if array[i] != self.table[idx + i]:
+ break
+ else:
+ self.idxs.add(idx)
+ return idx
+
+ idx += 1
+ except ValueError:
+ pass
+
+ idx = len(self.table)
+ self.table += array
+ self.idxs.add(idx)
+ return idx
+
+ def emit(self, filp, name, static=True):
+ """
+ Write
+ [static] const typename name[] = { ... };
+ to filp.
+ """
+ idxs = sorted(self.idxs) + [len(self.table)]
+
+ fragments = [
+ ('\t/* %s */ %s' % (
+ idxs[i],
+ ' '.join((str(elt) + ',') for elt in self.table[idxs[i]:idxs[i+1]])
+ ))
+ for i in range(len(idxs) - 1)
+ ]
+
+ filp.write('%sconst %s %s[] = {\n%s\n};\n' % (
+ 'static ' if static else '',
+ self.typename, name,
+ '\n'.join(fragments)
+ ))
+
+class Field:
+ def __init__(self, reg, s_name):
+ self.s_name = s_name
+ self.name = strip_prefix(s_name)
+ self.values = []
+ self.varname_values = '%s__%s__values' % (reg.r_name.lower(), self.name.lower())
+
+class Reg:
+ def __init__(self, r_name):
+ self.r_name = r_name
+ self.name = strip_prefix(r_name)
+ self.fields = []
+ self.own_fields = True
+
+
+def strip_prefix(s):
+ '''Strip prefix in the form ._.*_, e.g. R_001234_'''
+ return s[s[2:].find('_')+3:]
+
+def parse(filename, regs, packets):
+ stream = open(filename)
+
+ for line in stream:
+ if not line.startswith('#define '):
+ continue
+
+ line = line[8:].strip()
+
+ if line.startswith('R_'):
+ name = line.split()[0]
+
+ for it in regs:
+ if it.r_name == name:
+ reg = it
+ break
+ else:
+ reg = Reg(name)
+ regs.append(reg)
+
+ elif line.startswith('S_'):
+ name = line[:line.find('(')]
+
+ for it in reg.fields:
+ if it.s_name == name:
+ field = it
+ break
+ else:
+ field = Field(reg, name)
+ reg.fields.append(field)
+
+ elif line.startswith('V_'):
+ split = line.split()
+ name = split[0]
+ value = int(split[1], 0)
+
+ for (n,v) in field.values:
+ if n == name:
+ if v != value:
+ sys.exit('Value mismatch: name = ' + name)
+
+ field.values.append((name, value))
+
+ elif line.startswith('PKT3_') and line.find('0x') != -1 and line.find('(') == -1:
+ packets.append(line.split()[0])
+
+ # Copy fields to indexed registers which have their fields only defined
+ # at register index 0.
+ # For example, copy fields from CB_COLOR0_INFO to CB_COLORn_INFO, n > 0.
+ match_number = re.compile('[0-9]+')
+ reg_dict = dict()
+
+ # Create a dict of registers with fields and '0' in their name
+ for reg in regs:
+ if len(reg.fields) and reg.name.find('0') != -1:
+ reg_dict[reg.name] = reg
+
+ # Assign fields
+ for reg in regs:
+ if not len(reg.fields):
+ reg0 = reg_dict.get(match_number.sub('0', reg.name))
+ if reg0 != None:
+ reg.fields = reg0.fields
+ reg.fields_owner = reg0
+ reg.own_fields = False
+
+
+def write_tables(regs, packets):
+
+ strings = StringTable()
+ strings_offsets = IntTable("int")
+
+ print '/* This file is autogenerated by sid_tables.py from sid.h. Do not edit directly. */'
+ print
+ print CopyRight.strip()
+ print '''
+#ifndef SID_TABLES_H
+#define SID_TABLES_H
+
+struct si_field {
+ unsigned name_offset;
+ unsigned mask;
+ unsigned num_values;
+ unsigned values_offset; /* offset into sid_strings_offsets */
+};
+
+struct si_reg {
+ unsigned name_offset;
+ unsigned offset;
+ unsigned num_fields;
+ unsigned fields_offset;
+};
+
+struct si_packet3 {
+ unsigned name_offset;
+ unsigned op;
+};
+'''
+
+ print 'static const struct si_packet3 packet3_table[] = {'
+ for pkt in packets:
+ print '\t{%s, %s},' % (strings.add(pkt[5:]), pkt)
+ print '};'
+ print
+
+ print 'static const struct si_field sid_fields_table[] = {'
+
+ fields_idx = 0
+ for reg in regs:
+ if len(reg.fields) and reg.own_fields:
+ print '\t/* %s */' % (fields_idx)
+
+ reg.fields_idx = fields_idx
+
+ for field in reg.fields:
+ if len(field.values):
+ values_offsets = []
+ for value in field.values:
+ while value[1] >= len(values_offsets):
+ values_offsets.append(-1)
+ values_offsets[value[1]] = strings.add(strip_prefix(value[0]))
+ print '\t{%s, %s(~0u), %s, %s},' % (
+ strings.add(field.name), field.s_name,
+ len(values_offsets), strings_offsets.add(values_offsets))
+ else:
+ print '\t{%s, %s(~0u)},' % (strings.add(field.name), field.s_name)
+ fields_idx += 1
+
+ print '};'
+ print
+
+ print 'static const struct si_reg sid_reg_table[] = {'
+ for reg in regs:
+ if len(reg.fields):
+ print '\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name,
+ len(reg.fields), reg.fields_idx if reg.own_fields else reg.fields_owner.fields_idx)
+ else:
+ print '\t{%s, %s},' % (strings.add(reg.name), reg.r_name)
+ print '};'
+ print
+
+ strings.emit(sys.stdout, "sid_strings")
+
+ print
+
+ strings_offsets.emit(sys.stdout, "sid_strings_offsets")
+
+ print
+ print '#endif'
+
+
+def main():
+ regs = []
+ packets = []
+ for arg in sys.argv[1:]:
+ parse(arg, regs, packets)
+ write_tables(regs, packets)
+
+
+if __name__ == '__main__':
+ main()
+
+# kate: space-indent on; indent-width 4; replace-tabs on;