• Oscar Mateo's avatar
    drm/i915/bdw: Introduce one context backing object per engine · c9e003af
    Oscar Mateo authored
    A context backing object only makes sense for a given engine (because
    it holds state data specific to that engine).
    
    In legacy ringbuffer sumission mode, the only MI_SET_CONTEXT we really
    perform is for the render engine, so one backing object is all we nee.
    
    With Execlists, however, we need backing objects for every engine, as
    contexts become the only way to submit workloads to the GPU. To tackle
    this problem, we multiplex the context struct to contain <no-of-engines>
    objects.
    
    Originally, I colored this code by instantiating one new context for
    every engine I wanted to use, but this change suggested by Brad Volkin
    makes it more elegant.
    
    v2: Leave the old backing object pointer behind. Daniel Vetter suggested
    using a union, but it makes more sense to keep rcs_state as a NULL
    pointer behind, to make sure no one uses it incorrectly when Execlists
    are enabled, similar to what he suggested for ring->buffer (Rusty's API
    level 5).
    
    v3: Use the name "state" instead of the too-generic "obj", so that it
    mirrors the name choice for the legacy rcs_state.
    Signed-off-by: default avatarOscar Mateo <oscar.mateo@intel.com>
    Reviewed-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    c9e003af
i915_drv.h 86.6 KB