i965: extract performance query metrics
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Sun, 27 May 2018 19:33:25 +0000 (20:33 +0100)
committerLionel Landwerlin <lionel.g.landwerlin@intel.com>
Wed, 17 Apr 2019 13:10:42 +0000 (14:10 +0100)
We would like to reuse performance query metrics in other APIs. Let's
make the query code dealing with the processing of raw counters into
human readable values API agnostic.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Mark Janes <mark.a.janes@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
46 files changed:
src/intel/Android.mk
src/intel/Android.perf.mk [new file with mode: 0644]
src/intel/Makefile.perf.am [new file with mode: 0644]
src/intel/Makefile.sources
src/intel/meson.build
src/intel/perf/gen_perf.c [new file with mode: 0644]
src/intel/perf/gen_perf.h [new file with mode: 0644]
src/intel/perf/gen_perf.py [new file with mode: 0644]
src/intel/perf/meson.build [new file with mode: 0644]
src/intel/perf/oa-bdw.xml [new file with mode: 0644]
src/intel/perf/oa-bxt.xml [new file with mode: 0644]
src/intel/perf/oa-cflgt2.xml [new file with mode: 0644]
src/intel/perf/oa-cflgt3.xml [new file with mode: 0644]
src/intel/perf/oa-chv.xml [new file with mode: 0644]
src/intel/perf/oa-cnl.xml [new file with mode: 0644]
src/intel/perf/oa-glk.xml [new file with mode: 0644]
src/intel/perf/oa-hsw.xml [new file with mode: 0644]
src/intel/perf/oa-icl.xml [new file with mode: 0644]
src/intel/perf/oa-kblgt2.xml [new file with mode: 0644]
src/intel/perf/oa-kblgt3.xml [new file with mode: 0644]
src/intel/perf/oa-sklgt2.xml [new file with mode: 0644]
src/intel/perf/oa-sklgt3.xml [new file with mode: 0644]
src/intel/perf/oa-sklgt4.xml [new file with mode: 0644]
src/mesa/drivers/dri/i965/Android.mk
src/mesa/drivers/dri/i965/Makefile.sources
src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_oa.py [deleted file]
src/mesa/drivers/dri/i965/brw_oa_bdw.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_bxt.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_cflgt2.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_cflgt3.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_chv.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_cnl.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_glk.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_hsw.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_icl.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_kblgt2.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_kblgt3.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_sklgt2.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_sklgt3.xml [deleted file]
src/mesa/drivers/dri/i965/brw_oa_sklgt4.xml [deleted file]
src/mesa/drivers/dri/i965/brw_performance_query.c
src/mesa/drivers/dri/i965/brw_performance_query.h
src/mesa/drivers/dri/i965/brw_performance_query_mdapi.c
src/mesa/drivers/dri/i965/brw_performance_query_metrics.h [deleted file]
src/mesa/drivers/dri/i965/meson.build

index 380473d0acb2845264102b126f11816ce0177e4d..96498141dd24dcf6778dce08f3961d6d56b85e27 100644 (file)
@@ -31,4 +31,5 @@ include $(LOCAL_PATH)/Android.compiler.mk
 include $(LOCAL_PATH)/Android.dev.mk
 include $(LOCAL_PATH)/Android.genxml.mk
 include $(LOCAL_PATH)/Android.isl.mk
+include $(LOCAL_PATH)/Android.perf.mk
 include $(LOCAL_PATH)/Android.vulkan.mk
diff --git a/src/intel/Android.perf.mk b/src/intel/Android.perf.mk
new file mode 100644 (file)
index 0000000..0d7d746
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright © 2018 Intel Corporation
+#
+# 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 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.
+#
+
+# ---------------------------------------
+# Build libmesa_intel_perf
+# ---------------------------------------
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := libmesa_intel_perf
+
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+
+intermediates := $(call local-generated-sources-dir)
+
+LOCAL_C_INCLUDES := $(MESA_TOP)/include/drm-uapi
+
+LOCAL_SRC_FILES := $(GEN_PERF_FILES)
+
+LOCAL_GENERATED_SOURCES += $(addprefix $(intermediates)/, \
+       $(GEN_PERF_GENERATED_FILES))
+
+$(intermediates)/perf/gen_perf_metrics.c: $(LOCAL_PATH)/perf/gen_perf.py $(addprefix $(MESA_TOP)/src/intel/,$(GEN_PERF_XML_FILES))
+       @echo "target Generated: $(PRIVATE_MODULE) <= $(notdir $(@))"
+       @mkdir -p $(dir $@)
+       $(hide) $(MESA_PYTHON2) $< \
+       --code=$@ \
+       --header=$(@:%.c=%.h) \
+       $(addprefix $(MESA_TOP)/src/intel/,$(GEN_PERF_XML_FILES))
+
+$(intermediates)/perf/gen_perf_metrics.h: $(intermediates)/perf/gen_perf_metrics.c
+
+include $(MESA_COMMON_MK)
+include $(BUILD_STATIC_LIBRARY)
diff --git a/src/intel/Makefile.perf.am b/src/intel/Makefile.perf.am
new file mode 100644 (file)
index 0000000..a9d896c
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright © 2018 Intel Corporation
+#
+# 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.
+
+BUILT_SOURCES += \
+       $(GEN_PERF_GENERATED_FILES)
+
+noinst_LTLIBRARIES += perf/libintel_perf.la
+
+perf_libintel_perf_la_SOURCES = $(GEN_PERF_FILES) $(GEN_PERF_GENERATED_FILES)
+perf_libintel_perf_la_CFLAGS = $(AM_CFLAGS)
+
+perf/gen_perf_metrics.c: perf/gen_perf.py $(GEN_PERF_XML_FILES)
+       $(MKDIR_GEN)
+       $(PYTHON_GEN) $(PYTHON_FLAGS) $(srcdir)/perf/gen_perf.py \
+       --code=$(builddir)/perf/gen_perf_metrics.c \
+       --header=$(builddir)/perf/gen_perf_metrics.h \
+       $(GEN_PERF_XML_FILES:%=$(srcdir)/%)
+
+perf/gen_perf_metrics.h: perf/gen_perf_metrics.c
+
+EXTRA_DIST += \
+       $(GEN_PERF_XML_FILES) \
+       perf/gen_perf.py
index ffe51f87698e8b38b768c836e850ed529d92b851..b5915a0d9a4d95b190ddcd8e65c28a023809447e 100644 (file)
@@ -314,3 +314,27 @@ VULKAN_GEN10_FILES := \
 VULKAN_GEN11_FILES := \
        vulkan/gen8_cmd_buffer.c \
        $(VULKAN_GENX_FILES)
+
+GEN_PERF_XML_FILES = \
+       perf/oa-hsw.xml \
+       perf/oa-bdw.xml \
+       perf/oa-chv.xml \
+       perf/oa-sklgt2.xml \
+       perf/oa-sklgt3.xml \
+       perf/oa-sklgt4.xml \
+       perf/oa-bxt.xml \
+       perf/oa-kblgt2.xml \
+       perf/oa-kblgt3.xml \
+       perf/oa-glk.xml \
+       perf/oa-cflgt2.xml \
+       perf/oa-cflgt3.xml \
+       perf/oa-cnl.xml \
+       perf/oa-icl.xml
+
+GEN_PERF_FILES = \
+       perf/gen_perf.c \
+       perf/gen_perf.h
+
+GEN_PERF_GENERATED_FILES = \
+       perf/gen_perf_metrics.c \
+       perf/gen_perf_metrics.h
index a5bb03e314a836b22a6bff91b5b98fa595ac7ad6..7b6aa40ba8d7ceaf8fbbcce71521d1493bee7c5e 100644 (file)
@@ -27,6 +27,7 @@ subdir('dev')
 subdir('isl')
 subdir('common')
 subdir('compiler')
+subdir('perf')
 if with_tools.contains('intel') or with_tools.contains('intel-ui')
   subdir('tools')
 endif
