• Ville Syrjälä's avatar
    drm/i915: Deal with NV12 CbCr plane AUX surface on SKL+ · 8d970654
    Ville Syrjälä authored
    With NV12 we have two color planes to deal with so we must compute the
    surface and x/y offsets for the second plane as well.
    
    What makes this a bit nasty is that the hardware expects the surface
    offset to be specified as a distance from the main surface offset.
    What's worse, the distance must be non-negative (no neat wraparound or
    anything). So we must make sure that the main surface offset is always
    less or equal to the AUX surface offset. We do that by computing the AUX
    offset first and the main surface offset second. If the main surface
    offset ends up being above the AUX offset, we just push it down as far
    as is required while still maintaining the required alignment etc.
    
    Fortunately the AUX offset only reuqires 4K alignment, so we don't need
    to do any of the backwards searching for an acceptable offset that we
    must do for the main surface. And X tiled + NV12 isn't a supported
    combination anyway.
    
    Note that this just computes aux surface offsets, we do not yet program
    them into the actual hardware registers, and hence we can't yet expose
    NV12.
    
    v2: Rebase due to drm_plane_state src/dst rects
        s/TODO.../something else/ in the commit message/ (Daniel)
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/1470821001-25272-12-git-send-email-ville.syrjala@linux.intel.comReviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    8d970654
intel_drv.h 58.7 KB