diff options
author | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2019-01-11 13:32:44 +0000 |
---|---|---|
committer | Tvrtko Ursulin <tvrtko.ursulin@intel.com> | 2019-02-01 09:34:09 +0000 |
commit | 29c60957d191c3393be36dddf834757fdd4b29fb (patch) | |
tree | 15404e503d4417639b984ce8774c651ff5d687cd | |
parent | 2f60b10d484e5820c6cd6da65609599e56b9bfbf (diff) |
sseu vengveng-tooling
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
-rw-r--r-- | benchmarks/gem_wsim.c | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/benchmarks/gem_wsim.c b/benchmarks/gem_wsim.c index 4289a66d..45bf780e 100644 --- a/benchmarks/gem_wsim.c +++ b/benchmarks/gem_wsim.c @@ -382,7 +382,7 @@ static int parse_engine_map(struct w_step *step, const char *_str) if ((int)engine < 0) return -1; - if (engine != VCS1 && engine != VCS2) + if (engine != VCS1 && engine != VCS2 && engine != RCS) return -1; /* TODO */ step->engine_map_count++; @@ -1092,7 +1092,7 @@ static void __ctx_set_prio(uint32_t ctx_id, unsigned int prio) } static uint64_t -set_ctx_sseu(uint32_t ctx, uint64_t slice_mask) +set_ctx_sseu(struct ctx *ctx, uint64_t slice_mask) { struct drm_i915_gem_context_param_sseu sseu = device_sseu; struct drm_i915_gem_context_param param = { }; @@ -1100,10 +1100,17 @@ set_ctx_sseu(uint32_t ctx, uint64_t slice_mask) if (slice_mask == -1) slice_mask = device_sseu.slice_mask; +printf("set_ctx_sseu ctx_id=%u=%lx\n", ctx->id, slice_mask); +if (ctx->engine_map && ctx->wants_balance) { +printf(" -> veng\n"); + sseu.flags = 1; + sseu.engine_class = -1; +} sseu.slice_mask = slice_mask; - param.ctx_id = ctx; + param.ctx_id = ctx->id; param.param = I915_CONTEXT_PARAM_SSEU; + param.size = sizeof(sseu); param.value = (uintptr_t)&sseu; gem_context_set_param(fd, ¶m); @@ -1378,10 +1385,16 @@ prepare_workload(unsigned int id, struct workload *wrk, unsigned int flags) I915_ENGINE_CLASS_INVALID_NONE; for (j = 1; j <= ctx->engine_map_count; j++) { - set_engines.engines[j].class = - I915_ENGINE_CLASS_VIDEO; /* FIXME */ - set_engines.engines[j].instance = - ctx->engine_map[j] - VCS1; /* FIXME */ + if (ctx->engine_map[j] == RCS) { + set_engines.engines[j].class = + I915_ENGINE_CLASS_RENDER; + set_engines.engines[j].instance = 0; /* FIXME */ + } else { + set_engines.engines[j].class = + I915_ENGINE_CLASS_VIDEO; /* FIXME */ + set_engines.engines[j].instance = + ctx->engine_map[j] - VCS1; /* FIXME */ + } } if (ctx->bond_count) { @@ -1445,7 +1458,7 @@ prepare_workload(unsigned int id, struct workload *wrk, unsigned int flags) if (wrk->sseu) { /* Set to slice 0 only, one slice. */ - ctx->sseu = set_ctx_sseu(ctx_id, 1); + ctx->sseu = set_ctx_sseu(ctx, 1); } } @@ -2416,9 +2429,11 @@ static void *run_workload(void *data) w->type == BOND) { continue; } else if (w->type == SSEU) { - if (w->sseu != wrk->ctx_list[w->context].sseu) { - wrk->ctx_list[w->context].sseu = - set_ctx_sseu(wrk->ctx_list[w->context].id, +printf("sseu=%u ctx=%u:%u sseu=%lx\n", + w->sseu, w->context * 2, wrk->ctx_list[w->context * 2].id, wrk->ctx_list[w->context].sseu); + if (w->sseu != wrk->ctx_list[w->context * 2].sseu) { + wrk->ctx_list[w->context * 2].sseu = + set_ctx_sseu(&wrk->ctx_list[w->context * 2], w->sseu); } continue; @@ -2744,6 +2759,7 @@ static void get_device_sseu(void) param.param = I915_CONTEXT_PARAM_SSEU; param.value = (uintptr_t)&device_sseu; + param.size = sizeof(device_sseu); gem_context_get_param(fd, ¶m); } |