intel/perf: create a vtable entry for bo_busy
authorMark Janes <mark.a.janes@intel.com>
Fri, 28 Jun 2019 22:55:37 +0000 (15:55 -0700)
committerMark Janes <mark.a.janes@intel.com>
Thu, 8 Aug 2019 04:33:56 +0000 (21:33 -0700)
Iris and i965 variants of this method need to be called by perf
routines.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/perf/gen_perf.h
src/mesa/drivers/dri/i965/brw_performance_query.c

index 066a2a4ba21f8c234d65422a7965f4c482311bac..53608f917da5604345760afec8408a008874eb27 100644 (file)
@@ -221,6 +221,7 @@ struct gen_perf_config {
       void (*bo_unmap)(void *bo);
       bool (*batch_references)(void *batch, void *bo);
       void (*bo_wait_rendering)(void *bo);
+      int (*bo_busy)(void *bo);
       void (*emit_mi_flush)(void *ctx);
       void (*emit_mi_report_perf_count)(void *ctx,
                                         void *bo,
index addb989f47b0830c5f26b8e5ec3e562827a39156..6f55187ed797ac5e07c95ec995f77dcbfa786fce 100644 (file)
@@ -390,7 +390,7 @@ read_oa_samples_for_query(struct brw_context *brw,
    /* We need the MI_REPORT_PERF_COUNT to land before we can start
     * accumulate. */
    assert(!perf_cfg->vtbl.batch_references(&brw->batch, obj->oa.bo) &&
-          !brw_bo_busy(obj->oa.bo));
+          !perf_cfg->vtbl.bo_busy(obj->oa.bo));
 
    /* Map the BO once here and let accumulate_oa_reports() unmap
     * it. */
@@ -728,12 +728,12 @@ brw_is_perf_query_ready(struct gl_context *ctx,
       return (obj->oa.results_accumulated ||
               (obj->oa.bo &&
                !perf_cfg->vtbl.batch_references(&brw->batch, obj->oa.bo) &&
-               !brw_bo_busy(obj->oa.bo) &&
+               !perf_cfg->vtbl.bo_busy(obj->oa.bo) &&
                read_oa_samples_for_query(brw, obj)));
    case GEN_PERF_QUERY_TYPE_PIPELINE:
       return (obj->pipeline_stats.bo &&
               !perf_cfg->vtbl.batch_references(&brw->batch, obj->pipeline_stats.bo) &&
-              !brw_bo_busy(obj->pipeline_stats.bo));
+              !perf_cfg->vtbl.bo_busy(obj->pipeline_stats.bo));
 
    default:
       unreachable("Unknown query type");
@@ -1178,7 +1178,7 @@ typedef void (*store_register_mem64_t)(void *ctx, void *bo,
                                        uint32_t reg, uint32_t offset);
 typedef bool (*batch_references_t)(void *batch, void *bo);
 typedef void (*bo_wait_rendering_t)(void *bo);
-
+typedef int (*bo_busy_t)(void *bo);
 
 static unsigned
 brw_init_perf_query_info(struct gl_context *ctx)
@@ -1207,6 +1207,7 @@ brw_init_perf_query_info(struct gl_context *ctx)
       (store_register_mem64_t) brw_store_register_mem64;
    perf_cfg->vtbl.batch_references = (batch_references_t)brw_batch_references;
    perf_cfg->vtbl.bo_wait_rendering = (bo_wait_rendering_t)brw_bo_wait_rendering;
+   perf_cfg->vtbl.bo_busy = (bo_busy_t)brw_bo_busy;
 
    gen_perf_init_context(perf_ctx, perf_cfg, brw, brw->bufmgr, devinfo,
                          brw->hw_ctx, brw->screen->driScrnPriv->fd);