From: Kenneth Graunke Date: Wed, 27 Nov 2013 00:32:13 +0000 (-0800) Subject: i965: Fix OACONTROL assertion failures on Ironlake. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=da07e1b6837616ef101d1374dbff322694d6a7d9;p=mesa.git i965: Fix OACONTROL assertion failures on Ironlake. I guarded half of the callers to start/stop_oa_counters with generation checks, but missed the other half (which were added later). OACONTROL doesn't exist on Ironlake, so we better not write it. Also, there's no need---Ironlake's performance counters are always running. This patch moves the generation checks into start/stop_oa_counters, rather than requiring the caller to do them. Fixes assertion failures in Piglit's AMD_performance_monitor/measure. Signed-off-by: Kenneth Graunke Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/brw_performance_monitor.c b/src/mesa/drivers/dri/i965/brw_performance_monitor.c index 9bddd8edf89..ff3cb97b1e1 100644 --- a/src/mesa/drivers/dri/i965/brw_performance_monitor.c +++ b/src/mesa/drivers/dri/i965/brw_performance_monitor.c @@ -642,6 +642,8 @@ start_oa_counters(struct brw_context *brw) /* Pick the counter format which gives us all the counters. */ switch (brw->gen) { + case 5: + return; /* Ironlake counters are always running. */ case 6: counter_format = 1; /* 0b001 */ break; @@ -667,6 +669,10 @@ start_oa_counters(struct brw_context *brw) static void stop_oa_counters(struct brw_context *brw) { + /* Ironlake counters never stop. */ + if (brw->gen == 5) + return; + BEGIN_BATCH(3); OUT_BATCH(MI_LOAD_REGISTER_IMM | (3 - 2)); OUT_BATCH(OACONTROL); @@ -1367,8 +1373,7 @@ brw_perf_monitor_new_batch(struct brw_context *brw) if (brw->perfmon.oa_users == 0) return; - if (brw->gen >= 6) - start_oa_counters(brw); + start_oa_counters(brw); /* Make sure bookend_bo has enough space for a pair of snapshots. * If not, "wrap" the BO: gather up any results so far, and start from @@ -1405,8 +1410,7 @@ brw_perf_monitor_finish_batch(struct brw_context *brw) emit_bookend_snapshot(brw); - if (brw->gen >= 6) - stop_oa_counters(brw); + stop_oa_counters(brw); } /******************************************************************************/