From 834c9575b281f72385085fc1b9adca3893c9c71e Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Wed, 13 Nov 2013 13:14:46 -0800 Subject: [PATCH] i965: Add functions to start and stop the OA counters. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt --- .../dri/i965/brw_performance_monitor.c | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_performance_monitor.c b/src/mesa/drivers/dri/i965/brw_performance_monitor.c index fbce35bfb9a..85c395b3aed 100644 --- a/src/mesa/drivers/dri/i965/brw_performance_monitor.c +++ b/src/mesa/drivers/dri/i965/brw_performance_monitor.c @@ -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. -- 2.30.2