diff --git a/src/intel/perf/gen_perf.c b/src/intel/perf/gen_perf.c
new file mode 100644 (file)
index 0000000..bc26cff
--- /dev/null
@@ -0,0 +1,435 @@
+/*
+ * Copyright © 2018 Intel Corporation
+ *
+ * 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 <dirent.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <drm-uapi/i915_drm.h>
+
+#include "gen_perf.h"
+#include "perf/gen_perf_metrics.h"
+
+#include "dev/gen_debug.h"
+#include "dev/gen_device_info.h"
+#include "util/bitscan.h"
+
+#define FILE_DEBUG_FLAG DEBUG_PERFMON
+
+static bool
+get_sysfs_dev_dir(struct gen_perf *perf, int fd)
+{
+   struct stat sb;
+   int min, maj;
+   DIR *drmdir;
+   struct dirent *drm_entry;
+   int len;
+
+   perf->sysfs_dev_dir[0] = '\0';
+
+   if (fstat(fd, &sb)) {
+      DBG("Failed to stat DRM fd\n");
+      return false;
+   }
+
+   maj = major(sb.st_rdev);
+   min = minor(sb.st_rdev);
+
+   if (!S_ISCHR(sb.st_mode)) {
+      DBG("DRM fd is not a character device as expected\n");
+      return false;
+   }
+
+   len = snprintf(perf->sysfs_dev_dir,
+                  sizeof(perf->sysfs_dev_dir),
+                  "/sys/dev/char/%d:%d/device/drm", maj, min);
+   if (len < 0 || len >= sizeof(perf->sysfs_dev_dir)) {
+      DBG("Failed to concatenate sysfs path to drm device\n");
+      return false;
+   }
+
+   drmdir = opendir(perf->sysfs_dev_dir);
+   if (!drmdir) {
+      DBG("Failed to open %s: %m\n", perf->sysfs_dev_dir);
+      return false;
+   }
+
+   while ((drm_entry = readdir(drmdir))) {
+      if ((drm_entry->d_type == DT_DIR ||
+           drm_entry->d_type == DT_LNK) &&
+          strncmp(drm_entry->d_name, "card", 4) == 0)
+      {
+         len = snprintf(perf->sysfs_dev_dir,
+                        sizeof(perf->sysfs_dev_dir),
+                        "/sys/dev/char/%d:%d/device/drm/%s",
+                        maj, min, drm_entry->d_name);
+         closedir(drmdir);
+         if (len < 0 || len >= sizeof(perf->sysfs_dev_dir))
+            return false;
+         else
+            return true;
+      }
+   }
+
+   closedir(drmdir);
+
+   DBG("Failed to find cardX directory under /sys/dev/char/%d:%d/device/drm\n",
+       maj, min);
+
+   return false;
+}
+
+static bool
+read_file_uint64(const char *file, uint64_t *val)
+{
+    char buf[32];
+    int fd, n;
+
+    fd = open(file, 0);
+    if (fd < 0)
+       return false;
+    while ((n = read(fd, buf, sizeof (buf) - 1)) < 0 &&
+           errno == EINTR);
+    close(fd);
+    if (n < 0)
+       return false;
+
+    buf[n] = '\0';
+    *val = strtoull(buf, NULL, 0);
+
+    return true;
+}
+
+static bool
+read_sysfs_drm_device_file_uint64(struct gen_perf *perf,
+                                  const char *file,
+                                  uint64_t *value)
+{
+   char buf[512];
+   int len;
+
+   len = snprintf(buf, sizeof(buf), "%s/%s", perf->sysfs_dev_dir, file);
+   if (len < 0 || len >= sizeof(buf)) {
+      DBG("Failed to concatenate sys filename to read u64 from\n");
+      return false;
+   }
+
+   return read_file_uint64(buf, value);
+}
+
+static void
+register_oa_config(struct gen_perf *perf,
+                   const struct gen_perf_query_info *query,
+                   uint64_t config_id)
+{
+   struct gen_perf_query_info *registred_query =
+      gen_perf_query_append_query_info(perf, 0);
+
+   *registred_query = *query;
+   registred_query->oa_metrics_set_id = config_id;
+   DBG("metric set registred: id = %" PRIu64", guid = %s\n",
+       registred_query->oa_metrics_set_id, query->guid);
+}
+
+static void
+enumerate_sysfs_metrics(struct gen_perf *perf)
+{
+   DIR *metricsdir = NULL;
+   struct dirent *metric_entry;
+   char buf[256];
+   int len;
+
+   len = snprintf(buf, sizeof(buf), "%s/metrics", perf->sysfs_dev_dir);
+   if (len < 0 || len >= sizeof(buf)) {
+      DBG("Failed to concatenate path to sysfs metrics/ directory\n");
+      return;
+   }
+
+   metricsdir = opendir(buf);
+   if (!metricsdir) {
+      DBG("Failed to open %s: %m\n", buf);
+      return;
+   }
+
+   while ((metric_entry = readdir(metricsdir))) {
+      struct hash_entry *entry;
+
+      if ((metric_entry->d_type != DT_DIR &&
+           metric_entry->d_type != DT_LNK) ||
+          metric_entry->d_name[0] == '.')
+         continue;
+
+      DBG("metric set: %s\n", metric_entry->d_name);
+      entry = _mesa_hash_table_search(perf->oa_metrics_table,
+                                      metric_entry->d_name);
+      if (entry) {
+         uint64_t id;
+
+         len = snprintf(buf, sizeof(buf), "%s/metrics/%s/id",
+                        perf->sysfs_dev_dir, metric_entry->d_name);
+         if (len < 0 || len >= sizeof(buf)) {
+            DBG("Failed to concatenate path to sysfs metric id file\n");
+            continue;
+         }
+
+         if (!read_file_uint64(buf, &id)) {
+            DBG("Failed to read metric set id from %s: %m", buf);
+            continue;
+         }
+
+         register_oa_config(perf, (const struct gen_perf_query_info *)entry->data, id);
+      } else
+         DBG("metric set not known by mesa (skipping)\n");
+   }
+
+   closedir(metricsdir);
+}
+
+static bool
+kernel_has_dynamic_config_support(struct gen_perf *perf, int fd)
+{
+   hash_table_foreach(perf->oa_metrics_table, entry) {
+      struct gen_perf_query_info *query = entry->data;
+      char config_path[280];
+      uint64_t config_id;
+
+      snprintf(config_path, sizeof(config_path), "%s/metrics/%s/id",
+               perf->sysfs_dev_dir, query->guid);
+
+      /* Look for the test config, which we know we can't replace. */
+      if (read_file_uint64(config_path, &config_id) && config_id == 1) {
+         return perf->ioctl(fd, DRM_IOCTL_I915_PERF_REMOVE_CONFIG,
+                            &config_id) < 0 && errno == ENOENT;
+      }
+   }
+
+   return false;
+}
+
+bool
+gen_perf_load_metric_id(struct gen_perf *perf, const char *guid,
+                        uint64_t *metric_id)
+{
+   char config_path[280];
+
+   snprintf(config_path, sizeof(config_path), "%s/metrics/%s/id",
+            perf->sysfs_dev_dir, guid);
+
+   /* Don't recreate already loaded configs. */
+   return read_file_uint64(config_path, metric_id);
+}
+
+static void
+init_oa_configs(struct gen_perf *perf, int fd)
+{
+   hash_table_foreach(perf->oa_metrics_table, entry) {
+      const struct gen_perf_query_info *query = entry->data;
+      struct drm_i915_perf_oa_config config;
+      uint64_t config_id;
+      int ret;
+
+      if (gen_perf_load_metric_id(perf, query->guid, &config_id)) {
+         DBG("metric set: %s (already loaded)\n", query->guid);
+         register_oa_config(perf, query, config_id);
+         continue;
+      }
+
+      memset(&config, 0, sizeof(config));
+
+      memcpy(config.uuid, query->guid, sizeof(config.uuid));
+
+      config.n_mux_regs = query->n_mux_regs;
+      config.mux_regs_ptr = (uintptr_t) query->mux_regs;
+
+      config.n_boolean_regs = query->n_b_counter_regs;
+      config.boolean_regs_ptr = (uintptr_t) query->b_counter_regs;
+
+      config.n_flex_regs = query->n_flex_regs;
+      config.flex_regs_ptr = (uintptr_t) query->flex_regs;
+
+      ret = perf->ioctl(fd, DRM_IOCTL_I915_PERF_ADD_CONFIG, &config);
+      if (ret < 0) {
+         DBG("Failed to load \"%s\" (%s) metrics set in kernel: %s\n",
+             query->name, query->guid, strerror(errno));
+         continue;
+      }
+
+      register_oa_config(perf, query, ret);
+      DBG("metric set: %s (added)\n", query->guid);
+   }
+}
+
+static void
+compute_topology_builtins(struct gen_perf *perf,
+                          const struct gen_device_info *devinfo)
+{
+   perf->sys_vars.slice_mask = devinfo->slice_masks;
+   perf->sys_vars.n_eu_slices = devinfo->num_slices;
+
+   for (int i = 0; i < sizeof(devinfo->subslice_masks[i]); i++) {
+      perf->sys_vars.n_eu_sub_slices +=
+         __builtin_popcount(devinfo->subslice_masks[i]);
+   }
+
+   for (int i = 0; i < sizeof(devinfo->eu_masks); i++)
+      perf->sys_vars.n_eus += __builtin_popcount(devinfo->eu_masks[i]);
+
+   perf->sys_vars.eu_threads_count =
+      perf->sys_vars.n_eus * devinfo->num_thread_per_eu;
+
+   /* The subslice mask builtin contains bits for all slices. Prior to Gen11
+    * it had groups of 3bits for each slice, on Gen11 it's 8bits for each
+    * slice.
+    *
+    * Ideally equations would be updated to have a slice/subslice query
+    * function/operator.
+    */
+   perf->sys_vars.subslice_mask = 0;
+
+   int bits_per_subslice = devinfo->gen == 11 ? 8 : 3;
+
+   for (int s = 0; s < util_last_bit(devinfo->slice_masks); s++) {
+      for (int ss = 0; ss < (devinfo->subslice_slice_stride * 8); ss++) {
+         if (gen_device_info_subslice_available(devinfo, s, ss))
+            perf->sys_vars.subslice_mask |= 1ULL << (s * bits_per_subslice + ss);
+      }
+   }
+}
+
+static bool
+init_oa_sys_vars(struct gen_perf *perf, const struct gen_device_info *devinfo)
+{
+   uint64_t min_freq_mhz = 0, max_freq_mhz = 0;
+
+   if (!read_sysfs_drm_device_file_uint64(perf, "gt_min_freq_mhz", &min_freq_mhz))
+      return false;
+
+   if (!read_sysfs_drm_device_file_uint64(perf,  "gt_max_freq_mhz", &max_freq_mhz))
+      return false;
+
+   memset(&perf->sys_vars, 0, sizeof(perf->sys_vars));
+   perf->sys_vars.gt_min_freq = min_freq_mhz * 1000000;
+   perf->sys_vars.gt_max_freq = max_freq_mhz * 1000000;
+   perf->sys_vars.timestamp_frequency = devinfo->timestamp_frequency;
+   perf->sys_vars.revision = devinfo->revision;
+   compute_topology_builtins(perf, devinfo);
+
+   return true;
+}
+
+typedef void (*perf_register_oa_queries_t)(struct gen_perf *);
+
+static perf_register_oa_queries_t
+get_register_queries_function(const struct gen_device_info *devinfo)
+{
+   if (devinfo->is_haswell)
+      return gen_oa_register_queries_hsw;
+   if (devinfo->is_cherryview)
+      return gen_oa_register_queries_chv;
+   if (devinfo->is_broadwell)
+      return gen_oa_register_queries_bdw;
+   if (devinfo->is_broxton)
+      return gen_oa_register_queries_bxt;
+   if (devinfo->is_skylake) {
+      if (devinfo->gt == 2)
+         return gen_oa_register_queries_sklgt2;
+      if (devinfo->gt == 3)
+         return gen_oa_register_queries_sklgt3;
+      if (devinfo->gt == 4)
+         return gen_oa_register_queries_sklgt4;
+   }
+   if (devinfo->is_kabylake) {
+      if (devinfo->gt == 2)
+         return gen_oa_register_queries_kblgt2;
+      if (devinfo->gt == 3)
+         return gen_oa_register_queries_kblgt3;
+   }
+   if (devinfo->is_geminilake)
+      return gen_oa_register_queries_glk;
+   if (devinfo->is_coffeelake) {
+      if (devinfo->gt == 2)
+         return gen_oa_register_queries_cflgt2;
+      if (devinfo->gt == 3)
+         return gen_oa_register_queries_cflgt3;
+   }
+   if (devinfo->is_cannonlake)
+      return gen_oa_register_queries_cnl;
+
+   return NULL;
+}
+
+bool
+gen_perf_load_oa_metrics(struct gen_perf *perf, int fd,
+                         const struct gen_device_info *devinfo)
+{
+   perf_register_oa_queries_t oa_register = get_register_queries_function(devinfo);
+   bool i915_perf_oa_available = false;
+   struct stat sb;
+
+   /* The existence of this sysctl parameter implies the kernel supports
+    * the i915 perf interface.
+    */
+   if (stat("/proc/sys/dev/i915/perf_stream_paranoid", &sb) == 0) {
+
+      /* If _paranoid == 1 then on Gen8+ we won't be able to access OA
+       * metrics unless running as root.
+       */
+      if (devinfo->is_haswell)
+         i915_perf_oa_available = true;
+      else {
+         uint64_t paranoid = 1;
+
+         read_file_uint64("/proc/sys/dev/i915/perf_stream_paranoid", &paranoid);
+
+         if (paranoid == 0 || geteuid() == 0)
+            i915_perf_oa_available = true;
+      }
+   }
+
+   if (!i915_perf_oa_available ||
+       !oa_register ||
+       !get_sysfs_dev_dir(perf, fd) ||
+       !init_oa_sys_vars(perf, devinfo))
+      return false;
+
+   perf->oa_metrics_table =
+      _mesa_hash_table_create(perf, _mesa_key_hash_string,
+                              _mesa_key_string_equal);
+
+   /* Index all the metric sets mesa knows about before looking to see what
+    * the kernel is advertising.
+    */
+   oa_register(perf);
+
+   if (likely((INTEL_DEBUG & DEBUG_NO_OACONFIG) == 0) &&
+       kernel_has_dynamic_config_support(perf, fd))
+      init_oa_configs(perf, fd);
+   else
+      enumerate_sysfs_metrics(perf);
+
+   return true;
+}
diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h
new file mode 100644 (file)
index 0000000..5d47ebd
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * Copyright © 2018 Intel Corporation
+ *
+ * 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.
+ */
+
+#ifndef GEN_PERF_H
+#define GEN_PERF_H
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+
+#include <sys/sysmacros.h>
+
+#include "util/hash_table.h"
+#include "util/ralloc.h"
+
+struct gen_device_info;
+
+struct gen_perf;
+struct gen_perf_query_info;
+
+enum gen_perf_counter_type {
+   GEN_PERF_COUNTER_TYPE_EVENT,
+   GEN_PERF_COUNTER_TYPE_DURATION_NORM,
+   GEN_PERF_COUNTER_TYPE_DURATION_RAW,
+   GEN_PERF_COUNTER_TYPE_THROUGHPUT,
+   GEN_PERF_COUNTER_TYPE_RAW,
+   GEN_PERF_COUNTER_TYPE_TIMESTAMP,
+};
+
+enum gen_perf_counter_data_type {
+   GEN_PERF_COUNTER_DATA_TYPE_BOOL32,
+   GEN_PERF_COUNTER_DATA_TYPE_UINT32,
+   GEN_PERF_COUNTER_DATA_TYPE_UINT64,
+   GEN_PERF_COUNTER_DATA_TYPE_FLOAT,
+   GEN_PERF_COUNTER_DATA_TYPE_DOUBLE,
+};
+
+struct gen_pipeline_stat {
+   uint32_t reg;
+   uint32_t numerator;
+   uint32_t denominator;
+};
+
+struct gen_perf_query_counter {
+   const char *name;
+   const char *desc;
+   enum gen_perf_counter_type type;
+   enum gen_perf_counter_data_type data_type;
+   uint64_t raw_max;
+   size_t offset;
+   size_t size;
+
+   union {
+      uint64_t (*oa_counter_read_uint64)(struct gen_perf *perf,
+                                         const struct gen_perf_query_info *query,
+                                         uint64_t *accumulator);
+      float (*oa_counter_read_float)(struct gen_perf *perf,
+                                     const struct gen_perf_query_info *query,
+                                     uint64_t *accumulator);
+      struct gen_pipeline_stat pipeline_stat;
+   };
+};
+
+struct gen_perf_query_register_prog {
+   uint32_t reg;
+   uint32_t val;
+};
+
+struct gen_perf_query_info {
+   enum gen_perf_query_type {
+      GEN_PERF_QUERY_TYPE_OA,
+      GEN_PERF_QUERY_TYPE_RAW,
+      GEN_PERF_QUERY_TYPE_PIPELINE,
+   } kind;
+   const char *name;
+   const char *guid;
+   struct gen_perf_query_counter *counters;
+   int n_counters;
+   int max_counters;
+   size_t data_size;
+
+   /* OA specific */
+   uint64_t oa_metrics_set_id;
+   int oa_format;
+
+   /* For indexing into the accumulator[] ... */
+   int gpu_time_offset;
+   int gpu_clock_offset;
+   int a_offset;
+   int b_offset;
+   int c_offset;
+
+   /* Register programming for a given query */
+   struct gen_perf_query_register_prog *flex_regs;
+   uint32_t n_flex_regs;
+
+   struct gen_perf_query_register_prog *mux_regs;
+   uint32_t n_mux_regs;
+
+   struct gen_perf_query_register_prog *b_counter_regs;
+   uint32_t n_b_counter_regs;
+};
+
+struct gen_perf {
+   struct gen_perf_query_info *queries;
+   int n_queries;
+
+   /* Variables referenced in the XML meta data for OA performance
+    * counters, e.g in the normalization equations.
+    *
+    * All uint64_t for consistent operand types in generated code
+    */
+   struct {
+      uint64_t timestamp_frequency; /** $GpuTimestampFrequency */
+      uint64_t n_eus;               /** $EuCoresTotalCount */
+      uint64_t n_eu_slices;         /** $EuSlicesTotalCount */
+      uint64_t n_eu_sub_slices;     /** $EuSubslicesTotalCount */
+      uint64_t eu_threads_count;    /** $EuThreadsCount */
+      uint64_t slice_mask;          /** $SliceMask */
+      uint64_t subslice_mask;       /** $SubsliceMask */
+      uint64_t gt_min_freq;         /** $GpuMinFrequency */
+      uint64_t gt_max_freq;         /** $GpuMaxFrequency */
+      uint64_t revision;            /** $SkuRevisionId */
+   } sys_vars;
+
+   /* OA metric sets, indexed by GUID, as know by Mesa at build time, to
+    * cross-reference with the GUIDs of configs advertised by the kernel at
+    * runtime
+    */
+   struct hash_table *oa_metrics_table;
+
+   /* Location of the device's sysfs entry. */
+   char sysfs_dev_dir[256];
+
+   int (*ioctl)(int, unsigned long, void *);
+};
+
+static inline struct gen_perf_query_info *
+gen_perf_query_append_query_info(struct gen_perf *perf, int max_counters)
+{
+   struct gen_perf_query_info *query;
+
+   perf->queries = reralloc(perf, perf->queries,
+                            struct gen_perf_query_info,
+                            ++perf->n_queries);
+   query = &perf->queries[perf->n_queries - 1];
+   memset(query, 0, sizeof(*query));
+
+   if (max_counters > 0) {
+      query->max_counters = max_counters;
+      query->counters =
+         rzalloc_array(perf, struct gen_perf_query_counter, max_counters);
+   }
+
+   return query;
+}
+
+static inline void
+gen_perf_query_info_add_stat_reg(struct gen_perf_query_info *query,
+                                 uint32_t reg,
+                                 uint32_t numerator,
+                                 uint32_t denominator,
+                                 const char *name,
+                                 const char *description)
+{
+   struct gen_perf_query_counter *counter;
+
+   assert(query->n_counters < query->max_counters);
+
+   counter = &query->counters[query->n_counters];
+   counter->name = name;
+   counter->desc = description;
+   counter->type = GEN_PERF_COUNTER_TYPE_RAW;
+   counter->data_type = GEN_PERF_COUNTER_DATA_TYPE_UINT64;
+   counter->size = sizeof(uint64_t);
+   counter->offset = sizeof(uint64_t) * query->n_counters;
+   counter->pipeline_stat.reg = reg;
+   counter->pipeline_stat.numerator = numerator;
+   counter->pipeline_stat.denominator = denominator;
+
+   query->n_counters++;
+}
+
+static inline void
+gen_perf_query_info_add_basic_stat_reg(struct gen_perf_query_info *query,
+                                       uint32_t reg, const char *name)
+{
+   gen_perf_query_info_add_stat_reg(query, reg, 1, 1, name, name);
+}
+
+/* Accumulate 32bits OA counters */
+static inline void
+gen_perf_query_accumulate_uint32(const uint32_t *report0,
+                                 const uint32_t *report1,
+                                 uint64_t *accumulator)
+{
+   *accumulator += (uint32_t)(*report1 - *report0);
+}
+
+/* Accumulate 40bits OA counters */
+static inline void
+gen_perf_query_accumulate_uint40(int a_index,
+                                 const uint32_t *report0,
+                                 const uint32_t *report1,
+                                 uint64_t *accumulator)
+{
+   const uint8_t *high_bytes0 = (uint8_t *)(report0 + 40);
+   const uint8_t *high_bytes1 = (uint8_t *)(report1 + 40);
+   uint64_t high0 = (uint64_t)(high_bytes0[a_index]) << 32;
+   uint64_t high1 = (uint64_t)(high_bytes1[a_index]) << 32;
+   uint64_t value0 = report0[a_index + 4] | high0;
+   uint64_t value1 = report1[a_index + 4] | high1;
+   uint64_t delta;
+
+   if (value0 > value1)
+      delta = (1ULL << 40) + value1 - value0;
+   else
+      delta = value1 - value0;
+
+   *accumulator += delta;
+}
+
+static inline struct gen_perf *
+gen_perf_new(void *ctx, int (*ioctl_cb)(int, unsigned long, void *))
+{
+   struct gen_perf *perf = rzalloc(ctx, struct gen_perf);
+
+   perf->ioctl = ioctl_cb;
+
+   return perf;
+}
+
+bool gen_perf_load_oa_metrics(struct gen_perf *perf, int fd,
+                              const struct gen_device_info *devinfo);
+bool gen_perf_load_metric_id(struct gen_perf *perf, const char *guid,
+                             uint64_t *metric_id);
+
+#endif /* GEN_PERF_H */
diff --git a/src/intel/perf/gen_perf.py b/src/intel/perf/gen_perf.py
new file mode 100644 (file)
index 0000000..c41e8f3
--- /dev/null
@@ -0,0 +1,750 @@
+# Copyright (c) 2015-2017 Intel Corporation
+#
+# 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.
+
+import argparse
+import os
+import sys
+import textwrap
+
+import xml.etree.cElementTree as et
+
+hashed_funcs = {}
+
+c_file = None
+_c_indent = 0
+
+def c(*args):
+    code = ' '.join(map(str,args))
+    for line in code.splitlines():
+        text = ''.rjust(_c_indent) + line
+        c_file.write(text.rstrip() + "\n")
+
+# indented, but no trailing newline...
+def c_line_start(code):
+    c_file.write(''.rjust(_c_indent) + code)
+def c_raw(code):
+    c_file.write(code)
+
+def c_indent(n):
+    global _c_indent
+    _c_indent = _c_indent + n
+def c_outdent(n):
+    global _c_indent
+    _c_indent = _c_indent - n
+
+header_file = None
+_h_indent = 0
+
+def h(*args):
+    code = ' '.join(map(str,args))
+    for line in code.splitlines():
+        text = ''.rjust(_h_indent) + line
+        header_file.write(text.rstrip() + "\n")
+
+def h_indent(n):
+    global _c_indent
+    _h_indent = _h_indent + n
+def h_outdent(n):
+    global _c_indent
+    _h_indent = _h_indent - n
+
+
+def emit_fadd(tmp_id, args):
+    c("double tmp{0} = {1} + {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+# Be careful to check for divide by zero...
+def emit_fdiv(tmp_id, args):
+    c("double tmp{0} = {1};".format(tmp_id, args[1]))
+    c("double tmp{0} = {1};".format(tmp_id + 1, args[0]))
+    c("double tmp{0} = tmp{1} ? tmp{2} / tmp{1} : 0;".format(tmp_id + 2, tmp_id + 1, tmp_id))
+    return tmp_id + 3
+
+def emit_fmax(tmp_id, args):
+    c("double tmp{0} = {1};".format(tmp_id, args[1]))
+    c("double tmp{0} = {1};".format(tmp_id + 1, args[0]))
+    c("double tmp{0} = MAX(tmp{1}, tmp{2});".format(tmp_id + 2, tmp_id, tmp_id + 1))
+    return tmp_id + 3
+
+def emit_fmul(tmp_id, args):
+    c("double tmp{0} = {1} * {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_fsub(tmp_id, args):
+    c("double tmp{0} = {1} - {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_read(tmp_id, args):
+    type = args[1].lower()
+    c("uint64_t tmp{0} = accumulator[query->{1}_offset + {2}];".format(tmp_id, type, args[0]))
+    return tmp_id + 1
+
+def emit_uadd(tmp_id, args):
+    c("uint64_t tmp{0} = {1} + {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+# Be careful to check for divide by zero...
+def emit_udiv(tmp_id, args):
+    c("uint64_t tmp{0} = {1};".format(tmp_id, args[1]))
+    c("uint64_t tmp{0} = {1};".format(tmp_id + 1, args[0]))
+    c("uint64_t tmp{0} = tmp{1} ? tmp{2} / tmp{1} : 0;".format(tmp_id + 2, tmp_id + 1, tmp_id))
+    return tmp_id + 3
+
+def emit_umul(tmp_id, args):
+    c("uint64_t tmp{0} = {1} * {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_usub(tmp_id, args):
+    c("uint64_t tmp{0} = {1} - {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_umin(tmp_id, args):
+    c("uint64_t tmp{0} = MIN({1}, {2});".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_lshft(tmp_id, args):
+    c("uint64_t tmp{0} = {1} << {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_rshft(tmp_id, args):
+    c("uint64_t tmp{0} = {1} >> {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+def emit_and(tmp_id, args):
+    c("uint64_t tmp{0} = {1} & {2};".format(tmp_id, args[1], args[0]))
+    return tmp_id + 1
+
+ops = {}
+#             (n operands, emitter)
+ops["FADD"] = (2, emit_fadd)
+ops["FDIV"] = (2, emit_fdiv)
+ops["FMAX"] = (2, emit_fmax)
+ops["FMUL"] = (2, emit_fmul)
+ops["FSUB"] = (2, emit_fsub)
+ops["READ"] = (2, emit_read)
+ops["UADD"] = (2, emit_uadd)
+ops["UDIV"] = (2, emit_udiv)
+ops["UMUL"] = (2, emit_umul)
+ops["USUB"] = (2, emit_usub)
+ops["UMIN"] = (2, emit_umin)
+ops["<<"]   = (2, emit_lshft)
+ops[">>"]   = (2, emit_rshft)
+ops["AND"]  = (2, emit_and)
+
+def brkt(subexp):
+    if " " in subexp:
+        return "(" + subexp + ")"
+    else:
+        return subexp
+
+def splice_bitwise_and(args):
+    return brkt(args[1]) + " & " + brkt(args[0])
+
+def splice_logical_and(args):
+    return brkt(args[1]) + " && " + brkt(args[0])
+
+def splice_ult(args):
+    return brkt(args[1]) + " < " + brkt(args[0])
+
+def splice_ugte(args):
+    return brkt(args[1]) + " >= " + brkt(args[0])
+
+exp_ops = {}
+#                 (n operands, splicer)
+exp_ops["AND"]  = (2, splice_bitwise_and)
+exp_ops["UGTE"] = (2, splice_ugte)
+exp_ops["ULT"]  = (2, splice_ult)
+exp_ops["&&"]   = (2, splice_logical_and)
+
+
+hw_vars = {}
+hw_vars["$EuCoresTotalCount"] = "perf->sys_vars.n_eus"
+hw_vars["$EuSlicesTotalCount"] = "perf->sys_vars.n_eu_slices"
+hw_vars["$EuSubslicesTotalCount"] = "perf->sys_vars.n_eu_sub_slices"
+hw_vars["$EuThreadsCount"] = "perf->sys_vars.eu_threads_count"
+hw_vars["$SliceMask"] = "perf->sys_vars.slice_mask"
+hw_vars["$SubsliceMask"] = "perf->sys_vars.subslice_mask"
+hw_vars["$GpuTimestampFrequency"] = "perf->sys_vars.timestamp_frequency"
+hw_vars["$GpuMinFrequency"] = "perf->sys_vars.gt_min_freq"
+hw_vars["$GpuMaxFrequency"] = "perf->sys_vars.gt_max_freq"
+hw_vars["$SkuRevisionId"] = "perf->sys_vars.revision"
+
+def output_rpn_equation_code(set, counter, equation):
+    c("/* RPN equation: " + equation + " */")
+    tokens = equation.split()
+    stack = []
+    tmp_id = 0
+    tmp = None
+
+    for token in tokens:
+        stack.append(token)
+        while stack and stack[-1] in ops:
+            op = stack.pop()
+            argc, callback = ops[op]
+            args = []
+            for i in range(0, argc):
+                operand = stack.pop()
+                if operand[0] == "$":
+                    if operand in hw_vars:
+                        operand = hw_vars[operand]
+                    elif operand in set.counter_vars:
+                        reference = set.counter_vars[operand]
+                        operand = set.read_funcs[operand[1:]] + "(perf, query, accumulator)"
+                    else:
+                        raise Exception("Failed to resolve variable " + operand + " in equation " + equation + " for " + set.name + " :: " + counter.get('name'));
+                args.append(operand)
+
+            tmp_id = callback(tmp_id, args)
+
+            tmp = "tmp{0}".format(tmp_id - 1)
+            stack.append(tmp)
+
+    if len(stack) != 1:
+        raise Exception("Spurious empty rpn code for " + set.name + " :: " +
+                counter.get('name') + ".\nThis is probably due to some unhandled RPN function, in the equation \"" +
+                equation + "\"")
+
+    value = stack[-1]
+
+    if value in hw_vars:
+        value = hw_vars[value]
+    if value in set.counter_vars:
+        value = set.read_funcs[value[1:]] + "(perf, query, accumulator)"
+
+    c("\nreturn " + value + ";")
+
+def splice_rpn_expression(set, counter, expression):
+    tokens = expression.split()
+    stack = []
+
+    for token in tokens:
+        stack.append(token)
+        while stack and stack[-1] in exp_ops:
+            op = stack.pop()
+            argc, callback = exp_ops[op]
+            args = []
+            for i in range(0, argc):
+                operand = stack.pop()
+                if operand[0] == "$":
+                    if operand in hw_vars:
+                        operand = hw_vars[operand]
+                    else:
+                        raise Exception("Failed to resolve variable " + operand + " in expression " + expression + " for " + set.name + " :: " + counter.get('name'));
+                args.append(operand)
+
+            subexp = callback(args)
+
+            stack.append(subexp)
+
+    if len(stack) != 1:
+        raise Exception("Spurious empty rpn expression for " + set.name + " :: " +
+                counter.get('name') + ".\nThis is probably due to some unhandled RPN operation, in the expression \"" +
+                expression + "\"")
+
+    return stack[-1]
+
+def output_counter_read(gen, set, counter):
+    c("\n")
+    c("/* {0} :: {1} */".format(set.name, counter.get('name')))
+
+    if counter.read_hash in hashed_funcs:
+        c("#define %s \\" % counter.read_sym)
+        c_indent(3)
+        c("%s" % hashed_funcs[counter.read_hash])
+        c_outdent(3)
+    else:
+        ret_type = counter.get('data_type')
+        if ret_type == "uint64":
+            ret_type = "uint64_t"
+
+        read_eq = counter.get('equation')
+
+        c("static " + ret_type)
+        c(counter.read_sym + "(MAYBE_UNUSED struct gen_perf *perf,\n")
+        c_indent(len(counter.read_sym) + 1)
+        c("const struct gen_perf_query_info *query,\n")
+        c("uint64_t *accumulator)\n")
+        c_outdent(len(counter.read_sym) + 1)
+
+        c("{")
+        c_indent(3)
+        output_rpn_equation_code(set, counter, read_eq)
+        c_outdent(3)
+        c("}")
+
+        hashed_funcs[counter.read_hash] = counter.read_sym
+
+
+def output_counter_max(gen, set, counter):
+    max_eq = counter.get('max_equation')
+
+    if not counter.has_max_func():
+        return
+
+    c("\n")
+    c("/* {0} :: {1} */".format(set.name, counter.get('name')))
+
+    if counter.max_hash in hashed_funcs:
+        c("#define %s \\" % counter.max_sym())
+        c_indent(3)
+        c("%s" % hashed_funcs[counter.max_hash])
+        c_outdent(3)
+    else:
+        ret_type = counter.get('data_type')
+        if ret_type == "uint64":
+            ret_type = "uint64_t"
+
+        c("static " + ret_type)
+        c(counter.max_sym() + "(struct gen_perf *perf)\n")
+        c("{")
+        c_indent(3)
+        output_rpn_equation_code(set, counter, max_eq)
+        c_outdent(3)
+        c("}")
+
+        hashed_funcs[counter.max_hash] = counter.max_sym()
+
+
+c_type_sizes = { "uint32_t": 4, "uint64_t": 8, "float": 4, "double": 8, "bool": 4 }
+def sizeof(c_type):
+    return c_type_sizes[c_type]
+
+def pot_align(base, pot_alignment):
+    return (base + pot_alignment - 1) & ~(pot_alignment - 1);
+
+semantic_type_map = {
+    "duration": "raw",
+    "ratio": "event"
+    }
+
+def output_availability(set, availability, counter_name):
+    expression = splice_rpn_expression(set, counter_name, availability)
+    lines = expression.split(' && ')
+    n_lines = len(lines)
+    if n_lines == 1:
+        c("if (" + lines[0] + ") {")
+    else:
+        c("if (" + lines[0] + " &&")
+        c_indent(4)
+        for i in range(1, (n_lines - 1)):
+            c(lines[i] + " &&")
+        c(lines[(n_lines - 1)] + ") {")
+        c_outdent(4)
+
+
+def output_counter_report(set, counter, current_offset):
+    data_type = counter.get('data_type')
+    data_type_uc = data_type.upper()
+    c_type = data_type
+
+    if "uint" in c_type:
+        c_type = c_type + "_t"
+
+    semantic_type = counter.get('semantic_type')
+    if semantic_type in semantic_type_map:
+        semantic_type = semantic_type_map[semantic_type]
+
+    semantic_type_uc = semantic_type.upper()
+
+    c("\n")
+
+    availability = counter.get('availability')
+    if availability:
+        output_availability(set, availability, counter.get('name'))
+        c_indent(3)
+
+    c("counter = &query->counters[query->n_counters++];\n")
+    c("counter->oa_counter_read_" + data_type + " = " + set.read_funcs[counter.get('symbol_name')] + ";\n")
+    c("counter->name = \"" + counter.get('name') + "\";\n")
+    c("counter->desc = \"" + counter.get('description') + "\";\n")
+    c("counter->type = GEN_PERF_COUNTER_TYPE_" + semantic_type_uc + ";\n")
+    c("counter->data_type = GEN_PERF_COUNTER_DATA_TYPE_" + data_type_uc + ";\n")
+    c("counter->raw_max = " + set.max_values[counter.get('symbol_name')] + ";\n")
+
+    current_offset = pot_align(current_offset, sizeof(c_type))
+    c("counter->offset = " + str(current_offset) + ";\n")
+    c("counter->size = sizeof(" + c_type + ");\n")
+
+    if availability:
+        c_outdent(3);
+        c("}")
+
+    return current_offset + sizeof(c_type)
+
+
+register_types = {
+    'FLEX': 'flex_regs',
+    'NOA': 'mux_regs',
+    'OA': 'b_counter_regs',
+}
+
+def compute_register_lengths(set):
+    register_lengths = {}
+    register_configs = set.findall('register_config')
+    for register_config in register_configs:
+        t = register_types[register_config.get('type')]
+        if t not in register_lengths:
+            register_lengths[t] = len(register_config.findall('register'))
+        else:
+            register_lengths[t] += len(register_config.findall('register'))
+
+    return register_lengths
+
+
+def generate_register_configs(set):
+    register_configs = set.findall('register_config')
+    for register_config in register_configs:
+        t = register_types[register_config.get('type')]
+
+        availability = register_config.get('availability')
+        if availability:
+            output_availability(set, availability, register_config.get('type') + ' register config')
+            c_indent(3)
+
+        for register in register_config.findall('register'):
+            c("query->%s[query->n_%s++] = (struct gen_perf_query_register_prog) { .reg = %s, .val = %s };" %
+              (t, t, register.get('address'), register.get('value')))
+
+        if availability:
+            c_outdent(3)
+            c("}")
+        c("\n")
+
+
+# Wraps a <counter> element from the oa-*.xml files.
+class Counter:
+    def __init__(self, set, xml):
+        self.xml = xml
+        self.set = set
+        self.read_hash = None
+        self.max_hash = None
+
+        self.read_sym = "{0}__{1}__{2}__read".format(self.set.gen.chipset,
+                                                     self.set.underscore_name,
+                                                     self.xml.get('underscore_name'))
+
+    def get(self, prop):
+        return self.xml.get(prop)
+
+    # Compute the hash of a counter's equation by expanding (including all the
+    # sub-equations it depends on)
+    def compute_hashes(self):
+        if self.read_hash is not None:
+            return
+
+        def replace_token(token):
+            if token[0] != "$":
+                return token
+            if token not in self.set.counter_vars:
+                return token
+            self.set.counter_vars[token].compute_hashes()
+            return self.set.counter_vars[token].read_hash
+
+        read_eq = self.xml.get('equation')
+        self.read_hash = ' '.join(map(replace_token, read_eq.split()))
+
+        max_eq = self.xml.get('max_equation')
+        if max_eq:
+            self.max_hash = ' '.join(map(replace_token, max_eq.split()))
+
+    def has_max_func(self):
+        max_eq = self.xml.get('max_equation')
+        if not max_eq:
+            return False
+
+        try:
+            val = float(max_eq)
+            return False
+        except ValueError:
+            pass
+
+        for token in max_eq.split():
+            if token[0] == '$' and token not in hw_vars:
+                return False
+        return True
+
+    def max_sym(self):
+        assert self.has_max_func()
+        return "{0}__{1}__{2}__max".format(self.set.gen.chipset,
+                                           self.set.underscore_name,
+                                           self.xml.get('underscore_name'))
+
+    def max_value(self):
+        max_eq = self.xml.get('max_equation')
+        if not max_eq:
+            return "0 /* undefined */"
+
+        try:
+            return "{0}".format(float(max_eq))
+        except ValueError:
+            pass
+
+        for token in max_eq.split():
+            if token[0] == '$' and token not in hw_vars:
+                return "0 /* unsupported (varies over time) */"
+
+        return "{0}__{1}__{2}__max(perf)".format(self.set.gen.chipset,
+                                                 self.set.underscore_name,
+                                                 self.xml.get('underscore_name'))
+
+# Wraps a <set> element from the oa-*.xml files.
+class Set:
+    def __init__(self, gen, xml):
+        self.gen = gen
+        self.xml = xml
+
+        self.counter_vars = {}
+        self.max_values = {}
+        self.read_funcs = {}
+
+        xml_counters = self.xml.findall("counter")
+        self.counters = []
+        for xml_counter in xml_counters:
+            counter = Counter(self, xml_counter)
+            self.counters.append(counter)
+            self.counter_vars["$" + counter.get('symbol_name')] = counter
+            self.read_funcs[counter.get('symbol_name')] = counter.read_sym
+            self.max_values[counter.get('symbol_name')] = counter.max_value()
+
+        for counter in self.counters:
+            counter.compute_hashes()
+
+    @property
+    def hw_config_guid(self):
+        return self.xml.get('hw_config_guid')
+
+    @property
+    def name(self):
+        return self.xml.get('name')
+
+    @property
+    def symbol_name(self):
+        return self.xml.get('symbol_name')
+
+    @property
+    def underscore_name(self):
+        return self.xml.get('underscore_name')
+
+    def findall(self, path):
+        return self.xml.findall(path)
+
+    def find(self, path):
+        return self.xml.find(path)
+
+
+# Wraps an entire oa-*.xml file.
+class Gen:
+    def __init__(self, filename):
+        self.filename = filename
+        self.xml = et.parse(self.filename)
+        self.chipset = self.xml.find('.//set').get('chipset').lower()
+        self.sets = []
+
+        for xml_set in self.xml.findall(".//set"):
+            self.sets.append(Set(self, xml_set))
+
+
+def main():
+    global c_file
+    global header_file
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument("--header", help="Header file to write", required=True)
+    parser.add_argument("--code", help="C file to write", required=True)
+    parser.add_argument("xml_files", nargs='+', help="List of xml metrics files to process")
+
+    args = parser.parse_args()
+
+    c_file = open(args.code, 'w')
+    header_file = open(args.header, 'w')
+
+    gens = []
+    for xml_file in args.xml_files:
+        gens.append(Gen(xml_file))
+
+
+    copyright = textwrap.dedent("""\
+        /* Autogenerated file, DO NOT EDIT manually! generated by {}
+         *
+         * Copyright (c) 2015 Intel Corporation
+         *
+         * 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.
+         */
+
+        """).format(os.path.basename(__file__))
+
+    h(copyright)
+    h(textwrap.dedent("""\
+        #pragma once
+
+        struct gen_perf;
+
+        """))
+
+    c(copyright)
+    c(textwrap.dedent("""\
+        #include <stdint.h>
+        #include <stdbool.h>
+
+        #include <drm-uapi/i915_drm.h>
+
+        #include "util/hash_table.h"
+
+        """))
+
+    c("#include \"" + os.path.basename(args.header) + "\"")
+
+    c(textwrap.dedent("""\
+        #include "perf/gen_perf.h"
+
+
+        #define MIN(a, b) ((a < b) ? (a) : (b))
+        #define MAX(a, b) ((a > b) ? (a) : (b))
+
+
+        """))
+
+    # Print out all equation functions.
+    for gen in gens:
+        for set in gen.sets:
+            for counter in set.counters:
+                output_counter_read(gen, set, counter)
+                output_counter_max(gen, set, counter)
+
+    # Print out all metric sets registration functions for each set in each
+    # generation.
+    for gen in gens:
+        for set in gen.sets:
+            counters = set.counters
+
+            c("\n")
+            register_lengths = compute_register_lengths(set);
+            for reg_type, reg_length in register_lengths.items():
+                c("static struct gen_perf_query_register_prog {0}_{1}_{2}[{3}];".format(gen.chipset,
+                                                                                        set.underscore_name,
+                                                                                        reg_type, reg_length))
+
+            c("\nstatic struct gen_perf_query_counter {0}_{1}_query_counters[{2}];\n".format(gen.chipset, set.underscore_name, len(counters)))
+            c("static struct gen_perf_query_info " + gen.chipset + "_" + set.underscore_name + "_query = {\n")
+            c_indent(3)
+
+            c(".kind = GEN_PERF_QUERY_TYPE_OA,\n")
+            c(".name = \"" + set.name + "\",\n")
+            c(".guid = \"" + set.hw_config_guid + "\",\n")
+
+            c(".counters = {0}_{1}_query_counters,".format(gen.chipset, set.underscore_name))
+            c(".n_counters = 0,")
+            c(".oa_metrics_set_id = 0, /* determined at runtime, via sysfs */")
+
+            if gen.chipset == "hsw":
+                c(textwrap.dedent("""\
+                    .oa_format = I915_OA_FORMAT_A45_B8_C8,
+
+                    /* Accumulation buffer offsets... */
+                    .gpu_time_offset = 0,
+                    .a_offset = 1,
+                    .b_offset = 46,
+                    .c_offset = 54,
+                """))
+            else:
+                c(textwrap.dedent("""\
+                    .oa_format = I915_OA_FORMAT_A32u40_A4u32_B8_C8,
+
+                    /* Accumulation buffer offsets... */
+                    .gpu_time_offset = 0,
+                    .gpu_clock_offset = 1,
+                    .a_offset = 2,
+                    .b_offset = 38,
+                    .c_offset = 46,
+                """))
+
+            for reg_type, reg_length in register_lengths.items():
+                c(".{0} = {1}_{2}_{3},".format(reg_type, gen.chipset, set.underscore_name, reg_type))
+                c(".n_{0} = 0, /* Determined at runtime */".format(reg_type))
+
+            c_outdent(3)
+            c("};\n")
+
+            c("\nstatic void\n")
+            c("{0}_register_{1}_counter_query(struct gen_perf *perf)\n".format(gen.chipset, set.underscore_name))
+            c("{\n")
+            c_indent(3)
+
+            c("static struct gen_perf_query_info *query = &" + gen.chipset + "_" + set.underscore_name + "_query;\n")
+            c("struct gen_perf_query_counter *counter;\n")
+
+            c("\n")
+            c("/* Note: we're assuming there can't be any variation in the definition ")
+            c(" * of a query between contexts so it's ok to describe a query within a ")
+            c(" * global variable which only needs to be initialized once... */")
+            c("\nif (!query->data_size) {")
+            c_indent(3)
+
+            generate_register_configs(set)
+
+            offset = 0
+            for counter in counters:
+                offset = output_counter_report(set, counter, offset)
+
+
+            c("\nquery->data_size = counter->offset + counter->size;\n")
+
+            c_outdent(3)
+            c("}");
+
+            c("\n_mesa_hash_table_insert(perf->oa_metrics_table, query->guid, query);")
+
+            c_outdent(3)
+            c("}\n")
+
+        h("void gen_oa_register_queries_" + gen.chipset + "(struct gen_perf *perf);\n")
+
+        c("\nvoid")
+        c("gen_oa_register_queries_" + gen.chipset + "(struct gen_perf *perf)")
+        c("{")
+        c_indent(3)
+
+        for set in gen.sets:
+            c("{0}_register_{1}_counter_query(perf);".format(gen.chipset, set.underscore_name))
+
+        c_outdent(3)
+        c("}")
+
+
+if __name__ == '__main__':
+    main()
diff --git a/src/intel/perf/meson.build b/src/intel/perf/meson.build
new file mode 100644 (file)
index 0000000..3620f68
--- /dev/null
@@ -0,0 +1,40 @@
+gen_hw_metrics = [
+  'hsw',
+  'bdw', 'chv',
+  'sklgt2', 'sklgt3', 'sklgt4',
+  'kblgt2', 'kblgt3',
+  'cflgt2', 'cflgt3',
+  'bxt', 'glk',
+  'cnl',
+  'icl',
+]
+
+gen_hw_metrics_xml_files = []
+foreach hw : gen_hw_metrics
+  gen_hw_metrics_xml_files += 'oa-@0@.xml'.format(hw)
+endforeach
+
+gen_perf_sources = [
+  'gen_perf.c'
+]
+
+gen_perf_sources += custom_target(
+  'intel-perf-sources',
+  input : gen_hw_metrics_xml_files,
+  output : [ 'gen_perf_metrics.c', 'gen_perf_metrics.h' ],
+  command : [
+    prog_python, files('gen_perf.py'),
+    '--code', '@OUTPUT0@', '--header', '@OUTPUT1@',
+    '@INPUT@',
+  ],
+)
+
+libintel_perf = static_library(
+  'intel_perf',
+  gen_perf_sources,
+  include_directories : [
+    inc_common, inc_intel, inc_util,
+  ],
+  c_args : [c_vis_args, no_override_init_args, '-msse2'],
+  cpp_args : [cpp_vis_args, '-msse2'],
+)
diff --git a/src/intel/perf/oa-bdw.xml b/src/intel/perf/oa-bdw.xml
new file mode 100644 (file)
index 0000000..714a1f0
--- /dev/null
@@ -0,0 +1,15493 @@
+<?xml version="1.0"?>
+<metrics version="1525360313" merge_md5="">
+  <set name="Render Metrics Basic Gen8"
+       mdapi_supported_apis="OGL OCL IO BB"
+       underscore_name="render_basic"
+       hw_config_guid="b541bd57-0e0f-4154-b4c0-5858010a2bf7"
+       chipset="BDW"
+       symbol_name="RenderBasic"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Misses"
+             description="The total number of L3 misses."
+             data_type="uint64"
+             equation="C 4 READ"
+             underscore_name="l3_misses"
+             units="messages"
+             symbol_name="L3Misses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/TAG"
+             />
+    <counter name="GTI L3 Throughput"
+             description="The total number of GPU memory bytes transferred between L3 caches and GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="$L3Misses 64 UMUL"
+             underscore_name="gti_l3_throughput"
+             units="bytes"
+             symbol_name="GtiL3Throughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="GTI/L3"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Both FPU Pipes Active"
+             description="The percentage of time in which both EU FPU pipelines were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 9 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_fpu_both_active"
+             units="percent"
+             symbol_name="EuFpuBothActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Cache Misses"
+             description="The total number of sampler cache misses in all LODs in all sampler units."
+             data_type="uint64"
+             equation="B 4 READ B 5 READ UADD 8 UMUL"
+             underscore_name="sampler_l1_misses"
+             units="messages"
+             symbol_name="SamplerL1Misses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="VS Send Pipe Active"
+             description="The percentage of time in which EU send pipeline was actively processing a vertex shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 12 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="vs_send_active"
+             units="percent"
+             symbol_name="VsSendActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Vertex Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler 1 Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which Sampler 1 has been slowing down the pipe when processing EU requests."
+             data_type="float"
+             high_watermark="15"
+             equation="B 3 READ 100 UMUL $GpuCoreClocks FDIV"
+             max_equation="100"
+             underscore_name="sampler1_bottleneck"
+             units="percent"
+             symbol_name="Sampler1Bottleneck"
+             availability="$SubsliceMask 0x12 AND"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="subslice"
+             />
+    <counter name="VS FPU1 Pipe Active"
+             description="The percentage of time in which EU FPU1 pipeline was actively processing a vertex shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 11 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="vs_fpu1_active"
+             units="percent"
+             symbol_name="VsFpu1Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Vertex Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GS Threads Dispatched"
+             description="The total number of geometry shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 5 READ"
+             underscore_name="gs_threads"
+             units="threads"
+             symbol_name="GsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Geometry Shader"
+             />
+    <counter name="L3 Sampler Throughput"
+             description="The total number of GPU memory bytes transferred between samplers and L3 caches."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="$SamplerL1Misses 64 UMUL"
+             underscore_name="l3_sampler_throughput"
+             units="bytes"
+             symbol_name="L3SamplerThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Sampler"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Early Hi-Depth Test Fails"
+             description="The total number of pixels dropped on early hierarchical depth test."
+             data_type="uint64"
+             equation="A 22 READ 4 UMUL"
+             underscore_name="hi_depth_test_fails"
+             units="pixels"
+             symbol_name="HiDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             />
+    <counter name="FS Both FPU Active"
+             description="The percentage of time in which fragment shaders were processed actively on the both FPUs."
+             data_type="float"
+             max_equation="100"
+             equation="A 18 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ps_eu_both_fpu_active"
+             units="percent"
+             symbol_name="PsEuBothFpuActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Frame Batch Draw"
+             mdapi_group="3D Pipe/Fragment Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="VS Threads Dispatched"
+             description="The total number of vertex shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 1 READ"
+             underscore_name="vs_threads"
+             units="threads"
+             symbol_name="VsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Vertex Shader"
+             />
+    <counter name="FS Threads Dispatched"
+             description="The total number of fragment shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 6 READ"
+             underscore_name="ps_threads"
+             units="threads"
+             symbol_name="PsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Fragment Shader"
+             />
+    <counter name="Sampler 0 Busy"
+             description="The percentage of time in which Sampler 0 has been processing EU requests."
+             data_type="float"
+             max_equation="100"
+             equation="B 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="sampler0_busy"
+             units="percent"
+             symbol_name="Sampler0Busy"
+             availability="$SubsliceMask 0x09 AND"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="subslice"
+             />
+    <counter name="Sampler 1 Busy"
+             description="The percentage of time in which Sampler 1 has been processing EU requests."
+             data_type="float"
+             max_equation="100"
+             equation="B 1 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="sampler1_busy"
+             units="percent"
+             symbol_name="Sampler1Busy"
+             availability="$SubsliceMask 0x12 AND"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="subslice"
+             />
+    <counter name="Samplers Busy"
+             description="The percentage of time in which samplers have been processing EU requests."
+             data_type="float"
+             max_equation="100"
+             equation="$Sampler0Busy $Sampler1Busy FMAX"
+             underscore_name="samplers_busy"
+             units="percent"
+             symbol_name="SamplersBusy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="slice"
+             />
+    <counter name="GTI Fixed Pipe Throughput"
+             description="The total number of GPU memory bytes transferred between 3D Pipeline (Command Dispatch, Input Assembly and Stream Output) and GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL"
+             equation="B 6 READ B 7 READ UADD 64 UMUL"
+             underscore_name="gti_vf_throughput"
+             units="bytes"
+             symbol_name="GtiVfThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="GTI/3D Pipe"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="Sampler 0 Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which Sampler 0 has been slowing down the pipe when processing EU requests."
+             data_type="float"
+             high_watermark="15"
+             equation="B 2 READ 100 UMUL $GpuCoreClocks FDIV"
+             max_equation="100"
+             underscore_name="sampler0_bottleneck"
+             units="percent"
+             symbol_name="Sampler0Bottleneck"
+             availability="$SubsliceMask 0x09 AND"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="subslice"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="Pixels Failing Tests"
+             description="The total number of pixels dropped on post-FS alpha, stencil, or depth tests."
+             data_type="uint64"
+             equation="A 25 READ 4 UMUL"
+             underscore_name="pixels_failing_post_ps_tests"
+             units="pixels"
+             symbol_name="PixelsFailingPostPsTests"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="L3 Lookup Accesses w/o IC"
+             description="The total number of L3 cache lookup accesses w/o IC."
+             data_type="uint64"
+             equation="$SamplerL1Misses $ShaderMemoryAccesses UADD"
+             underscore_name="l3_lookups"
+             units="messages"
+             symbol_name="L3Lookups"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/TAG"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GTI Read Throughput"
+             description="The total number of GPU memory bytes read from GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL"
+             equation="C 6 READ 64 UMUL"
+             underscore_name="gti_read_throughput"
+             units="bytes"
+             symbol_name="GtiReadThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GTI"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="PS FPU1 Pipe Active"
+             description="The percentage of time in which EU FPU1 pipeline was actively processing a pixel shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 16 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ps_fpu1_active"
+             units="percent"
+             symbol_name="PsFpu1Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pixel Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="PS Send Pipeline Active"
+             description="The percentage of time in which EU send pipeline was actively processing a pixel shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 17 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ps_send_active"
+             units="percent"
+             symbol_name="PsSendActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pixel Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Rasterized Pixels"
+             description="The total number of rasterized pixels."
+             data_type="uint64"
+             equation="A 21 READ 4 UMUL"
+             underscore_name="rasterized_pixels"
+             units="pixels"
+             symbol_name="RasterizedPixels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer"
+             />
+    <counter name="GPU Busy"
+             description="The percentage of time in which the GPU has been processing GPU commands."
+             data_type="float"
+             max_equation="100"
+             equation="A 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gpu_busy"
+             units="percent"
+             symbol_name="GpuBusy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GTI Depth Throughput"
+             description="The total number of GPU memory bytes transferred between depth caches and GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="C 0 READ C 1 READ UADD 64 UMUL"
+             underscore_name="gti_depth_throughput"
+             units="bytes"
+             symbol_name="GtiDepthThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="GTI/Depth Cache"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="VS FPU0 Pipe Active"
+             description="The percentage of time in which EU FPU0 pipeline was actively processing a vertex shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 10 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="vs_fpu0_active"
+             units="percent"
+             symbol_name="VsFpu0Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Vertex Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="PS FPU0 Pipe Active"
+             description="The percentage of time in which EU FPU0 pipeline was actively processing a pixel shader instruction."
+             data_type="float"
+             max_equation="100"
+             equation="A 15 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ps_fpu0_active"
+             units="percent"
+             symbol_name="PsFpu0Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pixel Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="DS Threads Dispatched"
+             description="The total number of domain shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 3 READ"
+             underscore_name="ds_threads"
+             units="threads"
+             symbol_name="DsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Domain Shader"
+             />
+    <counter name="Samples Written"
+             description="The total number of samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 26 READ 4 UMUL"
+             underscore_name="samples_written"
+             units="pixels"
+             symbol_name="SamplesWritten"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Blended"
+             description="The total number of blended samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 27 READ 4 UMUL"
+             underscore_name="samples_blended"
+             units="pixels"
+             symbol_name="SamplesBlended"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Early Depth Test Fails"
+             description="The total number of pixels dropped on early depth test."
+             data_type="uint64"
+             equation="A 23 READ 4 UMUL"
+             underscore_name="early_depth_test_fails"
+             units="pixels"
+             symbol_name="EarlyDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             />
+    <counter name="Samplers Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which samplers have been slowing down the pipe when processing EU requests."
+             data_type="float"
+             high_watermark="15"
+             equation="$Sampler0Bottleneck $Sampler1Bottleneck FMAX"
+             max_equation="100"
+             underscore_name="sampler_bottleneck"
+             units="percent"
+             symbol_name="SamplerBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Indicate System Frame Batch Draw"
+             mdapi_group="Sampler"
+             mdapi_hw_unit_type="slice"
+             />
+    <counter name="GTI HDC TLB Lookup Throughput"
+             description="The total number of GPU memory bytes transferred between GTI and HDC, when HDC is doing TLB lookups."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="C 5 READ 64 UMUL"
+             underscore_name="gti_hdc_lookups_throughput"
+             units="bytes"
+             symbol_name="GtiHdcLookupsThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="GTI/L3"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GTI RCC Throughput"
+             description="The total number of GPU memory bytes transferred between render color caches and GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="C 2 READ C 3 READ UADD 64 UMUL"
+             underscore_name="gti_rcc_throughput"
+             units="bytes"
+             symbol_name="GtiRccThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="GTI/Color Cache"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="HS Threads Dispatched"
+             description="The total number of hull shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 2 READ"
+             underscore_name="hs_threads"
+             units="threads"
+             symbol_name="HsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Hull Shader"
+             />
+    <counter name="GTI Write Throughput"
+             description="The total number of GPU memory bytes written to GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 32 UMUL"
+             equation="C 7 READ 64 UMUL"
+             underscore_name="gti_write_throughput"
+             units="bytes"
+             symbol_name="GtiWriteThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GTI"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Killed in FS"
+             description="The total number of samples or pixels dropped in fragment shaders."
+             data_type="uint64"
+             equation="A 24 READ 4 UMUL"
+             underscore_name="samples_killed_in_ps"
+             units="pixels"
+             symbol_name="SamplesKilledInPs"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Fragment Shader"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <register_config type="NOA"
+                     availability="$SliceMask 0x01 AND"
+                     priority="0"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x143F000F" />
+        <register type="NOA" address="0x00009888" value="0x14110014" />
+        <register type="NOA" address="0x00009888" value="0x14310014" />
+        <register type="NOA" address="0x00009888" value="0x14BF000F" />
+        <register type="NOA" address="0x00009888" value="0x118A0317" />
+        <register type="NOA" address="0x00009888" value="0x13837BE0" />
+        <register type="NOA" address="0x00009888" value="0x3B800060" />
+        <register type="NOA" address="0x00009888" value="0x3D800005" />
+        <register type="NOA" address="0x00009888" value="0x005C4000" />
+        <register type="NOA" address="0x00009888" value="0x065C8000" />
+        <register type="NOA" address="0x00009888" value="0x085CC000" />
+        <register type="NOA" address="0x00009888" value="0x003D8000" />
+        <register type="NOA" address="0x00009888" value="0x183D0800" />
+        <register type="NOA" address="0x00009888" value="0x0A3F0023" />
+        <register type="NOA" address="0x00009888" value="0x103F0000" />
+        <register type="NOA" address="0x00009888" value="0x00584000" />
+        <register type="NOA" address="0x00009888" value="0x08584000" />
+        <register type="NOA" address="0x00009888" value="0x0A5A4000" />
+        <register type="NOA" address="0x00009888" value="0x005B4000" />
+        <register type="NOA" address="0x00009888" value="0x0E5B8000" />
+        <register type="NOA" address="0x00009888" value="0x185B2400" />
+        <register type="NOA" address="0x00009888" value="0x0A1D4000" />
+        <register type="NOA" address="0x00009888" value="0x0C1F0800" />
+        <register type="NOA" address="0x00009888" value="0x0E1FAA00" />
+        <register type="NOA" address="0x00009888" value="0x00384000" />
+        <register type="NOA" address="0x00009888" value="0x0E384000" />
+        <register type="NOA" address="0x00009888" value="0x16384000" />
+        <register type="NOA" address="0x00009888" value="0x18380001" />
+        <register type="NOA" address="0x00009888" value="0x00392000" />
+        <register type="NOA" address="0x00009888" value="0x06398000" />
+        <register type="NOA" address="0x00009888" value="0x0839A000" />
+        <register type="NOA" address="0x00009888" value="0x0A391000" />
+        <register type="NOA" address="0x00009888" value="0x00104000" />
+        <register type="NOA" address="0x00009888" value="0x08104000" />
+        <register type="NOA" address="0x00009888" value="0x00110030" />
+        <register type="NOA" address="0x00009888" value="0x08110031" />
+        <register type="NOA" address="0x00009888" value="0x10110000" />
+        <register type="NOA" address="0x00009888" value="0x00134000" />
+        <register type="NOA" address="0x00009888" value="0x16130020" />
+        <register type="NOA" address="0x00009888" value="0x06308000" />
+        <register type="NOA" address="0x00009888" value="0x08308000" />
+        <register type="NOA" address="0x00009888" value="0x06311800" />
+        <register type="NOA" address="0x00009888" value="0x08311880" />
+        <register type="NOA" address="0x00009888" value="0x10310000" />
+        <register type="NOA" address="0x00009888" value="0x0E334000" />
+        <register type="NOA" address="0x00009888" value="0x16330080" />
+        <register type="NOA" address="0x00009888" value="0x0ABF1180" />
+        <register type="NOA" address="0x00009888" value="0x10BF0000" />
+        <register type="NOA" address="0x00009888" value="0x0ADA8000" />
+        <register type="NOA" address="0x00009888" value="0x0A9D8000" />
+        <register type="NOA" address="0x00009888" value="0x109F0002" />
+        <register type="NOA" address="0x00009888" value="0x0AB94000" />
+        <register type="NOA" address="0x00009888" value="0x0D888000" />
+        <register type="NOA" address="0x00009888" value="0x038A0380" />
+        <register type="NOA" address="0x00009888" value="0x058A000E" />
+        <register type="NOA" address="0x00009888" value="0x018A8000" />
+        <register type="NOA" address="0x00009888" value="0x0F8A8000" />
+        <register type="NOA" address="0x00009888" value="0x198A8000" />
+        <register type="NOA" address="0x00009888" value="0x1B8A00A0" />
+        <register type="NOA" address="0x00009888" value="0x078A0000" />
+        <register type="NOA" address="0x00009888" value="0x098A0000" />
+        <register type="NOA" address="0x00009888" value="0x238B2820" />
+        <register type="NOA" address="0x00009888" value="0x258B2550" />
+        <register type="NOA" address="0x00009888" value="0x198C1000" />
+        <register type="NOA" address="0x00009888" value="0x0B8D8000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA0" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x0D831021" />
+        <register type="NOA" address="0x00009888" value="0x0F83572F" />
+        <register type="NOA" address="0x00009888" value="0x01835680" />
+        <register type="NOA" address="0x00009888" value="0x0383002C" />
+        <register type="NOA" address="0x00009888" value="0x11830000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830001" />
+        <register type="NOA" address="0x00009888" value="0x05830000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x05844000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C137" />
+        <register type="NOA" address="0x00009888" value="0x1D80C147" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x15804000" />
+        <register type="NOA" address="0x00009888" value="0x4D801110" />
+        <register type="NOA" address="0x00009888" value="0x4F800331" />
+        <register type="NOA" address="0x00009888" value="0x43800802" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45801465" />
+        <register type="NOA" address="0x00009888" value="0x53801111" />
+        <register type="NOA" address="0x00009888" value="0x478014A5" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800CA5" />
+        <register type="NOA" address="0x00009888" value="0x41800003" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SliceMask 0x02 AND"
+                     priority="1"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x143F000F" />
+        <register type="NOA" address="0x00009888" value="0x14BF000F" />
+        <register type="NOA" address="0x00009888" value="0x14910014" />
+        <register type="NOA" address="0x00009888" value="0x14B10014" />
+        <register type="NOA" address="0x00009888" value="0x118A0317" />
+        <register type="NOA" address="0x00009888" value="0x13837BE0" />
+        <register type="NOA" address="0x00009888" value="0x3B800060" />
+        <register type="NOA" address="0x00009888" value="0x3D800005" />
+        <register type="NOA" address="0x00009888" value="0x0A3F0023" />
+        <register type="NOA" address="0x00009888" value="0x103F0000" />
+        <register type="NOA" address="0x00009888" value="0x0A5A4000" />
+        <register type="NOA" address="0x00009888" value="0x0A1D4000" />
+        <register type="NOA" address="0x00009888" value="0x0E1F8000" />
+        <register type="NOA" address="0x00009888" value="0x0A391000" />
+        <register type="NOA" address="0x00009888" value="0x00DC4000" />
+        <register type="NOA" address="0x00009888" value="0x06DC8000" />
+        <register type="NOA" address="0x00009888" value="0x08DCC000" />
+        <register type="NOA" address="0x00009888" value="0x00BD8000" />
+        <register type="NOA" address="0x00009888" value="0x18BD0800" />
+        <register type="NOA" address="0x00009888" value="0x0ABF1180" />
+        <register type="NOA" address="0x00009888" value="0x10BF0000" />
+        <register type="NOA" address="0x00009888" value="0x00D84000" />
+        <register type="NOA" address="0x00009888" value="0x08D84000" />
+        <register type="NOA" address="0x00009888" value="0x0ADA8000" />
+        <register type="NOA" address="0x00009888" value="0x00DB4000" />
+        <register type="NOA" address="0x00009888" value="0x0EDB8000" />
+        <register type="NOA" address="0x00009888" value="0x18DB2400" />
+        <register type="NOA" address="0x00009888" value="0x0A9D8000" />
+        <register type="NOA" address="0x00009888" value="0x0C9F0800" />
+        <register type="NOA" address="0x00009888" value="0x0E9F2A00" />
+        <register type="NOA" address="0x00009888" value="0x109F0002" />
+        <register type="NOA" address="0x00009888" value="0x00B84000" />
+        <register type="NOA" address="0x00009888" value="0x0EB84000" />
+        <register type="NOA" address="0x00009888" value="0x16B84000" />
+        <register type="NOA" address="0x00009888" value="0x18B80001" />
+        <register type="NOA" address="0x00009888" value="0x00B92000" />
+        <register type="NOA" address="0x00009888" value="0x06B98000" />
+        <register type="NOA" address="0x00009888" value="0x08B9A000" />
+        <register type="NOA" address="0x00009888" value="0x0AB94000" />
+        <register type="NOA" address="0x00009888" value="0x00904000" />
+        <register type="NOA" address="0x00009888" value="0x08904000" />
+        <register type="NOA" address="0x00009888" value="0x00910030" />
+        <register type="NOA" address="0x00009888" value="0x08910031" />
+        <register type="NOA" address="0x00009888" value="0x10910000" />
+        <register type="NOA" address="0x00009888" value="0x00934000" />
+        <register type="NOA" address="0x00009888" value="0x16930020" />
+        <register type="NOA" address="0x00009888" value="0x06B08000" />
+        <register type="NOA" address="0x00009888" value="0x08B08000" />
+        <register type="NOA" address="0x00009888" value="0x06B11800" />
+        <register type="NOA" address="0x00009888" value="0x08B11880" />
+        <register type="NOA" address="0x00009888" value="0x10B10000" />
+        <register type="NOA" address="0x00009888" value="0x0EB34000" />
+        <register type="NOA" address="0x00009888" value="0x16B30080" />
+        <register type="NOA" address="0x00009888" value="0x01888000" />
+        <register type="NOA" address="0x00009888" value="0x0D88B800" />
+        <register type="NOA" address="0x00009888" value="0x038A0380" />
+        <register type="NOA" address="0x00009888" value="0x058A000E" />
+        <register type="NOA" address="0x00009888" value="0x1B8A0080" />
+        <register type="NOA" address="0x00009888" value="0x078A0000" />
+        <register type="NOA" address="0x00009888" value="0x098A0000" />
+        <register type="NOA" address="0x00009888" value="0x238B2840" />
+        <register type="NOA" address="0x00009888" value="0x258B26A0" />
+        <register type="NOA" address="0x00009888" value="0x018C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8C4000" />
+        <register type="NOA" address="0x00009888" value="0x178C2000" />
+        <register type="NOA" address="0x00009888" value="0x198C1100" />
+        <register type="NOA" address="0x00009888" value="0x018D2000" />
+        <register type="NOA" address="0x00009888" value="0x078D8000" />
+        <register type="NOA" address="0x00009888" value="0x098DA000" />
+        <register type="NOA" address="0x00009888" value="0x0B8D8000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA0" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x0D831021" />
+        <register type="NOA" address="0x00009888" value="0x0F83572F" />
+        <register type="NOA" address="0x00009888" value="0x01835680" />
+        <register type="NOA" address="0x00009888" value="0x0383002C" />
+        <register type="NOA" address="0x00009888" value="0x11830000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830001" />
+        <register type="NOA" address="0x00009888" value="0x05830000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x05844000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C137" />
+        <register type="NOA" address="0x00009888" value="0x1D80C147" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x15804000" />
+        <register type="NOA" address="0x00009888" value="0x4D801550" />
+        <register type="NOA" address="0x00009888" value="0x4F800331" />
+        <register type="NOA" address="0x00009888" value="0x43800802" />
+        <register type="NOA" address="0x00009888" value="0x51800400" />
+        <register type="NOA" address="0x00009888" value="0x458004A1" />
+        <register type="NOA" address="0x00009888" value="0x53805555" />
+        <register type="NOA" address="0x00009888" value="0x47800421" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F801421" />
+        <register type="NOA" address="0x00009888" value="0x41800845" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0x00800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002724" value="0x00800000" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00010003" />
+        <register type="FLEX" address="0x0000E658" value="0x00012011" />
+        <register type="FLEX" address="0x0000E758" value="0x00015014" />
+        <register type="FLEX" address="0x0000E45C" value="0x00051050" />
+        <register type="FLEX" address="0x0000E55C" value="0x00053052" />
+        <register type="FLEX" address="0x0000E65C" value="0x00055054" />
+    </register_config>
+  </set>
+
+  <set name="Compute Metrics Basic Gen8"
+       mdapi_supported_apis="OGL4 OCL IO BB"
+       underscore_name="compute_basic"
+       hw_config_guid="35fbc9b2-a891-40a6-a38d-022bb7057552"
+       chipset="BDW"
+       symbol_name="ComputeBasic"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Untyped Bytes Read"
+             description="The total number of typed memory bytes read via Data Port."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="B 6 READ B 7 READ C 0 READ UADD UADD $EuSlicesTotalCount 64 UMUL UMUL"
+             underscore_name="untyped_bytes_read"
+             units="bytes"
+             symbol_name="UntypedBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Both FPU Pipes Active"
+             description="The percentage of time in which both EU FPU pipelines were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 9 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_fpu_both_active"
+             units="percent"
+             symbol_name="EuFpuBothActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Typed Bytes Written"
+             description="The total number of typed memory bytes written via Data Port."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="B 3 READ B 4 READ B 5 READ UADD UADD $EuSlicesTotalCount 64 UMUL UMUL"
+             underscore_name="typed_bytes_written"
+             units="bytes"
+             symbol_name="TypedBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU0 Pipe Active"
+             description="The percentage of time in which EU FPU0 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 10 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu0_active"
+             units="percent"
+             symbol_name="Fpu0Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU1 Pipe Active"
+             description="The percentage of time in which EU FPU1 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 11 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu1_active"
+             units="percent"
+             symbol_name="Fpu1Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU AVG IPC Rate"
+             description="The average rate of IPC calculated for 2 FPU pipelines."
+             data_type="float"
+             max_equation="2"
+             equation="A 9 READ  A 10 READ  A 11 READ UADD  A 9 READ USUB FDIV 1 FADD"
+             underscore_name="eu_avg_ipc_rate"
+             units="number"
+             symbol_name="EuAvgIpcRate"
+             semantic_type="ratio"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier4 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GS Threads Dispatched"
+             description="The total number of geometry shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 5 READ"
+             underscore_name="gs_threads"
+             units="threads"
+             symbol_name="GsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Geometry Shader"
+             />
+    <counter name="Early Hi-Depth Test Fails"
+             description="The total number of pixels dropped on early hierarchical depth test."
+             data_type="uint64"
+             equation="A 22 READ 4 UMUL"
+             underscore_name="hi_depth_test_fails"
+             units="pixels"
+             symbol_name="HiDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             />
+    <counter name="VS Threads Dispatched"
+             description="The total number of vertex shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 1 READ"
+             underscore_name="vs_threads"
+             units="threads"
+             symbol_name="VsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Vertex Shader"
+             />
+    <counter name="FS Threads Dispatched"
+             description="The total number of fragment shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 6 READ"
+             underscore_name="ps_threads"
+             units="threads"
+             symbol_name="PsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Fragment Shader"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="Pixels Failing Tests"
+             description="The total number of pixels dropped on post-FS alpha, stencil, or depth tests."
+             data_type="uint64"
+             equation="A 25 READ 4 UMUL"
+             underscore_name="pixels_failing_post_ps_tests"
+             units="pixels"
+             symbol_name="PixelsFailingPostPsTests"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GTI Read Throughput"
+             description="The total number of GPU memory bytes read from GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL"
+             equation="C 4 READ 64 UMUL"
+             underscore_name="gti_read_throughput"
+             units="bytes"
+             symbol_name="GtiReadThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GTI"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Untyped Writes"
+             description="The total number of untyped memory bytes written via Data Port."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="C 1 READ C 2 READ C 3 READ UADD UADD $EuSlicesTotalCount 64 UMUL UMUL"
+             underscore_name="untyped_bytes_written"
+             units="bytes"
+             symbol_name="UntypedBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GPU Busy"
+             description="The percentage of time in which the GPU has been processing GPU commands."
+             data_type="float"
+             max_equation="100"
+             equation="A 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gpu_busy"
+             units="percent"
+             symbol_name="GpuBusy"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Overview System Frame"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Rasterized Pixels"
+             description="The total number of rasterized pixels."
+             data_type="uint64"
+             equation="A 21 READ 4 UMUL"
+             underscore_name="rasterized_pixels"
+             units="pixels"
+             symbol_name="RasterizedPixels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer"
+             />
+    <counter name="Typed Bytes Read"
+             description="The total number of typed memory bytes read via Data Port."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="B 0 READ B 1 READ B 2 READ UADD UADD $EuSlicesTotalCount 64 UMUL UMUL"
+             underscore_name="typed_bytes_read"
+             units="bytes"
+             symbol_name="TypedBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="DS Threads Dispatched"
+             description="The total number of domain shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 3 READ"
+             underscore_name="ds_threads"
+             units="threads"
+             symbol_name="DsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Domain Shader"
+             />
+    <counter name="EU Thread Occupancy"
+             description="The percentage of time in which hardware threads occupied EUs."
+             data_type="float"
+             max_equation="100"
+             equation="A 13 READ 8 UMUL $EuCoresTotalCount UDIV $EuThreadsCount UDIV 100 UMUL  $GpuCoreClocks FDIV"
+             underscore_name="eu_thread_occupancy"
+             units="percent"
+             symbol_name="EuThreadOccupancy"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Blended"
+             description="The total number of blended samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 27 READ 4 UMUL"
+             underscore_name="samples_blended"
+             units="pixels"
+             symbol_name="SamplesBlended"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Early Depth Test Fails"
+             description="The total number of pixels dropped on early depth test."
+             data_type="uint64"
+             equation="A 23 READ 4 UMUL"
+             underscore_name="early_depth_test_fails"
+             units="pixels"
+             symbol_name="EarlyDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="HS Threads Dispatched"
+             description="The total number of hull shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 2 READ"
+             underscore_name="hs_threads"
+             units="threads"
+             symbol_name="HsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Hull Shader"
+             />
+    <counter name="GTI Write Throughput"
+             description="The total number of GPU memory bytes written to GTI."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 32 UMUL"
+             equation="C 5 READ 64 UMUL"
+             underscore_name="gti_write_throughput"
+             units="bytes"
+             symbol_name="GtiWriteThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GTI"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Killed in FS"
+             description="The total number of samples or pixels dropped in fragment shaders."
+             data_type="uint64"
+             equation="A 24 READ 4 UMUL"
+             underscore_name="samples_killed_in_ps"
+             units="pixels"
+             symbol_name="SamplesKilledInPs"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Fragment Shader"
+             />
+    <counter name="Samples Written"
+             description="The total number of samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 26 READ 4 UMUL"
+             underscore_name="samples_written"
+             units="pixels"
+             symbol_name="SamplesWritten"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <counter name="EU Send Pipe Active"
+             description="The percentage of time in which EU send pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 12 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_send_active"
+             units="percent"
+             symbol_name="EuSendActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <register_config type="NOA"
+                     availability="$SliceMask 0x01 AND"
+                     priority="0"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x105C00E0" />
+        <register type="NOA" address="0x00009888" value="0x105800E0" />
+        <register type="NOA" address="0x00009888" value="0x103800E0" />
+        <register type="NOA" address="0x00009888" value="0x3580001A" />
+        <register type="NOA" address="0x00009888" value="0x3B800060" />
+        <register type="NOA" address="0x00009888" value="0x3D800005" />
+        <register type="NOA" address="0x00009888" value="0x065C2100" />
+        <register type="NOA" address="0x00009888" value="0x0A5C0041" />
+        <register type="NOA" address="0x00009888" value="0x0C5C6600" />
+        <register type="NOA" address="0x00009888" value="0x005C6580" />
+        <register type="NOA" address="0x00009888" value="0x085C8000" />
+        <register type="NOA" address="0x00009888" value="0x0E5C8000" />
+        <register type="NOA" address="0x00009888" value="0x00580042" />
+        <register type="NOA" address="0x00009888" value="0x08582080" />
+        <register type="NOA" address="0x00009888" value="0x0C58004C" />
+        <register type="NOA" address="0x00009888" value="0x0E582580" />
+        <register type="NOA" address="0x00009888" value="0x005B4000" />
+        <register type="NOA" address="0x00009888" value="0x185B1000" />
+        <register type="NOA" address="0x00009888" value="0x1A5B0104" />
+        <register type="NOA" address="0x00009888" value="0x0C1FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E1FAA00" />
+        <register type="NOA" address="0x00009888" value="0x101F02AA" />
+        <register type="NOA" address="0x00009888" value="0x08380042" />
+        <register type="NOA" address="0x00009888" value="0x0A382080" />
+        <register type="NOA" address="0x00009888" value="0x0E38404C" />
+        <register type="NOA" address="0x00009888" value="0x0238404B" />
+        <register type="NOA" address="0x00009888" value="0x00384000" />
+        <register type="NOA" address="0x00009888" value="0x16380000" />
+        <register type="NOA" address="0x00009888" value="0x18381145" />
+        <register type="NOA" address="0x00009888" value="0x04380000" />
+        <register type="NOA" address="0x00009888" value="0x0039A000" />
+        <register type="NOA" address="0x00009888" value="0x06398000" />
+        <register type="NOA" address="0x00009888" value="0x0839A000" />
+        <register type="NOA" address="0x00009888" value="0x0A39A000" />
+        <register type="NOA" address="0x00009888" value="0x0C39A000" />
+        <register type="NOA" address="0x00009888" value="0x0E39A000" />
+        <register type="NOA" address="0x00009888" value="0x02392000" />
+        <register type="NOA" address="0x00009888" value="0x018A8000" />
+        <register type="NOA" address="0x00009888" value="0x0F8A8000" />
+        <register type="NOA" address="0x00009888" value="0x198A8000" />
+        <register type="NOA" address="0x00009888" value="0x1B8AAAA0" />
+        <register type="NOA" address="0x00009888" value="0x1D8A0002" />
+        <register type="NOA" address="0x00009888" value="0x038A8000" />
+        <register type="NOA" address="0x00009888" value="0x058A8000" />
+        <register type="NOA" address="0x00009888" value="0x238B02A0" />
+        <register type="NOA" address="0x00009888" value="0x258B5550" />
+        <register type="NOA" address="0x00009888" value="0x278B0015" />
+        <register type="NOA" address="0x00009888" value="0x1F850A80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA0" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x03844000" />
+        <register type="NOA" address="0x00009888" value="0x17808137" />
+        <register type="NOA" address="0x00009888" value="0x1980C147" />
+        <register type="NOA" address="0x00009888" value="0x1B80C0E5" />
+        <register type="NOA" address="0x00009888" value="0x1D80C0E3" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x13804000" />
+        <register type="NOA" address="0x00009888" value="0x15800000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D801000" />
+        <register type="NOA" address="0x00009888" value="0x4F800111" />
+        <register type="NOA" address="0x00009888" value="0x43800062" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800062" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800062" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F801062" />
+        <register type="NOA" address="0x00009888" value="0x41801084" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SliceMask 0x02 AND"
+                     priority="2"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x10DC00E0" />
+        <register type="NOA" address="0x00009888" value="0x10D800E0" />
+        <register type="NOA" address="0x00009888" value="0x10B800E0" />
+        <register type="NOA" address="0x00009888" value="0x3580001A" />
+        <register type="NOA" address="0x00009888" value="0x3B800060" />
+        <register type="NOA" address="0x00009888" value="0x3D800005" />
+        <register type="NOA" address="0x00009888" value="0x06DC2100" />
+        <register type="NOA" address="0x00009888" value="0x0ADC0041" />
+        <register type="NOA" address="0x00009888" value="0x0CDC6600" />
+        <register type="NOA" address="0x00009888" value="0x00DC6580" />
+        <register type="NOA" address="0x00009888" value="0x08DC8000" />
+        <register type="NOA" address="0x00009888" value="0x0EDC8000" />
+        <register type="NOA" address="0x00009888" value="0x00D80042" />
+        <register type="NOA" address="0x00009888" value="0x08D82080" />
+        <register type="NOA" address="0x00009888" value="0x0CD8004C" />
+        <register type="NOA" address="0x00009888" value="0x0ED82580" />
+        <register type="NOA" address="0x00009888" value="0x00DB4000" />
+        <register type="NOA" address="0x00009888" value="0x18DB1000" />
+        <register type="NOA" address="0x00009888" value="0x1ADB0104" />
+        <register type="NOA" address="0x00009888" value="0x0C9FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E9FAA00" />
+        <register type="NOA" address="0x00009888" value="0x109F02AA" />
+        <register type="NOA" address="0x00009888" value="0x08B80042" />
+        <register type="NOA" address="0x00009888" value="0x0AB82080" />
+        <register type="NOA" address="0x00009888" value="0x0EB8404C" />
+        <register type="NOA" address="0x00009888" value="0x02B8404B" />
+        <register type="NOA" address="0x00009888" value="0x00B84000" />
+        <register type="NOA" address="0x00009888" value="0x16B80000" />
+        <register type="NOA" address="0x00009888" value="0x18B81145" />
+        <register type="NOA" address="0x00009888" value="0x04B80000" />
+        <register type="NOA" address="0x00009888" value="0x00B9A000" />
+        <register type="NOA" address="0x00009888" value="0x06B98000" />
+        <register type="NOA" address="0x00009888" value="0x08B9A000" />
+        <register type="NOA" address="0x00009888" value="0x0AB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0CB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0EB9A000" />
+        <register type="NOA" address="0x00009888" value="0x02B92000" />
+        <register type="NOA" address="0x00009888" value="0x01888000" />
+        <register type="NOA" address="0x00009888" value="0x0D88F800" />
+        <register type="NOA" address="0x00009888" value="0x0F88000F" />
+        <register type="NOA" address="0x00009888" value="0x03888000" />
+        <register type="NOA" address="0x00009888" value="0x05888000" />
+        <register type="NOA" address="0x00009888" value="0x238B0540" />
+        <register type="NOA" address="0x00009888" value="0x258BAAA0" />
+        <register type="NOA" address="0x00009888" value="0x278B002A" />
+        <register type="NOA" address="0x00009888" value="0x018C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8C4000" />
+        <register type="NOA" address="0x00009888" value="0x178C2000" />
+        <register type="NOA" address="0x00009888" value="0x198C5500" />
+        <register type="NOA" address="0x00009888" value="0x1B8C0015" />
+        <register type="NOA" address="0x00009888" value="0x038C4000" />
+        <register type="NOA" address="0x00009888" value="0x058C4000" />
+        <register type="NOA" address="0x00009888" value="0x018DA000" />
+        <register type="NOA" address="0x00009888" value="0x078D8000" />
+        <register type="NOA" address="0x00009888" value="0x098DA000" />
+        <register type="NOA" address="0x00009888" value="0x0B8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0D8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0F8DA000" />
+        <register type="NOA" address="0x00009888" value="0x038D2000" />
+        <register type="NOA" address="0x00009888" value="0x1F850A80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA0" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x03844000" />
+        <register type="NOA" address="0x00009888" value="0x17808137" />
+        <register type="NOA" address="0x00009888" value="0x1980C147" />
+        <register type="NOA" address="0x00009888" value="0x1B80C0E5" />
+        <register type="NOA" address="0x00009888" value="0x1D80C0E3" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x13804000" />
+        <register type="NOA" address="0x00009888" value="0x15800000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D805000" />
+        <register type="NOA" address="0x00009888" value="0x4F800555" />
+        <register type="NOA" address="0x00009888" value="0x43800062" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800062" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800062" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800062" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0x00800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002724" value="0x00800000" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00000003" />
+        <register type="FLEX" address="0x0000E658" value="0x00002001" />
+        <register type="FLEX" address="0x0000E758" value="0x00778008" />
+        <register type="FLEX" address="0x0000E45C" value="0x00088078" />
+        <register type="FLEX" address="0x0000E55C" value="0x00808708" />
+        <register type="FLEX" address="0x0000E65C" value="0x00A08908" />
+    </register_config>
+  </set>
+
+  <set name="Render Metrics for 3D Pipeline Profile"
+       mdapi_supported_apis="OGL OCL IO BB"
+       underscore_name="render_pipe_profile"
+       hw_config_guid="233d0544-fff7-4281-8291-e02f222aff72"
+       chipset="BDW"
+       symbol_name="RenderPipeProfile"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="VS Bottleneck"
+             low_watermark="10"
+             description="The percentage of time in which vertex shader pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="30"
+             equation="B 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="vs_bottleneck"
+             units="percent"
+             symbol_name="VsBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Vertex Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Hi-Depth Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which early hierarchical depth test pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="C 6 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="hi_depth_bottleneck"
+             units="percent"
+             symbol_name="HiDepthBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GS Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which geometry shader pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="B 3 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gs_bottleneck"
+             units="percent"
+             symbol_name="GsBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Geometry Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GS Threads Dispatched"
+             description="The total number of geometry shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 5 READ"
+             underscore_name="gs_threads"
+             units="threads"
+             symbol_name="GsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Geometry Shader"
+             />
+    <counter name="Early Hi-Depth Test Fails"
+             description="The total number of pixels dropped on early hierarchical depth test."
+             data_type="uint64"
+             equation="A 22 READ 4 UMUL"
+             underscore_name="hi_depth_test_fails"
+             units="pixels"
+             symbol_name="HiDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             />
+    <counter name="VS Threads Dispatched"
+             description="The total number of vertex shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 1 READ"
+             underscore_name="vs_threads"
+             units="threads"
+             symbol_name="VsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Vertex Shader"
+             />
+    <counter name="FS Threads Dispatched"
+             description="The total number of fragment shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 6 READ"
+             underscore_name="ps_threads"
+             units="threads"
+             symbol_name="PsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Fragment Shader"
+             />
+    <counter name="BC Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which barycentric coordinates calculation pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="C 7 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="bc_bottleneck"
+             units="percent"
+             symbol_name="BcBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Rasterizer/Barycentric Calc"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="HS Stall"
+             description="The percentage of time in which hull stall pipeline stage was stalled."
+             data_type="float"
+             equation="C 1 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="hs_stall"
+             units="percent"
+             symbol_name="HsStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier4 Correlate Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Hull Shader"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="Pixels Failing Tests"
+             description="The total number of pixels dropped on post-FS alpha, stencil, or depth tests."
+             data_type="uint64"
+             equation="A 25 READ 4 UMUL"
+             underscore_name="pixels_failing_post_ps_tests"
+             units="pixels"
+             symbol_name="PixelsFailingPostPsTests"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="VF Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which vertex fetch pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="C 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="vf_bottleneck"
+             units="percent"
+             symbol_name="VfBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Input Assembler"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Strip-Fans Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which strip-fans pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="10"
+             equation="B 6 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="sf_bottleneck"
+             units="percent"
+             symbol_name="SfBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Rasterizer/Strip-Fans"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Accesses"
+             description="The total number of messages send to samplers."
+             data_type="uint64"
+             equation="A 28 READ"
+             underscore_name="sampler_accesses"
+             units="messages"
+             symbol_name="SamplerAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler"
+             />
+    <counter name="SF Stall"
+             description="The percentage of time in which strip-fans pipeline stage was stalled."
+             data_type="float"
+             equation="C 5 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="sf_stall"
+             units="percent"
+             symbol_name="SfStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Correlate Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Strip-Fans"
+             />
+    <counter name="GPU Busy"
+             description="The percentage of time in which the GPU has been processing GPU commands."
+             data_type="float"
+             max_equation="100"
+             equation="A 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gpu_busy"
+             units="percent"
+             symbol_name="GpuBusy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="HS Bottleneck"
+             low_watermark="3"
+             description="The percentage of time in which hull shader pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="9"
+             equation="B 1 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="hs_bottleneck"
+             units="percent"
+             symbol_name="HsBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Hull Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="CL Stall"
+             description="The percentage of time in which clipper pipeline stage was stalled."
+             data_type="float"
+             equation="C 4 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="cl_stall"
+             units="percent"
+             symbol_name="ClStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Correlate Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Clipper"
+             />
+    <counter name="SO Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which stream output pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="B 4 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="so_bottleneck"
+             units="percent"
+             symbol_name="SoBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Stream Output"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Rasterized Pixels"
+             description="The total number of rasterized pixels."
+             data_type="uint64"
+             equation="A 21 READ 4 UMUL"
+             underscore_name="rasterized_pixels"
+             units="pixels"
+             symbol_name="RasterizedPixels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer"
+             />
+    <counter name="DS Threads Dispatched"
+             description="The total number of domain shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 3 READ"
+             underscore_name="ds_threads"
+             units="threads"
+             symbol_name="DsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Domain Shader"
+             />
+    <counter name="Samples Written"
+             description="The total number of samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 26 READ 4 UMUL"
+             underscore_name="samples_written"
+             units="pixels"
+             symbol_name="SamplesWritten"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="DS Bottleneck"
+             low_watermark="5"
+             description="The percentage of time in which domain shader pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="15"
+             equation="B 2 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ds_bottleneck"
+             units="percent"
+             symbol_name="DsBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Domain Shader"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Clipper Bottleneck"
+             low_watermark="10"
+             description="The percentage of time in which clipper pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="30"
+             equation="B 5 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="cl_bottleneck"
+             units="percent"
+             symbol_name="ClBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Clipper"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="DS Stall"
+             description="The percentage of time in which domain shader pipeline stage was stalled."
+             data_type="float"
+             equation="C 2 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="ds_stall"
+             units="percent"
+             symbol_name="DsStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier4 Correlate Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Domain Shader"
+             />
+    <counter name="Early Depth Bottleneck"
+             low_watermark="10"
+             description="The percentage of time in which early depth test pipeline stage was slowing down the 3D pipeline."
+             data_type="float"
+             high_watermark="30"
+             equation="B 7 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="early_depth_bottleneck"
+             units="percent"
+             symbol_name="EarlyDepthBottleneck"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Indicate Draw"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Blended"
+             description="The total number of blended samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 27 READ 4 UMUL"
+             underscore_name="samples_blended"
+             units="pixels"
+             symbol_name="SamplesBlended"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Early Depth Test Fails"
+             description="The total number of pixels dropped on early depth test."
+             data_type="uint64"
+             equation="A 23 READ 4 UMUL"
+             underscore_name="early_depth_test_fails"
+             units="pixels"
+             symbol_name="EarlyDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="HS Threads Dispatched"
+             description="The total number of hull shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 2 READ"
+             underscore_name="hs_threads"
+             units="threads"
+             symbol_name="HsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Hull Shader"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Killed in FS"
+             description="The total number of samples or pixels dropped in fragment shaders."
+             data_type="uint64"
+             equation="A 24 READ 4 UMUL"
+             underscore_name="samples_killed_in_ps"
+             units="pixels"
+             symbol_name="SamplesKilledInPs"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Fragment Shader"
+             />
+    <counter name="SO Stall"
+             description="The percentage of time in which stream-output pipeline stage was stalled."
+             data_type="float"
+             equation="C 3 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="so_stall"
+             units="percent"
+             symbol_name="SoStall"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Correlate Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Stream Output"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <register_config type="NOA">
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x0A1E0000" />
+        <register type="NOA" address="0x00009888" value="0x0C1F000F" />
+        <register type="NOA" address="0x00009888" value="0x10176800" />
+        <register type="NOA" address="0x00009888" value="0x1191001F" />
+        <register type="NOA" address="0x00009888" value="0x0B880320" />
+        <register type="NOA" address="0x00009888" value="0x01890C40" />
+        <register type="NOA" address="0x00009888" value="0x118A1C00" />
+        <register type="NOA" address="0x00009888" value="0x118D7C00" />
+        <register type="NOA" address="0x00009888" value="0x118E0020" />
+        <register type="NOA" address="0x00009888" value="0x118F4C00" />
+        <register type="NOA" address="0x00009888" value="0x11900000" />
+        <register type="NOA" address="0x00009888" value="0x13900001" />
+        <register type="NOA" address="0x00009888" value="0x065C4000" />
+        <register type="NOA" address="0x00009888" value="0x0C3D8000" />
+        <register type="NOA" address="0x00009888" value="0x06584000" />
+        <register type="NOA" address="0x00009888" value="0x0C5B4000" />
+        <register type="NOA" address="0x00009888" value="0x081E0040" />
+        <register type="NOA" address="0x00009888" value="0x0E1E0000" />
+        <register type="NOA" address="0x00009888" value="0x021F5400" />
+        <register type="NOA" address="0x00009888" value="0x001F0000" />
+        <register type="NOA" address="0x00009888" value="0x101F0010" />
+        <register type="NOA" address="0x00009888" value="0x0E1F0080" />
+        <register type="NOA" address="0x00009888" value="0x0C384000" />
+        <register type="NOA" address="0x00009888" value="0x06392000" />
+        <register type="NOA" address="0x00009888" value="0x0C13C000" />
+        <register type="NOA" address="0x00009888" value="0x06164000" />
+        <register type="NOA" address="0x00009888" value="0x06170012" />
+        <register type="NOA" address="0x00009888" value="0x00170000" />
+        <register type="NOA" address="0x00009888" value="0x01910005" />
+        <register type="NOA" address="0x00009888" value="0x07880002" />
+        <register type="NOA" address="0x00009888" value="0x01880C00" />
+        <register type="NOA" address="0x00009888" value="0x0F880000" />
+        <register type="NOA" address="0x00009888" value="0x0D880000" />
+        <register type="NOA" address="0x00009888" value="0x05880000" />
+        <register type="NOA" address="0x00009888" value="0x09890032" />
+        <register type="NOA" address="0x00009888" value="0x078A0800" />
+        <register type="NOA" address="0x00009888" value="0x0F8A0A00" />
+        <register type="NOA" address="0x00009888" value="0x198A4000" />
+        <register type="NOA" address="0x00009888" value="0x1B8A2000" />
+        <register type="NOA" address="0x00009888" value="0x1D8A0000" />
+        <register type="NOA" address="0x00009888" value="0x038A4000" />
+        <register type="NOA" address="0x00009888" value="0x0B8A8000" />
+        <register type="NOA" address="0x00009888" value="0x0D8A8000" />
+        <register type="NOA" address="0x00009888" value="0x238B54C0" />
+        <register type="NOA" address="0x00009888" value="0x258BAA55" />
+        <register type="NOA" address="0x00009888" value="0x278B0019" />
+        <register type="NOA" address="0x00009888" value="0x198C0100" />
+        <register type="NOA" address="0x00009888" value="0x058C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8D0015" />
+        <register type="NOA" address="0x00009888" value="0x018D1000" />
+        <register type="NOA" address="0x00009888" value="0x098D8000" />
+        <register type="NOA" address="0x00009888" value="0x0B8DF000" />
+        <register type="NOA" address="0x00009888" value="0x0D8D3000" />
+        <register type="NOA" address="0x00009888" value="0x038DE000" />
+        <register type="NOA" address="0x00009888" value="0x058D3000" />
+        <register type="NOA" address="0x00009888" value="0x0D8E0004" />
+        <register type="NOA" address="0x00009888" value="0x058E000C" />
+        <register type="NOA" address="0x00009888" value="0x098E0000" />
+        <register type="NOA" address="0x00009888" value="0x078E0000" />
+        <register type="NOA" address="0x00009888" value="0x038E0000" />
+        <register type="NOA" address="0x00009888" value="0x0B8F0020" />
+        <register type="NOA" address="0x00009888" value="0x198F0C00" />
+        <register type="NOA" address="0x00009888" value="0x078F8000" />
+        <register type="NOA" address="0x00009888" value="0x098F4000" />
+        <register type="NOA" address="0x00009888" value="0x0B900980" />
+        <register type="NOA" address="0x00009888" value="0x03900D80" />
+        <register type="NOA" address="0x00009888" value="0x01900000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAAA" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0D834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x0784C000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x1780C000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D801111" />
+        <register type="NOA" address="0x00009888" value="0x3D800800" />
+        <register type="NOA" address="0x00009888" value="0x4F801011" />
+        <register type="NOA" address="0x00009888" value="0x43800443" />
+        <register type="NOA" address="0x00009888" value="0x51801111" />
+        <register type="NOA" address="0x00009888" value="0x45800422" />
+        <register type="NOA" address="0x00009888" value="0x53801111" />
+        <register type="NOA" address="0x00009888" value="0x47800C60" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800422" />
+        <register type="NOA" address="0x00009888" value="0x41800021" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002724" value="0xF0800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0xF0800000" />
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+        <register type="OA" address="0x00002770" value="0x0007FFEA" />
+        <register type="OA" address="0x00002774" value="0x00007FFC" />
+        <register type="OA" address="0x00002778" value="0x0007AFFA" />
+        <register type="OA" address="0x0000277C" value="0x0000F5FD" />
+        <register type="OA" address="0x00002780" value="0x00079FFA" />
+        <register type="OA" address="0x00002784" value="0x0000F3FB" />
+        <register type="OA" address="0x00002788" value="0x0007BF7A" />
+        <register type="OA" address="0x0000278C" value="0x0000F7E7" />
+        <register type="OA" address="0x00002790" value="0x0007FEFA" />
+        <register type="OA" address="0x00002794" value="0x0000F7CF" />
+        <register type="OA" address="0x00002798" value="0x00077FFA" />
+        <register type="OA" address="0x0000279C" value="0x0000EFDF" />
+        <register type="OA" address="0x000027A0" value="0x0006FFFA" />
+        <register type="OA" address="0x000027A4" value="0x0000CFBF" />
+        <register type="OA" address="0x000027A8" value="0x0003FFFA" />
+        <register type="OA" address="0x000027AC" value="0x00005F7F" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00015014" />
+        <register type="FLEX" address="0x0000E658" value="0x00025024" />
+        <register type="FLEX" address="0x0000E758" value="0x00035034" />
+        <register type="FLEX" address="0x0000E45C" value="0x00045044" />
+        <register type="FLEX" address="0x0000E55C" value="0x00055054" />
+        <register type="FLEX" address="0x0000E65C" value="0x00065064" />
+    </register_config>
+  </set>
+
+  <set name="Memory Reads Distribution Gen8"
+       mdapi_supported_apis="OGL OCL IO BB"
+       underscore_name="memory_reads"
+       hw_config_guid="2b255d48-2117-4fef-a8f7-f151e1d25a2c"
+       chipset="BDW"
+       symbol_name="MemoryReads"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiL3Bank0Reads"
+             description="The total number of GTI memory reads from L3 Bank 0 (L3 Cache misses)."
+             data_type="uint64"
+             equation="C 4 READ"
+             underscore_name="gti_l3_bank0_reads"
+             units="messages"
+             symbol_name="GtiL3Bank0Reads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GS Threads Dispatched"
+             description="The total number of geometry shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 5 READ"
+             underscore_name="gs_threads"
+             units="threads"
+             symbol_name="GsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Geometry Shader"
+             />
+    <counter name="GtiRingAccesses"
+             description="The total number of all accesses from GTI to the ring."
+             data_type="uint64"
+             equation="C 3 READ 2 UMUL"
+             underscore_name="gti_ring_accesses"
+             units="messages"
+             symbol_name="GtiRingAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI"
+             />
+    <counter name="Early Hi-Depth Test Fails"
+             description="The total number of pixels dropped on early hierarchical depth test."
+             data_type="uint64"
+             equation="A 22 READ 4 UMUL"
+             underscore_name="hi_depth_test_fails"
+             units="pixels"
+             symbol_name="HiDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             />
+    <counter name="VS Threads Dispatched"
+             description="The total number of vertex shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 1 READ"
+             underscore_name="vs_threads"
+             units="threads"
+             symbol_name="VsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Vertex Shader"
+             />
+    <counter name="FS Threads Dispatched"
+             description="The total number of fragment shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 6 READ"
+             underscore_name="ps_threads"
+             units="threads"
+             symbol_name="PsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Fragment Shader"
+             />
+    <counter name="GtiL3Bank3Reads"
+             description="The total number of GTI memory reads from L3 Bank 3 (L3 Cache misses)."
+             data_type="uint64"
+             equation="C 7 READ"
+             underscore_name="gti_l3_bank3_reads"
+             units="messages"
+             symbol_name="GtiL3Bank3Reads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="GtiRsMemoryReads"
+             description="The total number of GTI memory reads from Resource Streamer."
+             data_type="uint64"
+             equation="B 2 READ"
+             underscore_name="gti_rs_memory_reads"
+             units="messages"
+             symbol_name="GtiRsMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/3D Pipe/Resource Streamer"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="Pixels Failing Tests"
+             description="The total number of pixels dropped on post-FS alpha, stencil, or depth tests."
+             data_type="uint64"
+             equation="A 25 READ 4 UMUL"
+             underscore_name="pixels_failing_post_ps_tests"
+             units="pixels"
+             symbol_name="PixelsFailingPostPsTests"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="GtiHizMemoryReads"
+             description="The total number of GTI memory reads from Hierarchical Depth Cache (Hi-Depth Cache misses)."
+             data_type="uint64"
+             equation="B 5 READ"
+             underscore_name="gti_hiz_memory_reads"
+             units="messages"
+             symbol_name="GtiHizMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="GtiRccMemoryReads"
+             description="The total number of GTI memory reads from Render Color Cache (Render Color Cache misses)."
+             data_type="uint64"
+             equation="B 3 READ"
+             underscore_name="gti_rcc_memory_reads"
+             units="messages"
+             symbol_name="GtiRccMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Color Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiL3Bank1Reads"
+             description="The total number of GTI memory reads from L3 Bank 1 (L3 Cache misses)."
+             data_type="uint64"
+             equation="C 5 READ"
+             underscore_name="gti_l3_bank1_reads"
+             units="messages"
+             symbol_name="GtiL3Bank1Reads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GPU Busy"
+             description="The percentage of time in which the GPU has been processing GPU commands."
+             data_type="float"
+             max_equation="100"
+             equation="A 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gpu_busy"
+             units="percent"
+             symbol_name="GpuBusy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiCmdStreamerMemoryReads"
+             description="The total number of GTI memory reads from Command Streamer."
+             data_type="uint64"
+             equation="B 0 READ"
+             underscore_name="gti_cmd_streamer_memory_reads"
+             units="messages"
+             symbol_name="GtiCmdStreamerMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/3D Pipe/Command Streamer"
+             />
+    <counter name="GtiL3Bank2Reads"
+             description="The total number of GTI memory reads from L3 Bank 2 (L3 Cache misses)."
+             data_type="uint64"
+             equation="C 6 READ"
+             underscore_name="gti_l3_bank2_reads"
+             units="messages"
+             symbol_name="GtiL3Bank2Reads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GtiMemoryReads"
+             description="The total number of GTI memory reads."
+             data_type="uint64"
+             equation="C 0 READ"
+             underscore_name="gti_memory_reads"
+             units="messages"
+             symbol_name="GtiMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI"
+             />
+    <counter name="Rasterized Pixels"
+             description="The total number of rasterized pixels."
+             data_type="uint64"
+             equation="A 21 READ 4 UMUL"
+             underscore_name="rasterized_pixels"
+             units="pixels"
+             symbol_name="RasterizedPixels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer"
+             />
+    <counter name="GtiRczMemoryReads"
+             description="The total number of GTI memory reads from Render Depth Cache (Render Depth Cache misses)."
+             data_type="uint64"
+             equation="B 7 READ"
+             underscore_name="gti_rcz_memory_reads"
+             units="messages"
+             symbol_name="GtiRczMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="DS Threads Dispatched"
+             description="The total number of domain shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 3 READ"
+             underscore_name="ds_threads"
+             units="threads"
+             symbol_name="DsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Domain Shader"
+             />
+    <counter name="Samples Written"
+             description="The total number of samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 26 READ 4 UMUL"
+             underscore_name="samples_written"
+             units="pixels"
+             symbol_name="SamplesWritten"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Blended"
+             description="The total number of blended samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 27 READ 4 UMUL"
+             underscore_name="samples_blended"
+             units="pixels"
+             symbol_name="SamplesBlended"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Early Depth Test Fails"
+             description="The total number of pixels dropped on early depth test."
+             data_type="uint64"
+             equation="A 23 READ 4 UMUL"
+             underscore_name="early_depth_test_fails"
+             units="pixels"
+             symbol_name="EarlyDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             />
+    <counter name="GtiMscMemoryReads"
+             description="The total number of GTI memory reads from Multisampling Color Cache (Multisampling Color Cache misses)."
+             data_type="uint64"
+             equation="B 4 READ"
+             underscore_name="gti_msc_memory_reads"
+             units="messages"
+             symbol_name="GtiMscMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Color Cache"
+             />
+    <counter name="GtiVfMemoryReads"
+             description="The total number of GTI memory reads from Vertex Fetch."
+             data_type="uint64"
+             equation="B 1 READ"
+             underscore_name="gti_vf_memory_reads"
+             units="messages"
+             symbol_name="GtiVfMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/3D Pipe/Vertex Fetch"
+             />
+    <counter name="GtiStcMemoryReads"
+             description="The total number of GTI memory reads from Stencil Cache (Stencil Cache misses)."
+             data_type="uint64"
+             equation="B 6 READ"
+             underscore_name="gti_stc_memory_reads"
+             units="messages"
+             symbol_name="GtiStcMemoryReads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="HS Threads Dispatched"
+             description="The total number of hull shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 2 READ"
+             underscore_name="hs_threads"
+             units="threads"
+             symbol_name="HsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Hull Shader"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Killed in FS"
+             description="The total number of samples or pixels dropped in fragment shaders."
+             data_type="uint64"
+             equation="A 24 READ 4 UMUL"
+             underscore_name="samples_killed_in_ps"
+             units="pixels"
+             symbol_name="SamplesKilledInPs"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Fragment Shader"
+             />
+    <counter name="GtiL3Reads"
+             description="The total number of GTI memory reads from L3 (L3 Cache misses)."
+             data_type="uint64"
+             equation="$GtiL3Bank0Reads $GtiL3Bank1Reads $GtiL3Bank2Reads $GtiL3Bank3Reads UADD UADD UADD"
+             underscore_name="gti_l3_reads"
+             units="messages"
+             symbol_name="GtiL3Reads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <register_config type="NOA">
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x198B0343" />
+        <register type="NOA" address="0x00009888" value="0x13845800" />
+        <register type="NOA" address="0x00009888" value="0x15840018" />
+        <register type="NOA" address="0x00009888" value="0x3580001A" />
+        <register type="NOA" address="0x00009888" value="0x038B6300" />
+        <register type="NOA" address="0x00009888" value="0x058B6B62" />
+        <register type="NOA" address="0x00009888" value="0x078B006A" />
+        <register type="NOA" address="0x00009888" value="0x118B0000" />
+        <register type="NOA" address="0x00009888" value="0x238B0000" />
+        <register type="NOA" address="0x00009888" value="0x258B0000" />
+        <register type="NOA" address="0x00009888" value="0x1F85A080" />
+        <register type="NOA" address="0x00009888" value="0x2185AAAA" />
+        <register type="NOA" address="0x00009888" value="0x2385000A" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0D834000" />
+        <register type="NOA" address="0x00009888" value="0x01840018" />
+        <register type="NOA" address="0x00009888" value="0x07844C80" />
+        <register type="NOA" address="0x00009888" value="0x09840D9A" />
+        <register type="NOA" address="0x00009888" value="0x0B840E9C" />
+        <register type="NOA" address="0x00009888" value="0x0D840F9E" />
+        <register type="NOA" address="0x00009888" value="0x0F840010" />
+        <register type="NOA" address="0x00009888" value="0x11840000" />
+        <register type="NOA" address="0x00009888" value="0x03848000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x2F8000E5" />
+        <register type="NOA" address="0x00009888" value="0x138080E3" />
+        <register type="NOA" address="0x00009888" value="0x1580C0E1" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x11804000" />
+        <register type="NOA" address="0x00009888" value="0x1780C000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F804000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800800" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800842" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800842" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47801042" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800084" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002724" value="0xF0800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0xF0800000" />
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x0000274C" value="0x86543210" />
+        <register type="OA" address="0x00002748" value="0x86543210" />
+        <register type="OA" address="0x00002744" value="0x00006667" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+        <register type="OA" address="0x0000275C" value="0x86543210" />
+        <register type="OA" address="0x00002758" value="0x86543210" />
+        <register type="OA" address="0x00002754" value="0x00006465" />
+        <register type="OA" address="0x00002750" value="0x00000000" />
+        <register type="OA" address="0x00002770" value="0x0007F81A" />
+        <register type="OA" address="0x00002774" value="0x0000FE00" />
+        <register type="OA" address="0x00002778" value="0x0007F82A" />
+        <register type="OA" address="0x0000277C" value="0x0000FE00" />
+        <register type="OA" address="0x00002780" value="0x0007F872" />
+        <register type="OA" address="0x00002784" value="0x0000FE00" />
+        <register type="OA" address="0x00002788" value="0x0007F8BA" />
+        <register type="OA" address="0x0000278C" value="0x0000FE00" />
+        <register type="OA" address="0x00002790" value="0x0007F87A" />
+        <register type="OA" address="0x00002794" value="0x0000FE00" />
+        <register type="OA" address="0x00002798" value="0x0007F8EA" />
+        <register type="OA" address="0x0000279C" value="0x0000FE00" />
+        <register type="OA" address="0x000027A0" value="0x0007F8E2" />
+        <register type="OA" address="0x000027A4" value="0x0000FE00" />
+        <register type="OA" address="0x000027A8" value="0x0007F8F2" />
+        <register type="OA" address="0x000027AC" value="0x0000FE00" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00015014" />
+        <register type="FLEX" address="0x0000E658" value="0x00025024" />
+        <register type="FLEX" address="0x0000E758" value="0x00035034" />
+        <register type="FLEX" address="0x0000E45C" value="0x00045044" />
+        <register type="FLEX" address="0x0000E55C" value="0x00055054" />
+        <register type="FLEX" address="0x0000E65C" value="0x00065064" />
+    </register_config>
+  </set>
+
+  <set name="Memory Writes Distribution Gen8"
+       mdapi_supported_apis="OGL OCL IO BB"
+       underscore_name="memory_writes"
+       hw_config_guid="f7fd3220-b466-4a4d-9f98-b0caf3f2394c"
+       chipset="BDW"
+       symbol_name="MemoryWrites"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiMemoryWrites"
+             description="The total number of GTI memory writes."
+             data_type="uint64"
+             equation="C 0 READ"
+             underscore_name="gti_memory_writes"
+             units="messages"
+             symbol_name="GtiMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI"
+             />
+    <counter name="GS Threads Dispatched"
+             description="The total number of geometry shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 5 READ"
+             underscore_name="gs_threads"
+             units="threads"
+             symbol_name="GsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Geometry Shader"
+             />
+    <counter name="GtiRingAccesses"
+             description="The total number of all GTI accesses to the ring."
+             data_type="uint64"
+             equation="C 3 READ 2 UMUL"
+             underscore_name="gti_ring_accesses"
+             units="messages"
+             symbol_name="GtiRingAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI"
+             />
+    <counter name="Early Hi-Depth Test Fails"
+             description="The total number of pixels dropped on early hierarchical depth test."
+             data_type="uint64"
+             equation="A 22 READ 4 UMUL"
+             underscore_name="hi_depth_test_fails"
+             units="pixels"
+             symbol_name="HiDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Hi-Depth Test"
+             />
+    <counter name="VS Threads Dispatched"
+             description="The total number of vertex shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 1 READ"
+             underscore_name="vs_threads"
+             units="threads"
+             symbol_name="VsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Vertex Shader"
+             />
+    <counter name="FS Threads Dispatched"
+             description="The total number of fragment shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 6 READ"
+             underscore_name="ps_threads"
+             units="threads"
+             symbol_name="PsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Fragment Shader"
+             />
+    <counter name="GtiMscMemoryWrites"
+             description="The total number of GTI memory writes from Multisampling Color Cache (Multisampling Color Cache invalidations)."
+             data_type="uint64"
+             equation="B 4 READ"
+             underscore_name="gti_msc_memory_writes"
+             units="messages"
+             symbol_name="GtiMscMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Color Cache"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="GtiCmdStreamerMemoryWrites"
+             description="The total number of GTI memory writes from Command Streamer."
+             data_type="uint64"
+             equation="B 0 READ"
+             underscore_name="gti_cmd_streamer_memory_writes"
+             units="messages"
+             symbol_name="GtiCmdStreamerMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/3D Pipe/Command Streamer"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="Pixels Failing Tests"
+             description="The total number of pixels dropped on post-FS alpha, stencil, or depth tests."
+             data_type="uint64"
+             equation="A 25 READ 4 UMUL"
+             underscore_name="pixels_failing_post_ps_tests"
+             units="pixels"
+             symbol_name="PixelsFailingPostPsTests"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="GtiL3Bank0Writes"
+             description="The total number of GTI memory writes from L3 Bank 0 (L3 Bank 0 invalidations)."
+             data_type="uint64"
+             equation="C 4 READ"
+             underscore_name="gti_l3_bank0_writes"
+             units="messages"
+             symbol_name="GtiL3Bank0Writes"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GtiL3Bank1Writes"
+             description="The total number of GTI memory writes from L3 Bank 1 (L3 Bank 1 invalidations)."
+             data_type="uint64"
+             equation="C 5 READ"
+             underscore_name="gti_l3_bank1_writes"
+             units="messages"
+             symbol_name="GtiL3Bank1Writes"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GtiL3Bank2Writes"
+             description="The total number of GTI memory writes from L3 Bank 2 (L3 Bank 2 invalidations)."
+             data_type="uint64"
+             equation="C 6 READ"
+             underscore_name="gti_l3_bank2_writes"
+             units="messages"
+             symbol_name="GtiL3Bank2Writes"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GtiL3Bank3Writes"
+             description="The total number of GTI memory writes from L3 Bank 3 (L3 Bank 3 invalidations)."
+             data_type="uint64"
+             equation="C 7 READ"
+             underscore_name="gti_l3_bank3_writes"
+             units="messages"
+             symbol_name="GtiL3Bank3Writes"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GtiL3Writes"
+             description="The total number of GTI memory writes from L3 (L3 invalidations)."
+             data_type="uint64"
+             equation="$GtiL3Bank0Writes $GtiL3Bank1Writes $GtiL3Bank2Writes $GtiL3Bank3Writes UADD UADD UADD"
+             underscore_name="gti_l3_writes"
+             units="messages"
+             symbol_name="GtiL3Writes"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/L3"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiRccMemoryWrites"
+             description="The total number of GTI memory writes from Render Color Cache (Render Color Cache invalidations)."
+             data_type="uint64"
+             equation="B 3 READ"
+             underscore_name="gti_rcc_memory_writes"
+             units="messages"
+             symbol_name="GtiRccMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Color Cache"
+             />
+    <counter name="GtiSoMemoryWrites"
+             description="The total number of GTI memory writes from Stream Output."
+             data_type="uint64"
+             equation="B 2 READ"
+             underscore_name="gti_so_memory_writes"
+             units="messages"
+             symbol_name="GtiSoMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/3D Pipe/Stream Output"
+             />
+    <counter name="GPU Busy"
+             description="The percentage of time in which the GPU has been processing GPU commands."
+             data_type="float"
+             max_equation="100"
+             equation="A 0 READ 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="gpu_busy"
+             units="percent"
+             symbol_name="GpuBusy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="GtiStcMemoryWrites"
+             description="The total number of GTI memory writes from Stencil Cache."
+             data_type="uint64"
+             equation="B 6 READ"
+             underscore_name="gti_stc_memory_writes"
+             units="messages"
+             symbol_name="GtiStcMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="Rasterized Pixels"
+             description="The total number of rasterized pixels."
+             data_type="uint64"
+             equation="A 21 READ 4 UMUL"
+             underscore_name="rasterized_pixels"
+             units="pixels"
+             symbol_name="RasterizedPixels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer"
+             />
+    <counter name="DS Threads Dispatched"
+             description="The total number of domain shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 3 READ"
+             underscore_name="ds_threads"
+             units="threads"
+             symbol_name="DsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Domain Shader"
+             />
+    <counter name="Samples Written"
+             description="The total number of samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 26 READ 4 UMUL"
+             underscore_name="samples_written"
+             units="pixels"
+             symbol_name="SamplesWritten"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Blended"
+             description="The total number of blended samples or pixels written to all render targets."
+             data_type="uint64"
+             equation="A 27 READ 4 UMUL"
+             underscore_name="samples_blended"
+             units="pixels"
+             symbol_name="SamplesBlended"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Output Merger"
+             />
+    <counter name="Early Depth Test Fails"
+             description="The total number of pixels dropped on early depth test."
+             data_type="uint64"
+             equation="A 23 READ 4 UMUL"
+             underscore_name="early_depth_test_fails"
+             units="pixels"
+             symbol_name="EarlyDepthTestFails"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Rasterizer/Early Depth Test"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="HS Threads Dispatched"
+             description="The total number of hull shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 2 READ"
+             underscore_name="hs_threads"
+             units="threads"
+             symbol_name="HsThreads"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Hull Shader"
+             />
+    <counter name="GtiRczMemoryWrites"
+             description="The total number of GTI memory writes from Render Depth Cache."
+             data_type="uint64"
+             equation="B 7 READ"
+             underscore_name="gti_rcz_memory_writes"
+             units="messages"
+             symbol_name="GtiRczMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Samples Killed in FS"
+             description="The total number of samples or pixels dropped in fragment shaders."
+             data_type="uint64"
+             equation="A 24 READ 4 UMUL"
+             underscore_name="samples_killed_in_ps"
+             units="pixels"
+             symbol_name="SamplesKilledInPs"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier4 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="3D Pipe/Fragment Shader"
+             />
+    <counter name="GtiHizMemoryWrites"
+             description="The total number of GTI memory writes from Hierarchical Depth Cache."
+             data_type="uint64"
+             equation="B 5 READ"
+             underscore_name="gti_hiz_memory_writes"
+             units="messages"
+             symbol_name="GtiHizMemoryWrites"
+             semantic_type="event"
+             mdapi_supported_apis="OGL IO BB"
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GTI/Depth Cache"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis="OGL4 OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <register_config type="NOA">
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x198B0343" />
+        <register type="NOA" address="0x00009888" value="0x13845400" />
+        <register type="NOA" address="0x00009888" value="0x3580001A" />
+        <register type="NOA" address="0x00009888" value="0x3D800805" />
+        <register type="NOA" address="0x00009888" value="0x038B6300" />
+        <register type="NOA" address="0x00009888" value="0x058B6B62" />
+        <register type="NOA" address="0x00009888" value="0x078B006A" />
+        <register type="NOA" address="0x00009888" value="0x118B0000" />
+        <register type="NOA" address="0x00009888" value="0x238B0000" />
+        <register type="NOA" address="0x00009888" value="0x258B0000" />
+        <register type="NOA" address="0x00009888" value="0x1F85A080" />
+        <register type="NOA" address="0x00009888" value="0x2185AAAA" />
+        <register type="NOA" address="0x00009888" value="0x23850002" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0D834000" />
+        <register type="NOA" address="0x00009888" value="0x01840010" />
+        <register type="NOA" address="0x00009888" value="0x07844880" />
+        <register type="NOA" address="0x00009888" value="0x09840992" />
+        <register type="NOA" address="0x00009888" value="0x0B840A94" />
+        <register type="NOA" address="0x00009888" value="0x0D840B96" />
+        <register type="NOA" address="0x00009888" value="0x11840000" />
+        <register type="NOA" address="0x00009888" value="0x03848000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x2D800147" />
+        <register type="NOA" address="0x00009888" value="0x2F8000E5" />
+        <register type="NOA" address="0x00009888" value="0x138080E3" />
+        <register type="NOA" address="0x00009888" value="0x1580C0E1" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x11804000" />
+        <register type="NOA" address="0x00009888" value="0x1780C000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F800000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800842" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800842" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47801082" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800084" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002724" value="0xF0800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0xF0800000" />
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x0000274C" value="0x86543210" />
+        <register type="OA" address="0x00002748" value="0x86543210" />
+        <register type="OA" address="0x00002744" value="0x00006667" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+        <register type="OA" address="0x0000275C" value="0x86543210" />
+        <register type="OA" address="0x00002758" value="0x86543210" />
+        <register type="OA" address="0x00002754" value="0x00006465" />
+        <register type="OA" address="0x00002750" value="0x00000000" />
+        <register type="OA" address="0x00002770" value="0x0007F81A" />
+        <register type="OA" address="0x00002774" value="0x0000FE00" />
+        <register type="OA" address="0x00002778" value="0x0007F82A" />
+        <register type="OA" address="0x0000277C" value="0x0000FE00" />
+        <register type="OA" address="0x00002780" value="0x0007F822" />
+        <register type="OA" address="0x00002784" value="0x0000FE00" />
+        <register type="OA" address="0x00002788" value="0x0007F8BA" />
+        <register type="OA" address="0x0000278C" value="0x0000FE00" />
+        <register type="OA" address="0x00002790" value="0x0007F87A" />
+        <register type="OA" address="0x00002794" value="0x0000FE00" />
+        <register type="OA" address="0x00002798" value="0x0007F8EA" />
+        <register type="OA" address="0x0000279C" value="0x0000FE00" />
+        <register type="OA" address="0x000027A0" value="0x0007F8E2" />
+        <register type="OA" address="0x000027A4" value="0x0000FE00" />
+        <register type="OA" address="0x000027A8" value="0x0007F8F2" />
+        <register type="OA" address="0x000027AC" value="0x0000FE00" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00015014" />
+        <register type="FLEX" address="0x0000E658" value="0x00025024" />
+        <register type="FLEX" address="0x0000E758" value="0x00035034" />
+        <register type="FLEX" address="0x0000E45C" value="0x00045044" />
+        <register type="FLEX" address="0x0000E55C" value="0x00055054" />
+        <register type="FLEX" address="0x0000E65C" value="0x00065064" />
+    </register_config>
+  </set>
+
+  <set name="Compute Metrics Extended Gen8"
+       mdapi_supported_apis="OGL4 OCL IO BB"
+       underscore_name="compute_extended"
+       hw_config_guid="e99ccaca-821c-4df9-97a7-96bdb7204e43"
+       chipset="BDW"
+       symbol_name="ComputeExtended"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Both FPU Pipes Active"
+             description="The percentage of time in which both EU FPU pipelines were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 9 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_fpu_both_active"
+             units="percent"
+             symbol_name="EuFpuBothActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU0 Pipe Active"
+             description="The percentage of time in which EU FPU0 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 10 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu0_active"
+             units="percent"
+             symbol_name="Fpu0Active"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU1 Pipe Active"
+             description="The percentage of time in which EU FPU1 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 11 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu1_active"
+             units="percent"
+             symbol_name="Fpu1Active"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU AVG IPC Rate"
+             description="The average rate of IPC calculated for 2 FPU pipelines."
+             data_type="float"
+             max_equation="2"
+             equation="A 9 READ  A 10 READ  A 11 READ UADD  A 9 READ USUB FDIV 1 FADD"
+             underscore_name="eu_avg_ipc_rate"
+             units="number"
+             symbol_name="EuAvgIpcRate"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier4 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Typed Writes 0"
+             description="The subslice 0 typed writes."
+             data_type="uint64"
+             equation="C 0 READ"
+             underscore_name="typed_writes0"
+             units="messages"
+             symbol_name="TypedWrites0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuTypedAtomics0"
+             description="The subslice 0 EU Typed Atomics subslice 0."
+             data_type="uint64"
+             equation="B 5 READ"
+             underscore_name="eu_typed_atomics0"
+             units="messages"
+             symbol_name="EuTypedAtomics0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Typed Atomics 0"
+             description="The subslice 0 typed atomics."
+             data_type="uint64"
+             equation="C 4 READ"
+             underscore_name="typed_atomics0"
+             units="messages"
+             symbol_name="TypedAtomics0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="TypedAtomicsPerCacheLine"
+             description="Ratio of EU typed atomics requests to L3 cache line writes."
+             data_type="float"
+             equation="$EuTypedAtomics0 $TypedAtomics0 FDIV"
+             underscore_name="typed_atomics_per_cache_line"
+             units="eu atomic requests to l3 cache lines"
+             symbol_name="TypedAtomicsPerCacheLine"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuUntypedReads0"
+             description="The subslice 0 EU Untyped Reads subslice 0."
+             data_type="uint64"
+             equation="B 0 READ"
+             underscore_name="eu_untyped_reads0"
+             units="messages"
+             symbol_name="EuUntypedReads0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Untyped Writes 0"
+             description="The subslice 0 untyped writes (including SLM writes)."
+             data_type="uint64"
+             equation="C 1 READ"
+             underscore_name="untyped_writes0"
+             units="messages"
+             symbol_name="UntypedWrites0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuUntypedAtomics0"
+             description="The subslice 0 EU Untyped Atomics subslice 0."
+             data_type="uint64"
+             equation="B 4 READ"
+             underscore_name="eu_untyped_atomics0"
+             units="messages"
+             symbol_name="EuUntypedAtomics0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuUntypedWrites0"
+             description="The subslice 0 EU Untyped Writes subslice 0."
+             data_type="uint64"
+             equation="B 1 READ"
+             underscore_name="eu_untyped_writes0"
+             units="messages"
+             symbol_name="EuUntypedWrites0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuA64UntypedWrites0"
+             description="The subslice 0 EU A64 Untyped Writes subslice 0."
+             data_type="uint64"
+             equation="B 7 READ"
+             underscore_name="eu_a64_untyped_writes0"
+             units="messages"
+             symbol_name="EuA64UntypedWrites0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="UntypedWritesPerCacheLine"
+             description="Ratio of EU untyped write requests to L3 cache line writes."
+             data_type="float"
+             equation="$EuUntypedWrites0 $EuA64UntypedWrites0 UADD $UntypedWrites0 FDIV"
+             underscore_name="untyped_writes_per_cache_line"
+             units="eu requests to l3 cache lines"
+             symbol_name="UntypedWritesPerCacheLine"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Shader Barrier Messages"
+             description="The total number of shader barrier messages."
+             data_type="uint64"
+             equation="A 35 READ"
+             underscore_name="shader_barriers"
+             units="messages"
+             symbol_name="ShaderBarriers"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Barrier"
+             />
+    <counter name="Sampler Texels"
+             description="The total number of texels seen on input (with 2x2 accuracy) in all sampler units."
+             data_type="uint64"
+             equation="A 28 READ 4 UMUL"
+             underscore_name="sampler_texels"
+             units="texels"
+             symbol_name="SamplerTexels"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Input"
+             />
+    <counter name="GPU Time Elapsed"
+             description="Time elapsed on the GPU during the measurement."
+             data_type="uint64"
+             equation="GPU_TIME 0 READ 1000000000 UMUL $GpuTimestampFrequency UDIV"
+             underscore_name="gpu_time"
+             units="ns"
+             symbol_name="GpuTime"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="AVG GPU Core Frequency"
+             description="Average GPU Core Frequency in the measurement."
+             data_type="uint64"
+             max_equation="$GpuMaxFrequency"
+             equation="$GpuCoreClocks 1000000000 UMUL $GpuTime UDIV"
+             underscore_name="avg_gpu_core_frequency"
+             units="hz"
+             symbol_name="AvgGpuCoreFrequency"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier1 Overview System Frame Batch Draw"
+             mdapi_group="GPU"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Sampler Texels Misses"
+             description="The total number of texels lookups (with 2x2 accuracy) that missed L1 sampler cache."
+             data_type="uint64"
+             equation="A 29 READ 4 UMUL"
+             underscore_name="sampler_texel_misses"
+             units="texels"
+             symbol_name="SamplerTexelMisses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Batch Frame Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="Sampler/Sampler Cache"
+             />
+    <counter name="CS Threads Dispatched"
+             description="The total number of compute shader hardware threads dispatched."
+             data_type="uint64"
+             equation="A 4 READ"
+             underscore_name="cs_threads"
+             units="threads"
+             symbol_name="CsThreads"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="EU Array/Compute Shader"
+             />
+    <counter name="SLM Bytes Read"
+             description="The total number of GPU memory bytes read from shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ 64 UMUL"
+             underscore_name="slm_bytes_read"
+             units="bytes"
+             symbol_name="SlmBytesRead"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EuTypedWrites0"
+             description="The subslice 0 EU Typed Writes subslice 0."
+             data_type="uint64"
+             equation="B 3 READ"
+             underscore_name="eu_typed_writes0"
+             units="messages"
+             symbol_name="EuTypedWrites0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="TypedWritesPerCacheLine"
+             description="Ratio of EU typed write requests to L3 cache line writes."
+             data_type="float"
+             equation="$EuTypedWrites0 $TypedWrites0 FDIV"
+             underscore_name="typed_writes_per_cache_line"
+             units="eu requests to l3 cache lines"
+             symbol_name="TypedWritesPerCacheLine"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Typed Reads 0"
+             description="The subslice 0 typed reads."
+             data_type="uint64"
+             equation="C 2 READ"
+             underscore_name="typed_reads0"
+             units="messages"
+             symbol_name="TypedReads0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Untyped Reads 0"
+             description="The subslice 0 untyped reads (including SLM reads)."
+             data_type="uint64"
+             equation="C 3 READ"
+             underscore_name="untyped_reads0"
+             units="messages"
+             symbol_name="UntypedReads0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EuA64UntypedReads0"
+             description="The subslice 0 EU A64 Untyped Reads subslice 0."
+             data_type="uint64"
+             equation="B 6 READ"
+             underscore_name="eu_a64_untyped_reads0"
+             units="messages"
+             symbol_name="EuA64UntypedReads0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="EU Thread Occupancy"
+             description="The percentage of time in which hardware threads occupied EUs."
+             data_type="float"
+             max_equation="100"
+             equation="A 13 READ 8 UMUL $EuCoresTotalCount UDIV $EuThreadsCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_thread_occupancy"
+             units="percent"
+             symbol_name="EuThreadOccupancy"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU Stall"
+             description="The percentage of time in which the Execution Units were stalled."
+             data_type="float"
+             max_equation="100"
+             equation="A 8 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_stall"
+             units="percent"
+             symbol_name="EuStall"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EuTypedReads0"
+             description="The subslice 0 EU Typed Reads subslice 0."
+             data_type="uint64"
+             equation="B 2 READ"
+             underscore_name="eu_typed_reads0"
+             units="messages"
+             symbol_name="EuTypedReads0"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="UntypedReadsPerCacheLine"
+             description="Ratio of EU untyped read requests to L3 cache line reads."
+             data_type="float"
+             equation="$EuUntypedReads0 $EuA64UntypedReads0 UADD $UntypedReads0 FDIV"
+             underscore_name="untyped_reads_per_cache_line"
+             units="eu requests to l3 cache lines"
+             symbol_name="UntypedReadsPerCacheLine"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="Shader Memory Accesses"
+             description="The total number of shader memory accesses to L3."
+             data_type="uint64"
+             equation="A 32 READ"
+             underscore_name="shader_memory_accesses"
+             units="messages"
+             symbol_name="ShaderMemoryAccesses"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="TypedReadsPerCacheLine"
+             description="Ratio of EU typed read requests to L3 cache line reads."
+             data_type="float"
+             equation="$EuTypedReads0 $TypedReads0 FDIV"
+             underscore_name="typed_reads_per_cache_line"
+             units="eu requests to l3 cache lines"
+             symbol_name="TypedReadsPerCacheLine"
+             semantic_type="ratio"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_hw_unit_type="subslice"
+             mdapi_group="L3/Data Port"
+             />
+    <counter name="SLM Bytes Written"
+             description="The total number of GPU memory bytes written into shared local memory."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 31 READ 64 UMUL"
+             underscore_name="slm_bytes_written"
+             units="bytes"
+             symbol_name="SlmBytesWritten"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3/Data Port/SLM"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Shader Throughput"
+             description="The total number of GPU memory bytes transferred between shaders and L3 caches w/o URB."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL 2 UMUL $EuSubslicesTotalCount UMUL"
+             equation="A 30 READ  A 31 READ $ShaderMemoryAccesses UADD UADD 64 UMUL"
+             underscore_name="l3_shader_throughput"
+             units="bytes"
+             symbol_name="L3ShaderThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier2 Frame Batch Draw"
+             mdapi_group="L3/Data Port"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="Shader Atomic Memory Accesses"
+             description="The total number of shader atomic memory accesses."
+             data_type="uint64"
+             equation="A 34 READ"
+             underscore_name="shader_atomics"
+             units="messages"
+             symbol_name="ShaderAtomics"
+             semantic_type="event"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3/Data Port/Atomics"
+             />
+    <counter name="EU Send Pipe Active"
+             description="The percentage of time in which EU send pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 12 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_send_active"
+             units="percent"
+             symbol_name="EuSendActive"
+             semantic_type="duration"
+             mdapi_supported_apis=""
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x01 AND"
+                     priority="0"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x143D0160" />
+        <register type="NOA" address="0x00009888" value="0x163D2800" />
+        <register type="NOA" address="0x00009888" value="0x183D0120" />
+        <register type="NOA" address="0x00009888" value="0x105800E0" />
+        <register type="NOA" address="0x00009888" value="0x005CC000" />
+        <register type="NOA" address="0x00009888" value="0x065C8000" />
+        <register type="NOA" address="0x00009888" value="0x085CC000" />
+        <register type="NOA" address="0x00009888" value="0x0A5CC000" />
+        <register type="NOA" address="0x00009888" value="0x0C5CC000" />
+        <register type="NOA" address="0x00009888" value="0x0E5CC000" />
+        <register type="NOA" address="0x00009888" value="0x025CC000" />
+        <register type="NOA" address="0x00009888" value="0x045CC000" />
+        <register type="NOA" address="0x00009888" value="0x003D0011" />
+        <register type="NOA" address="0x00009888" value="0x063D0900" />
+        <register type="NOA" address="0x00009888" value="0x083D0A13" />
+        <register type="NOA" address="0x00009888" value="0x0A3D0B15" />
+        <register type="NOA" address="0x00009888" value="0x0C3D2317" />
+        <register type="NOA" address="0x00009888" value="0x043D21B7" />
+        <register type="NOA" address="0x00009888" value="0x103D0000" />
+        <register type="NOA" address="0x00009888" value="0x0E3D0000" />
+        <register type="NOA" address="0x00009888" value="0x1A3D0000" />
+        <register type="NOA" address="0x00009888" value="0x0E5825C1" />
+        <register type="NOA" address="0x00009888" value="0x00586100" />
+        <register type="NOA" address="0x00009888" value="0x0258204C" />
+        <register type="NOA" address="0x00009888" value="0x06588000" />
+        <register type="NOA" address="0x00009888" value="0x0858C000" />
+        <register type="NOA" address="0x00009888" value="0x0A58C000" />
+        <register type="NOA" address="0x00009888" value="0x0C58C000" />
+        <register type="NOA" address="0x00009888" value="0x0458C000" />
+        <register type="NOA" address="0x00009888" value="0x005B4000" />
+        <register type="NOA" address="0x00009888" value="0x0E5B4000" />
+        <register type="NOA" address="0x00009888" value="0x185B5400" />
+        <register type="NOA" address="0x00009888" value="0x1A5B0155" />
+        <register type="NOA" address="0x00009888" value="0x025B4000" />
+        <register type="NOA" address="0x00009888" value="0x045B4000" />
+        <register type="NOA" address="0x00009888" value="0x065B4000" />
+        <register type="NOA" address="0x00009888" value="0x085B4000" />
+        <register type="NOA" address="0x00009888" value="0x0A5B4000" />
+        <register type="NOA" address="0x00009888" value="0x0C1FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E1FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x101F02AA" />
+        <register type="NOA" address="0x00009888" value="0x00384000" />
+        <register type="NOA" address="0x00009888" value="0x0E384000" />
+        <register type="NOA" address="0x00009888" value="0x16384000" />
+        <register type="NOA" address="0x00009888" value="0x18381555" />
+        <register type="NOA" address="0x00009888" value="0x02384000" />
+        <register type="NOA" address="0x00009888" value="0x04384000" />
+        <register type="NOA" address="0x00009888" value="0x06384000" />
+        <register type="NOA" address="0x00009888" value="0x08384000" />
+        <register type="NOA" address="0x00009888" value="0x0A384000" />
+        <register type="NOA" address="0x00009888" value="0x0039A000" />
+        <register type="NOA" address="0x00009888" value="0x06398000" />
+        <register type="NOA" address="0x00009888" value="0x0839A000" />
+        <register type="NOA" address="0x00009888" value="0x0A39A000" />
+        <register type="NOA" address="0x00009888" value="0x0C39A000" />
+        <register type="NOA" address="0x00009888" value="0x0E39A000" />
+        <register type="NOA" address="0x00009888" value="0x0239A000" />
+        <register type="NOA" address="0x00009888" value="0x0439A000" />
+        <register type="NOA" address="0x00009888" value="0x018A8000" />
+        <register type="NOA" address="0x00009888" value="0x0F8A8000" />
+        <register type="NOA" address="0x00009888" value="0x198A8000" />
+        <register type="NOA" address="0x00009888" value="0x1B8AAAA0" />
+        <register type="NOA" address="0x00009888" value="0x1D8A0002" />
+        <register type="NOA" address="0x00009888" value="0x038A8000" />
+        <register type="NOA" address="0x00009888" value="0x058A8000" />
+        <register type="NOA" address="0x00009888" value="0x078A8000" />
+        <register type="NOA" address="0x00009888" value="0x098A8000" />
+        <register type="NOA" address="0x00009888" value="0x0B8A8000" />
+        <register type="NOA" address="0x00009888" value="0x238B2AA0" />
+        <register type="NOA" address="0x00009888" value="0x258B5551" />
+        <register type="NOA" address="0x00009888" value="0x278B0015" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x02 AND"
+                     priority="2"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x105C00E0" />
+        <register type="NOA" address="0x00009888" value="0x145B0160" />
+        <register type="NOA" address="0x00009888" value="0x165B2800" />
+        <register type="NOA" address="0x00009888" value="0x185B0120" />
+        <register type="NOA" address="0x00009888" value="0x0E5C25C1" />
+        <register type="NOA" address="0x00009888" value="0x005C6100" />
+        <register type="NOA" address="0x00009888" value="0x025C204C" />
+        <register type="NOA" address="0x00009888" value="0x065C8000" />
+        <register type="NOA" address="0x00009888" value="0x085CC000" />
+        <register type="NOA" address="0x00009888" value="0x0A5CC000" />
+        <register type="NOA" address="0x00009888" value="0x0C5CC000" />
+        <register type="NOA" address="0x00009888" value="0x045CC000" />
+        <register type="NOA" address="0x00009888" value="0x005B0011" />
+        <register type="NOA" address="0x00009888" value="0x065B0900" />
+        <register type="NOA" address="0x00009888" value="0x085B0A13" />
+        <register type="NOA" address="0x00009888" value="0x0A5B0B15" />
+        <register type="NOA" address="0x00009888" value="0x0C5B2317" />
+        <register type="NOA" address="0x00009888" value="0x045B21B7" />
+        <register type="NOA" address="0x00009888" value="0x105B0000" />
+        <register type="NOA" address="0x00009888" value="0x0E5B0000" />
+        <register type="NOA" address="0x00009888" value="0x1A5B0000" />
+        <register type="NOA" address="0x00009888" value="0x0C1FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E1FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x101F02AA" />
+        <register type="NOA" address="0x00009888" value="0x00384000" />
+        <register type="NOA" address="0x00009888" value="0x0E384000" />
+        <register type="NOA" address="0x00009888" value="0x16384000" />
+        <register type="NOA" address="0x00009888" value="0x18381555" />
+        <register type="NOA" address="0x00009888" value="0x02384000" />
+        <register type="NOA" address="0x00009888" value="0x04384000" />
+        <register type="NOA" address="0x00009888" value="0x06384000" />
+        <register type="NOA" address="0x00009888" value="0x08384000" />
+        <register type="NOA" address="0x00009888" value="0x0A384000" />
+        <register type="NOA" address="0x00009888" value="0x0039A000" />
+        <register type="NOA" address="0x00009888" value="0x06398000" />
+        <register type="NOA" address="0x00009888" value="0x0839A000" />
+        <register type="NOA" address="0x00009888" value="0x0A39A000" />
+        <register type="NOA" address="0x00009888" value="0x0C39A000" />
+        <register type="NOA" address="0x00009888" value="0x0E39A000" />
+        <register type="NOA" address="0x00009888" value="0x0239A000" />
+        <register type="NOA" address="0x00009888" value="0x0439A000" />
+        <register type="NOA" address="0x00009888" value="0x018A8000" />
+        <register type="NOA" address="0x00009888" value="0x0F8A8000" />
+        <register type="NOA" address="0x00009888" value="0x198A8000" />
+        <register type="NOA" address="0x00009888" value="0x1B8AAAA0" />
+        <register type="NOA" address="0x00009888" value="0x1D8A0002" />
+        <register type="NOA" address="0x00009888" value="0x038A8000" />
+        <register type="NOA" address="0x00009888" value="0x058A8000" />
+        <register type="NOA" address="0x00009888" value="0x078A8000" />
+        <register type="NOA" address="0x00009888" value="0x098A8000" />
+        <register type="NOA" address="0x00009888" value="0x0B8A8000" />
+        <register type="NOA" address="0x00009888" value="0x238B2AA0" />
+        <register type="NOA" address="0x00009888" value="0x258B5551" />
+        <register type="NOA" address="0x00009888" value="0x278B0015" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x04 AND"
+                     priority="4"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x103800E0" />
+        <register type="NOA" address="0x00009888" value="0x143A0160" />
+        <register type="NOA" address="0x00009888" value="0x163A2800" />
+        <register type="NOA" address="0x00009888" value="0x183A0120" />
+        <register type="NOA" address="0x00009888" value="0x0C1FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E1FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x101F02AA" />
+        <register type="NOA" address="0x00009888" value="0x0E38A5C1" />
+        <register type="NOA" address="0x00009888" value="0x0038A100" />
+        <register type="NOA" address="0x00009888" value="0x0238204C" />
+        <register type="NOA" address="0x00009888" value="0x16388000" />
+        <register type="NOA" address="0x00009888" value="0x183802AA" />
+        <register type="NOA" address="0x00009888" value="0x04380000" />
+        <register type="NOA" address="0x00009888" value="0x06380000" />
+        <register type="NOA" address="0x00009888" value="0x08388000" />
+        <register type="NOA" address="0x00009888" value="0x0A388000" />
+        <register type="NOA" address="0x00009888" value="0x0039A000" />
+        <register type="NOA" address="0x00009888" value="0x06398000" />
+        <register type="NOA" address="0x00009888" value="0x0839A000" />
+        <register type="NOA" address="0x00009888" value="0x0A39A000" />
+        <register type="NOA" address="0x00009888" value="0x0C39A000" />
+        <register type="NOA" address="0x00009888" value="0x0E39A000" />
+        <register type="NOA" address="0x00009888" value="0x0239A000" />
+        <register type="NOA" address="0x00009888" value="0x0439A000" />
+        <register type="NOA" address="0x00009888" value="0x003A0011" />
+        <register type="NOA" address="0x00009888" value="0x063A0900" />
+        <register type="NOA" address="0x00009888" value="0x083A0A13" />
+        <register type="NOA" address="0x00009888" value="0x0A3A0B15" />
+        <register type="NOA" address="0x00009888" value="0x0C3A2317" />
+        <register type="NOA" address="0x00009888" value="0x043A21B7" />
+        <register type="NOA" address="0x00009888" value="0x103A0000" />
+        <register type="NOA" address="0x00009888" value="0x0E3A0000" />
+        <register type="NOA" address="0x00009888" value="0x1A3A0000" />
+        <register type="NOA" address="0x00009888" value="0x018A8000" />
+        <register type="NOA" address="0x00009888" value="0x0F8A8000" />
+        <register type="NOA" address="0x00009888" value="0x198A8000" />
+        <register type="NOA" address="0x00009888" value="0x1B8AAAA0" />
+        <register type="NOA" address="0x00009888" value="0x1D8A0002" />
+        <register type="NOA" address="0x00009888" value="0x038A8000" />
+        <register type="NOA" address="0x00009888" value="0x058A8000" />
+        <register type="NOA" address="0x00009888" value="0x078A8000" />
+        <register type="NOA" address="0x00009888" value="0x098A8000" />
+        <register type="NOA" address="0x00009888" value="0x0B8A8000" />
+        <register type="NOA" address="0x00009888" value="0x238B2AA0" />
+        <register type="NOA" address="0x00009888" value="0x258B5551" />
+        <register type="NOA" address="0x00009888" value="0x278B0015" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x08 AND"
+                     priority="1"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x14BD0160" />
+        <register type="NOA" address="0x00009888" value="0x16BD2800" />
+        <register type="NOA" address="0x00009888" value="0x18BD0120" />
+        <register type="NOA" address="0x00009888" value="0x10D800E0" />
+        <register type="NOA" address="0x00009888" value="0x00DCC000" />
+        <register type="NOA" address="0x00009888" value="0x06DC8000" />
+        <register type="NOA" address="0x00009888" value="0x08DCC000" />
+        <register type="NOA" address="0x00009888" value="0x0ADCC000" />
+        <register type="NOA" address="0x00009888" value="0x0CDCC000" />
+        <register type="NOA" address="0x00009888" value="0x0EDCC000" />
+        <register type="NOA" address="0x00009888" value="0x02DCC000" />
+        <register type="NOA" address="0x00009888" value="0x04DCC000" />
+        <register type="NOA" address="0x00009888" value="0x00BD0011" />
+        <register type="NOA" address="0x00009888" value="0x06BD0900" />
+        <register type="NOA" address="0x00009888" value="0x08BD0A13" />
+        <register type="NOA" address="0x00009888" value="0x0ABD0B15" />
+        <register type="NOA" address="0x00009888" value="0x0CBD2317" />
+        <register type="NOA" address="0x00009888" value="0x04BD21B7" />
+        <register type="NOA" address="0x00009888" value="0x10BD0000" />
+        <register type="NOA" address="0x00009888" value="0x0EBD0000" />
+        <register type="NOA" address="0x00009888" value="0x1ABD0000" />
+        <register type="NOA" address="0x00009888" value="0x0ED825C1" />
+        <register type="NOA" address="0x00009888" value="0x00D86100" />
+        <register type="NOA" address="0x00009888" value="0x02D8204C" />
+        <register type="NOA" address="0x00009888" value="0x06D88000" />
+        <register type="NOA" address="0x00009888" value="0x08D8C000" />
+        <register type="NOA" address="0x00009888" value="0x0AD8C000" />
+        <register type="NOA" address="0x00009888" value="0x0CD8C000" />
+        <register type="NOA" address="0x00009888" value="0x04D8C000" />
+        <register type="NOA" address="0x00009888" value="0x00DB4000" />
+        <register type="NOA" address="0x00009888" value="0x0EDB4000" />
+        <register type="NOA" address="0x00009888" value="0x18DB5400" />
+        <register type="NOA" address="0x00009888" value="0x1ADB0155" />
+        <register type="NOA" address="0x00009888" value="0x02DB4000" />
+        <register type="NOA" address="0x00009888" value="0x04DB4000" />
+        <register type="NOA" address="0x00009888" value="0x06DB4000" />
+        <register type="NOA" address="0x00009888" value="0x08DB4000" />
+        <register type="NOA" address="0x00009888" value="0x0ADB4000" />
+        <register type="NOA" address="0x00009888" value="0x0C9FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E9FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x109F02AA" />
+        <register type="NOA" address="0x00009888" value="0x00B84000" />
+        <register type="NOA" address="0x00009888" value="0x0EB84000" />
+        <register type="NOA" address="0x00009888" value="0x16B84000" />
+        <register type="NOA" address="0x00009888" value="0x18B81555" />
+        <register type="NOA" address="0x00009888" value="0x02B84000" />
+        <register type="NOA" address="0x00009888" value="0x04B84000" />
+        <register type="NOA" address="0x00009888" value="0x06B84000" />
+        <register type="NOA" address="0x00009888" value="0x08B84000" />
+        <register type="NOA" address="0x00009888" value="0x0AB84000" />
+        <register type="NOA" address="0x00009888" value="0x00B9A000" />
+        <register type="NOA" address="0x00009888" value="0x06B98000" />
+        <register type="NOA" address="0x00009888" value="0x08B9A000" />
+        <register type="NOA" address="0x00009888" value="0x0AB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0CB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0EB9A000" />
+        <register type="NOA" address="0x00009888" value="0x02B9A000" />
+        <register type="NOA" address="0x00009888" value="0x04B9A000" />
+        <register type="NOA" address="0x00009888" value="0x01888000" />
+        <register type="NOA" address="0x00009888" value="0x0D88F800" />
+        <register type="NOA" address="0x00009888" value="0x0F88000F" />
+        <register type="NOA" address="0x00009888" value="0x03888000" />
+        <register type="NOA" address="0x00009888" value="0x05888000" />
+        <register type="NOA" address="0x00009888" value="0x07888000" />
+        <register type="NOA" address="0x00009888" value="0x09888000" />
+        <register type="NOA" address="0x00009888" value="0x0B888000" />
+        <register type="NOA" address="0x00009888" value="0x238B5540" />
+        <register type="NOA" address="0x00009888" value="0x258BAAA2" />
+        <register type="NOA" address="0x00009888" value="0x278B002A" />
+        <register type="NOA" address="0x00009888" value="0x018C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8C4000" />
+        <register type="NOA" address="0x00009888" value="0x178C2000" />
+        <register type="NOA" address="0x00009888" value="0x198C5500" />
+        <register type="NOA" address="0x00009888" value="0x1B8C0015" />
+        <register type="NOA" address="0x00009888" value="0x038C4000" />
+        <register type="NOA" address="0x00009888" value="0x058C4000" />
+        <register type="NOA" address="0x00009888" value="0x078C4000" />
+        <register type="NOA" address="0x00009888" value="0x098C4000" />
+        <register type="NOA" address="0x00009888" value="0x0B8C4000" />
+        <register type="NOA" address="0x00009888" value="0x018DA000" />
+        <register type="NOA" address="0x00009888" value="0x078D8000" />
+        <register type="NOA" address="0x00009888" value="0x098DA000" />
+        <register type="NOA" address="0x00009888" value="0x0B8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0D8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0F8DA000" />
+        <register type="NOA" address="0x00009888" value="0x038DA000" />
+        <register type="NOA" address="0x00009888" value="0x058DA000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x10 AND"
+                     priority="3"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x10DC00E0" />
+        <register type="NOA" address="0x00009888" value="0x14DB0160" />
+        <register type="NOA" address="0x00009888" value="0x16DB2800" />
+        <register type="NOA" address="0x00009888" value="0x18DB0120" />
+        <register type="NOA" address="0x00009888" value="0x0EDC25C1" />
+        <register type="NOA" address="0x00009888" value="0x00DC6100" />
+        <register type="NOA" address="0x00009888" value="0x02DC204C" />
+        <register type="NOA" address="0x00009888" value="0x06DC8000" />
+        <register type="NOA" address="0x00009888" value="0x08DCC000" />
+        <register type="NOA" address="0x00009888" value="0x0ADCC000" />
+        <register type="NOA" address="0x00009888" value="0x0CDCC000" />
+        <register type="NOA" address="0x00009888" value="0x04DCC000" />
+        <register type="NOA" address="0x00009888" value="0x00DB0011" />
+        <register type="NOA" address="0x00009888" value="0x06DB0900" />
+        <register type="NOA" address="0x00009888" value="0x08DB0A13" />
+        <register type="NOA" address="0x00009888" value="0x0ADB0B15" />
+        <register type="NOA" address="0x00009888" value="0x0CDB2317" />
+        <register type="NOA" address="0x00009888" value="0x04DB21B7" />
+        <register type="NOA" address="0x00009888" value="0x10DB0000" />
+        <register type="NOA" address="0x00009888" value="0x0EDB0000" />
+        <register type="NOA" address="0x00009888" value="0x1ADB0000" />
+        <register type="NOA" address="0x00009888" value="0x0C9FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E9FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x109F02AA" />
+        <register type="NOA" address="0x00009888" value="0x00B84000" />
+        <register type="NOA" address="0x00009888" value="0x0EB84000" />
+        <register type="NOA" address="0x00009888" value="0x16B84000" />
+        <register type="NOA" address="0x00009888" value="0x18B81555" />
+        <register type="NOA" address="0x00009888" value="0x02B84000" />
+        <register type="NOA" address="0x00009888" value="0x04B84000" />
+        <register type="NOA" address="0x00009888" value="0x06B84000" />
+        <register type="NOA" address="0x00009888" value="0x08B84000" />
+        <register type="NOA" address="0x00009888" value="0x0AB84000" />
+        <register type="NOA" address="0x00009888" value="0x00B9A000" />
+        <register type="NOA" address="0x00009888" value="0x06B98000" />
+        <register type="NOA" address="0x00009888" value="0x08B9A000" />
+        <register type="NOA" address="0x00009888" value="0x0AB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0CB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0EB9A000" />
+        <register type="NOA" address="0x00009888" value="0x02B9A000" />
+        <register type="NOA" address="0x00009888" value="0x04B9A000" />
+        <register type="NOA" address="0x00009888" value="0x01888000" />
+        <register type="NOA" address="0x00009888" value="0x0D88F800" />
+        <register type="NOA" address="0x00009888" value="0x0F88000F" />
+        <register type="NOA" address="0x00009888" value="0x03888000" />
+        <register type="NOA" address="0x00009888" value="0x05888000" />
+        <register type="NOA" address="0x00009888" value="0x07888000" />
+        <register type="NOA" address="0x00009888" value="0x09888000" />
+        <register type="NOA" address="0x00009888" value="0x0B888000" />
+        <register type="NOA" address="0x00009888" value="0x238B5540" />
+        <register type="NOA" address="0x00009888" value="0x258BAAA2" />
+        <register type="NOA" address="0x00009888" value="0x278B002A" />
+        <register type="NOA" address="0x00009888" value="0x018C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8C4000" />
+        <register type="NOA" address="0x00009888" value="0x178C2000" />
+        <register type="NOA" address="0x00009888" value="0x198C5500" />
+        <register type="NOA" address="0x00009888" value="0x1B8C0015" />
+        <register type="NOA" address="0x00009888" value="0x038C4000" />
+        <register type="NOA" address="0x00009888" value="0x058C4000" />
+        <register type="NOA" address="0x00009888" value="0x078C4000" />
+        <register type="NOA" address="0x00009888" value="0x098C4000" />
+        <register type="NOA" address="0x00009888" value="0x0B8C4000" />
+        <register type="NOA" address="0x00009888" value="0x018DA000" />
+        <register type="NOA" address="0x00009888" value="0x078D8000" />
+        <register type="NOA" address="0x00009888" value="0x098DA000" />
+        <register type="NOA" address="0x00009888" value="0x0B8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0D8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0F8DA000" />
+        <register type="NOA" address="0x00009888" value="0x038DA000" />
+        <register type="NOA" address="0x00009888" value="0x058DA000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="NOA"
+                     availability="$SubsliceMask 0x20 AND"
+                     priority="5"
+                     >
+        <register type="NOA" address="0x00009840" value="0x000000A0" />
+        <register type="NOA" address="0x00009888" value="0x10B800E0" />
+        <register type="NOA" address="0x00009888" value="0x14BA0160" />
+        <register type="NOA" address="0x00009888" value="0x16BA2800" />
+        <register type="NOA" address="0x00009888" value="0x18BA0120" />
+        <register type="NOA" address="0x00009888" value="0x0C9FA800" />
+        <register type="NOA" address="0x00009888" value="0x0E9FAA2A" />
+        <register type="NOA" address="0x00009888" value="0x109F02AA" />
+        <register type="NOA" address="0x00009888" value="0x0EB8A5C1" />
+        <register type="NOA" address="0x00009888" value="0x00B8A100" />
+        <register type="NOA" address="0x00009888" value="0x02B8204C" />
+        <register type="NOA" address="0x00009888" value="0x16B88000" />
+        <register type="NOA" address="0x00009888" value="0x18B802AA" />
+        <register type="NOA" address="0x00009888" value="0x04B80000" />
+        <register type="NOA" address="0x00009888" value="0x06B80000" />
+        <register type="NOA" address="0x00009888" value="0x08B88000" />
+        <register type="NOA" address="0x00009888" value="0x0AB88000" />
+        <register type="NOA" address="0x00009888" value="0x00B9A000" />
+        <register type="NOA" address="0x00009888" value="0x06B98000" />
+        <register type="NOA" address="0x00009888" value="0x08B9A000" />
+        <register type="NOA" address="0x00009888" value="0x0AB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0CB9A000" />
+        <register type="NOA" address="0x00009888" value="0x0EB9A000" />
+        <register type="NOA" address="0x00009888" value="0x02B9A000" />
+        <register type="NOA" address="0x00009888" value="0x04B9A000" />
+        <register type="NOA" address="0x00009888" value="0x00BA0011" />
+        <register type="NOA" address="0x00009888" value="0x06BA0900" />
+        <register type="NOA" address="0x00009888" value="0x08BA0A13" />
+        <register type="NOA" address="0x00009888" value="0x0ABA0B15" />
+        <register type="NOA" address="0x00009888" value="0x0CBA2317" />
+        <register type="NOA" address="0x00009888" value="0x04BA21B7" />
+        <register type="NOA" address="0x00009888" value="0x10BA0000" />
+        <register type="NOA" address="0x00009888" value="0x0EBA0000" />
+        <register type="NOA" address="0x00009888" value="0x1ABA0000" />
+        <register type="NOA" address="0x00009888" value="0x01888000" />
+        <register type="NOA" address="0x00009888" value="0x0D88F800" />
+        <register type="NOA" address="0x00009888" value="0x0F88000F" />
+        <register type="NOA" address="0x00009888" value="0x03888000" />
+        <register type="NOA" address="0x00009888" value="0x05888000" />
+        <register type="NOA" address="0x00009888" value="0x07888000" />
+        <register type="NOA" address="0x00009888" value="0x09888000" />
+        <register type="NOA" address="0x00009888" value="0x0B888000" />
+        <register type="NOA" address="0x00009888" value="0x238B5540" />
+        <register type="NOA" address="0x00009888" value="0x258BAAA2" />
+        <register type="NOA" address="0x00009888" value="0x278B002A" />
+        <register type="NOA" address="0x00009888" value="0x018C4000" />
+        <register type="NOA" address="0x00009888" value="0x0F8C4000" />
+        <register type="NOA" address="0x00009888" value="0x178C2000" />
+        <register type="NOA" address="0x00009888" value="0x198C5500" />
+        <register type="NOA" address="0x00009888" value="0x1B8C0015" />
+        <register type="NOA" address="0x00009888" value="0x038C4000" />
+        <register type="NOA" address="0x00009888" value="0x058C4000" />
+        <register type="NOA" address="0x00009888" value="0x078C4000" />
+        <register type="NOA" address="0x00009888" value="0x098C4000" />
+        <register type="NOA" address="0x00009888" value="0x0B8C4000" />
+        <register type="NOA" address="0x00009888" value="0x018DA000" />
+        <register type="NOA" address="0x00009888" value="0x078D8000" />
+        <register type="NOA" address="0x00009888" value="0x098DA000" />
+        <register type="NOA" address="0x00009888" value="0x0B8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0D8DA000" />
+        <register type="NOA" address="0x00009888" value="0x0F8DA000" />
+        <register type="NOA" address="0x00009888" value="0x038DA000" />
+        <register type="NOA" address="0x00009888" value="0x058DA000" />
+        <register type="NOA" address="0x00009888" value="0x1F85AA80" />
+        <register type="NOA" address="0x00009888" value="0x2185AAA2" />
+        <register type="NOA" address="0x00009888" value="0x2385002A" />
+        <register type="NOA" address="0x00009888" value="0x01834000" />
+        <register type="NOA" address="0x00009888" value="0x0F834000" />
+        <register type="NOA" address="0x00009888" value="0x19835400" />
+        <register type="NOA" address="0x00009888" value="0x1B830155" />
+        <register type="NOA" address="0x00009888" value="0x03834000" />
+        <register type="NOA" address="0x00009888" value="0x05834000" />
+        <register type="NOA" address="0x00009888" value="0x07834000" />
+        <register type="NOA" address="0x00009888" value="0x09834000" />
+        <register type="NOA" address="0x00009888" value="0x0B834000" />
+        <register type="NOA" address="0x00009888" value="0x0184C000" />
+        <register type="NOA" address="0x00009888" value="0x07848000" />
+        <register type="NOA" address="0x00009888" value="0x0984C000" />
+        <register type="NOA" address="0x00009888" value="0x0B84C000" />
+        <register type="NOA" address="0x00009888" value="0x0D84C000" />
+        <register type="NOA" address="0x00009888" value="0x0F84C000" />
+        <register type="NOA" address="0x00009888" value="0x0384C000" />
+        <register type="NOA" address="0x00009888" value="0x0584C000" />
+        <register type="NOA" address="0x00009888" value="0x1180C000" />
+        <register type="NOA" address="0x00009888" value="0x17808000" />
+        <register type="NOA" address="0x00009888" value="0x1980C000" />
+        <register type="NOA" address="0x00009888" value="0x1B80C000" />
+        <register type="NOA" address="0x00009888" value="0x1D80C000" />
+        <register type="NOA" address="0x00009888" value="0x1F80C000" />
+        <register type="NOA" address="0x00009888" value="0x1380C000" />
+        <register type="NOA" address="0x00009888" value="0x1580C000" />
+        <register type="NOA" address="0x00000D24" value="0x00000000" />
+        <register type="NOA" address="0x00009888" value="0x4D800000" />
+        <register type="NOA" address="0x00009888" value="0x3D800000" />
+        <register type="NOA" address="0x00009888" value="0x4F800000" />
+        <register type="NOA" address="0x00009888" value="0x43800000" />
+        <register type="NOA" address="0x00009888" value="0x51800000" />
+        <register type="NOA" address="0x00009888" value="0x45800000" />
+        <register type="NOA" address="0x00009888" value="0x53800000" />
+        <register type="NOA" address="0x00009888" value="0x47800420" />
+        <register type="NOA" address="0x00009888" value="0x21800000" />
+        <register type="NOA" address="0x00009888" value="0x31800000" />
+        <register type="NOA" address="0x00009888" value="0x3F800421" />
+        <register type="NOA" address="0x00009888" value="0x41800000" />
+        <register type="NOA" address="0x00009840" value="0x00000080" />
+    </register_config>
+    <register_config type="OA">
+        <register type="OA" address="0x00002724" value="0xF0800000" />
+        <register type="OA" address="0x00002720" value="0x00000000" />
+        <register type="OA" address="0x00002714" value="0xF0800000" />
+        <register type="OA" address="0x00002710" value="0x00000000" />
+        <register type="OA" address="0x00002740" value="0x00000000" />
+        <register type="OA" address="0x00002770" value="0x0007FC2A" />
+        <register type="OA" address="0x00002774" value="0x0000BF00" />
+        <register type="OA" address="0x00002778" value="0x0007FC6A" />
+        <register type="OA" address="0x0000277C" value="0x0000BF00" />
+        <register type="OA" address="0x00002780" value="0x0007FC92" />
+        <register type="OA" address="0x00002784" value="0x0000BF00" />
+        <register type="OA" address="0x00002788" value="0x0007FCA2" />
+        <register type="OA" address="0x0000278C" value="0x0000BF00" />
+        <register type="OA" address="0x00002790" value="0x0007FC32" />
+        <register type="OA" address="0x00002794" value="0x0000BF00" />
+        <register type="OA" address="0x00002798" value="0x0007FC9A" />
+        <register type="OA" address="0x0000279C" value="0x0000BF00" />
+        <register type="OA" address="0x000027A0" value="0x0007FE6A" />
+        <register type="OA" address="0x000027A4" value="0x0000BF00" />
+        <register type="OA" address="0x000027A8" value="0x0007FE7A" />
+        <register type="OA" address="0x000027AC" value="0x0000BF00" />
+    </register_config>
+    <register_config type="FLEX">
+        <register type="FLEX" address="0x0000E458" value="0x00005004" />
+        <register type="FLEX" address="0x0000E558" value="0x00000003" />
+        <register type="FLEX" address="0x0000E658" value="0x00002001" />
+        <register type="FLEX" address="0x0000E758" value="0x00778008" />
+        <register type="FLEX" address="0x0000E45C" value="0x00088078" />
+        <register type="FLEX" address="0x0000E55C" value="0x00808708" />
+        <register type="FLEX" address="0x0000E65C" value="0x00A08908" />
+    </register_config>
+  </set>
+
+  <set name="Compute Metrics L3 Cache Gen8"
+       mdapi_supported_apis="OGL4 OCL IO BB"
+       underscore_name="compute_l3_cache"
+       hw_config_guid="27a364dc-8225-4ecb-b607-d6f1925598d9"
+       chipset="BDW"
+       symbol_name="ComputeL3Cache"
+       >
+    <counter name="GPU Core Clocks"
+             description="The total number of GPU core clocks elapsed during the measurement."
+             data_type="uint64"
+             equation="GPU_CLOCK 0 READ"
+             underscore_name="gpu_core_clocks"
+             units="cycles"
+             symbol_name="GpuCoreClocks"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier1 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="GPU"
+             />
+    <counter name="EU Active"
+             description="The percentage of time in which the Execution Units were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 7 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_active"
+             units="percent"
+             symbol_name="EuActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier2 Overview System Frame Batch Draw"
+             mdapi_group="EU Array"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Bank 03 Accesses"
+             description="The total number of accesses to L3 Bank 03."
+             data_type="uint64"
+             equation="B 3 READ 2 UMUL"
+             underscore_name="l3_bank03_accesses"
+             units="messages"
+             symbol_name="L3Bank03Accesses"
+             availability="$SliceMask 0x01 AND"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier4 Frame Batch Draw"
+             mdapi_hw_unit_type="slice"
+             mdapi_group="L3"
+             />
+    <counter name="L3 Accesses"
+             description="The total number of L3 accesses from all entities."
+             data_type="uint64"
+             equation="C 0 READ C 1 READ B 2 READ B 3 READ C 2 READ C 3 READ B 6 READ B 7 READ UADD UADD UADD UADD UADD UADD UADD 2 UMUL"
+             underscore_name="l3_accesses"
+             units="messages"
+             symbol_name="L3Accesses"
+             semantic_type="event"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_hw_unit_type="gpu"
+             mdapi_group="L3"
+             />
+    <counter name="EU Both FPU Pipes Active"
+             description="The percentage of time in which both EU FPU pipelines were actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 9 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="eu_fpu_both_active"
+             units="percent"
+             symbol_name="EuFpuBothActive"
+             semantic_type="duration"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="L3 Total Throughput"
+             description="The total number of GPU memory bytes transferred via L3."
+             data_type="uint64"
+             max_equation="$GpuCoreClocks 64 UMUL $EuSlicesTotalCount UMUL"
+             equation="$L3Accesses 64 UMUL"
+             underscore_name="l3_total_throughput"
+             units="bytes"
+             symbol_name="L3TotalThroughput"
+             semantic_type="throughput"
+             mdapi_supported_apis="OGL OCL IO BB"
+             mdapi_usage_flags="Tier3 Frame Batch Draw"
+             mdapi_group="L3"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU0 Pipe Active"
+             description="The percentage of time in which EU FPU0 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 10 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu0_active"
+             units="percent"
+             symbol_name="Fpu0Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OCL OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU FPU1 Pipe Active"
+             description="The percentage of time in which EU FPU1 pipeline was actively processing."
+             data_type="float"
+             max_equation="100"
+             equation="A 11 READ $EuCoresTotalCount UDIV 100 UMUL $GpuCoreClocks FDIV"
+             underscore_name="fpu1_active"
+             units="percent"
+             symbol_name="Fpu1Active"
+             semantic_type="duration"
+             mdapi_supported_apis="OCL OGL IO BB"
+             mdapi_usage_flags="Tier3 Overview System Frame Batch Draw"
+             mdapi_group="EU Array/Pipes"
+             mdapi_hw_unit_type="gpu"
+             />
+    <counter name="EU AVG IPC Rate"
+             description="The average rate of IPC calculated for 2 FPU pipelines."
+             data_type="float"
+             max_equation="2"
+             equation="A 9 READ  A 10 READ  A 11 READ UADD  A 9 READ USUB FDIV 1 FADD"
+