diff options
author | Mark Janes <[email protected]> | 2019-07-02 14:21:57 -0700 |
---|---|---|
committer | Mark Janes <[email protected]> | 2019-08-07 21:33:55 -0700 |
commit | 439d5a3eff188b4e0be42fd6da3a4d233fffcbf3 (patch) | |
tree | ce7860263b99a1e80828c6a47c001dadec48aafd /src | |
parent | ea66484e8604edf75df9f95c9e94b73f1e80639d (diff) |
intel/perf: create a vtable for low-level driver functions
Performance metrics collections requires several actions (eg bo_map())
that have different implementations for Iris and i965. The perf
subsystem needs a vtable for each of these actions, so it can invoke
the corresponding implementation for each driver.
The first call to be added to the table is bo_alloc.
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/intel/perf/gen_perf.h | 4 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_performance_query.c | 19 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/intel/perf/gen_perf.h b/src/intel/perf/gen_perf.h index f6de5caf8c9..fa7d7f87c57 100644 --- a/src/intel/perf/gen_perf.h +++ b/src/intel/perf/gen_perf.h @@ -188,6 +188,10 @@ struct gen_perf_config { /* Location of the device's sysfs entry. */ char sysfs_dev_dir[256]; + + struct { + void *(*bo_alloc)(void *bufmgr, const char *name, uint64_t size); + } vtbl; }; static inline size_t diff --git a/src/mesa/drivers/dri/i965/brw_performance_query.c b/src/mesa/drivers/dri/i965/brw_performance_query.c index 5a3794a113e..190769b92cc 100644 --- a/src/mesa/drivers/dri/i965/brw_performance_query.c +++ b/src/mesa/drivers/dri/i965/brw_performance_query.c @@ -1124,8 +1124,9 @@ brw_begin_perf_query(struct gl_context *ctx, } obj->oa.bo = - brw_bo_alloc(brw->bufmgr, "perf. query OA MI_RPC bo", MI_RPC_BO_SIZE, - BRW_MEMZONE_OTHER); + brw->perfquery.perf->vtbl.bo_alloc(brw->bufmgr, + "perf. query OA MI_RPC bo", + MI_RPC_BO_SIZE); #ifdef DEBUG /* Pre-filling the BO helps debug whether writes landed. */ void *map = brw_bo_map(brw, obj->oa.bo, MAP_WRITE); @@ -1182,8 +1183,9 @@ brw_begin_perf_query(struct gl_context *ctx, } obj->pipeline_stats.bo = - brw_bo_alloc(brw->bufmgr, "perf. query pipeline stats bo", - STATS_BO_SIZE, BRW_MEMZONE_OTHER); + brw->perfquery.perf->vtbl.bo_alloc(brw->bufmgr, + "perf. query pipeline stats bo", + STATS_BO_SIZE); /* Take starting snapshots. */ snapshot_statistics_registers(brw, obj, 0); @@ -1723,6 +1725,12 @@ oa_metrics_kernel_support(int fd, const struct gen_device_info *devinfo) return false; } +static void * +brw_oa_bo_alloc(void *bufmgr, const char *name, uint64_t size) +{ + return brw_bo_alloc(bufmgr, name, size, BRW_MEMZONE_OTHER); +} + static unsigned brw_init_perf_query_info(struct gl_context *ctx) { @@ -1735,6 +1743,9 @@ brw_init_perf_query_info(struct gl_context *ctx) brw->perfquery.perf = gen_perf_new(brw); + struct gen_perf_config *perf_cfg = brw->perfquery.perf; + perf_cfg->vtbl.bo_alloc = brw_oa_bo_alloc; + init_pipeline_statistic_query_registers(brw); brw_perf_query_register_mdapi_statistic_query(brw); |