i965: Add functions to start and stop the OA counters.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 13 Nov 2013 21:14:46 +0000 (13:14 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Nov 2013 23:01:14 +0000 (15:01 -0800)
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_performance_monitor.c

index fbce35bfb9a92067779004da8af54a8e085b1806..85c395b3aed511e576e6d9006eae4ce9a6817571 100644 (file)
@@ -603,6 +603,48 @@ monitor_needs_oa(struct brw_context *brw,
    return m->ActiveGroups[OA_COUNTERS];
 }
 
+/**
+ * Enable the Observability Architecture counters by whacking OACONTROL.
+ */
+static void
+start_oa_counters(struct brw_context *brw)
+{
+   unsigned counter_format;
+
+   /* Pick the counter format which gives us all the counters. */
+   switch (brw->gen) {
+   case 6:
+      counter_format = 1; /* 0b001 */
+      break;
+   case 7:
+      counter_format = 5; /* 0b101 */
+      break;
+   default:
+      assert(!"Tried to enable OA counters on an unsupported generation.");
+      return;
+   }
+
+   BEGIN_BATCH(3);
+   OUT_BATCH(MI_LOAD_REGISTER_IMM | (3 - 2));
+   OUT_BATCH(OACONTROL);
+   OUT_BATCH(counter_format << OACONTROL_COUNTER_SELECT_SHIFT |
+             OACONTROL_ENABLE_COUNTERS);
+   ADVANCE_BATCH();
+}
+
+/**
+ * Disable OA counters.
+ */
+static void
+stop_oa_counters(struct brw_context *brw)
+{
+   BEGIN_BATCH(3);
+   OUT_BATCH(MI_LOAD_REGISTER_IMM | (3 - 2));
+   OUT_BATCH(OACONTROL);
+   OUT_BATCH(0);
+   ADVANCE_BATCH();
+}
+
 /**
  * The amount of batch space it takes to emit an MI_REPORT_PERF_COUNT snapshot,
  * including the required PIPE_CONTROL flushes.