diff options
author | Kenneth Graunke <[email protected]> | 2013-11-26 16:32:13 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2013-12-03 16:24:49 -0800 |
commit | da07e1b6837616ef101d1374dbff322694d6a7d9 (patch) | |
tree | dbc2e1535b5efcc2a2a93cedf6f65e95e085b29a /src/mesa/drivers | |
parent | 4c110994533c67f2e501cd32ee0c2f91060630e0 (diff) |
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 <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_performance_monitor.c | 12 |
1 files changed, 8 insertions, 4 deletions
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); } /******************************************************************************/ |