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

Chris Wilson chris at chris-wilson.co.uk
Fri May 10 13:26:10 UTC 2019


Quoting Tvrtko Ursulin (2019-05-08 13:10:48)
> From: Tvrtko Ursulin <tvrtko.ursulin at 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 at 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


More information about the igt-dev mailing list