summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTvrtko Ursulin <tvrtko.ursulin@intel.com>2019-01-11 13:32:44 +0000
committerTvrtko Ursulin <tvrtko.ursulin@intel.com>2019-02-01 09:34:09 +0000
commit29c60957d191c3393be36dddf834757fdd4b29fb (patch)
tree15404e503d4417639b984ce8774c651ff5d687cd
parent2f60b10d484e5820c6cd6da65609599e56b9bfbf (diff)
sseu vengveng-tooling
Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
-rw-r--r--benchmarks/gem_wsim.c38
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, &param);
@@ -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, &param);
}