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:
@@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user