mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
intel/perf: Fix OA report accumulation on Gfx12+.
The intel_perf_query path used for performance queries on GL was passing a bogus "end" pointer to intel_perf_query_result_accumulate(), causing it to accumulate garbage values. This was causing the values of many performance counters to be corrupted. The "end" pointer was incorrect because the current code was assuming that different OA reports were located TOTAL_QUERY_DATA_SIZE bytes apart, which is a hard-coded preprocessor define. However recent (Gfx12+) hardware generations use a variable query size determined by the query layout. Use the size derived from it instead, and remove the stale define. Fixes:3c51325025("intel/perf: switch query code to use query layout") Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15783> (cherry picked from commite858da39e5)
This commit is contained in:
parent
81441ed116
commit
c554672096
2 changed files with 5 additions and 18 deletions
|
|
@ -2916,7 +2916,7 @@
|
|||
"description": "intel/perf: Fix OA report accumulation on Gfx12+.",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"because_sha": "3c513250255d6ad031b8574ed7bb54a1e1ccdeef"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -48,19 +48,6 @@
|
|||
|
||||
#define ALIGN(x, y) (((x) + (y)-1) & ~((y)-1))
|
||||
|
||||
/* Align to 64bytes, requirement for OA report write address. */
|
||||
#define TOTAL_QUERY_DATA_SIZE \
|
||||
ALIGN(256 /* OA report */ + \
|
||||
4 /* freq register */ + \
|
||||
8 + 8 /* perf counter 1 & 2 */, \
|
||||
64)
|
||||
|
||||
|
||||
static uint32_t field_offset(bool end, uint32_t offset)
|
||||
{
|
||||
return (end ? TOTAL_QUERY_DATA_SIZE : 0) + offset;
|
||||
}
|
||||
|
||||
#define MAP_READ (1 << 0)
|
||||
#define MAP_WRITE (1 << 1)
|
||||
|
||||
|
|
@ -1089,8 +1076,8 @@ read_oa_samples_for_query(struct intel_perf_context *perf_ctx,
|
|||
if (query->oa.map == NULL)
|
||||
query->oa.map = perf_cfg->vtbl.bo_map(perf_ctx->ctx, query->oa.bo, MAP_READ);
|
||||
|
||||
start = last = query->oa.map + field_offset(false, 0);
|
||||
end = query->oa.map + field_offset(true, 0);
|
||||
start = last = query->oa.map;
|
||||
end = query->oa.map + perf_ctx->perf->query_layout.size;
|
||||
|
||||
if (start[0] != query->oa.begin_report_id) {
|
||||
DBG("Spurious start report id=%"PRIu32"\n", start[0]);
|
||||
|
|
@ -1280,8 +1267,8 @@ accumulate_oa_reports(struct intel_perf_context *perf_ctx,
|
|||
|
||||
assert(query->oa.map != NULL);
|
||||
|
||||
start = last = query->oa.map + field_offset(false, 0);
|
||||
end = query->oa.map + field_offset(true, 0);
|
||||
start = last = query->oa.map;
|
||||
end = query->oa.map + perf_ctx->perf->query_layout.size;
|
||||
|
||||
if (start[0] != query->oa.begin_report_id) {
|
||||
DBG("Spurious start report id=%"PRIu32"\n", start[0]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue