i965: perf: store the hw_id of the context in the query

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Lionel Landwerlin
2018-02-07 18:10:57 +00:00
parent 80cd669a32
commit 5742b17da1

View File

@@ -278,6 +278,11 @@ struct brw_perf_query_object
*/ */
uint64_t accumulator[MAX_OA_REPORT_COUNTERS]; uint64_t accumulator[MAX_OA_REPORT_COUNTERS];
/**
* Hw ID used by the context on which the query was running.
*/
uint32_t hw_id;
/** /**
* false while in the unaccumulated_elements list, and set to * false while in the unaccumulated_elements list, and set to
* true when the final, end MI_RPC snapshot has been * true when the final, end MI_RPC snapshot has been
@@ -844,7 +849,6 @@ accumulate_oa_reports(struct brw_context *brw,
uint32_t *end; uint32_t *end;
struct exec_node *first_samples_node; struct exec_node *first_samples_node;
bool in_ctx = true; bool in_ctx = true;
uint32_t ctx_id;
int out_duration = 0; int out_duration = 0;
assert(o->Ready); assert(o->Ready);
@@ -862,7 +866,7 @@ accumulate_oa_reports(struct brw_context *brw,
goto error; goto error;
} }
ctx_id = start[2]; obj->oa.hw_id = start[2];
/* See if we have any periodic reports to accumulate too... */ /* See if we have any periodic reports to accumulate too... */
@@ -917,11 +921,11 @@ accumulate_oa_reports(struct brw_context *brw,
* of OA counters while any other context is acctive. * of OA counters while any other context is acctive.
*/ */
if (devinfo->gen >= 8) { if (devinfo->gen >= 8) {
if (in_ctx && report[2] != ctx_id) { if (in_ctx && report[2] != obj->oa.hw_id) {
DBG("i915 perf: Switch AWAY (observed by ID change)\n"); DBG("i915 perf: Switch AWAY (observed by ID change)\n");
in_ctx = false; in_ctx = false;
out_duration = 0; out_duration = 0;
} else if (in_ctx == false && report[2] == ctx_id) { } else if (in_ctx == false && report[2] == obj->oa.hw_id) {
DBG("i915 perf: Switch TO\n"); DBG("i915 perf: Switch TO\n");
in_ctx = true; in_ctx = true;
@@ -938,10 +942,10 @@ accumulate_oa_reports(struct brw_context *brw,
if (out_duration >= 1) if (out_duration >= 1)
add = false; add = false;
} else if (in_ctx) { } else if (in_ctx) {
assert(report[2] == ctx_id); assert(report[2] == obj->oa.hw_id);
DBG("i915 perf: Continuation IN\n"); DBG("i915 perf: Continuation IN\n");
} else { } else {
assert(report[2] != ctx_id); assert(report[2] != obj->oa.hw_id);
DBG("i915 perf: Continuation OUT\n"); DBG("i915 perf: Continuation OUT\n");
add = false; add = false;
out_duration++; out_duration++;
@@ -1251,6 +1255,7 @@ brw_begin_perf_query(struct gl_context *ctx,
*/ */
buf->refcount++; buf->refcount++;
obj->oa.hw_id = 0xffffffff;
memset(obj->oa.accumulator, 0, sizeof(obj->oa.accumulator)); memset(obj->oa.accumulator, 0, sizeof(obj->oa.accumulator));
obj->oa.results_accumulated = false; obj->oa.results_accumulated = false;