Re: [igt-dev] [PATCH i-g-t 11/21] gem_wsim: Engine map support

Chris Wilson
2019-05-10T13:26:10Z

Quoting Tvrtko Ursulin (2019-05-08 13:10:48)
> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
>
> Support new i915 uAPI for configuring contexts with engine maps.
>
> Please refer to the README file for more detailed explanation.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
> ---
> +static int parse_engine_map(struct w_step *step, const char *_str)
> +{
> + char *token, *tctx = NULL, *tstart = (char *)_str;
> +
> + while ((token = strtok_r(tstart, "|", &tctx))) {
> + enum intel_engine_id engine;
> +
> + tstart = NULL;
> +
> + if (!strcmp(token, "DEFAULT"))
> + return -1;
> + else if (!strcmp(token, "VCS"))
> + return -1;
> +
> + engine = str_to_engine(token);
> + if ((int)engine < 0)
> + return -1;
> +
> + if (engine != VCS1 && engine != VCS2)
> + return -1; /* TODO */
> +
> + step->engine_map_count++;
> + step->engine_map = realloc(step->engine_map,
> + step->engine_map_count *
> + sizeof(step->engine_map[0]));
> + step->engine_map[step->engine_map_count - 1] = engine;

> + if (ctx->engine_map) {
> + I915_DEFINE_CONTEXT_PARAM_ENGINES(set_engines,
> + ctx->engine_map_count + 1);
> + struct drm_i915_gem_context_param param = {
> + .ctx_id = ctx_id,
> + .param = I915_CONTEXT_PARAM_ENGINES,
> + .size = sizeof(set_engines),
> + .value = to_user_pointer(&set_engines),
> + };
> +
> + set_engines.extensions = 0;
> +
> + /* Reserve slot for virtual engine. */
> + set_engines.engines[0].engine_class =
> + I915_ENGINE_CLASS_INVALID;
> + set_engines.engines[0].engine_instance =
> + I915_ENGINE_CLASS_INVALID_NONE;
> +
> + for (j = 1; j <= ctx->engine_map_count; j++) {
> + set_engines.engines[j].engine_class =
> + I915_ENGINE_CLASS_VIDEO; /* FIXME */
> + set_engines.engines[j].engine_instance =
> + ctx->engine_map[j - 1] - VCS1; /* FIXME */
> + }

I would suggest the file format starts with class:instance specifiers.
Too much FIXME that I think will need a file format change.
-Chris