Skip to content
  • Leo Li's avatar
    drm/amd/display: Introduce overlay cursor mode · 1d0c9ded
    Leo Li authored and Zaeem Mohamed's avatar Zaeem Mohamed committed
    
    
    [Why]
    
    DCN is the display hardware for amdgpu. DRM planes are backed by DCN
    hardware pipes, which carry pixel data from one end (memory), to the
    other (output encoder).
    
    Each DCN pipe has the ability to blend in a cursor early on in the
    pipeline. In other words, there are no dedicated cursor planes in DCN,
    which makes cursor behavior somewhat unintuitive for compositors.
    
    For example, if the cursor is in RGB format, but the top-most DRM plane
    is in YUV format, DCN will not be able to blend them. Because of this,
    amdgpu_dm rejects all configurations where a cursor needs to be enabled
    on top of a YUV formatted plane.
    
    From a compositor's perspective, when computing an allocation for
    hardware plane offloading, this cursor-on-yuv configuration result in an
    atomic test failure. Since the failure reason is not obvious at all,
    compositors will likely fall back to full rendering, which is not ideal.
    
    Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
    configuration by opportunistically reserving a separate DCN pipe just
    for the cursor. We can refer to this as "overlay cursor mode". It is
    contrasted with "native cursor mode", where the native DCN per-pipe
    cursor is used.
    
    [How]
    
    On each crtc, compute whether the cursor plane should be enabled in
    overlay mode. If it is, mark the CRTC as requesting overlay cursor mode.
    
    Overlay cursor should be enabled whenever there exists a underlying
    plane that has YUV format, or is scaled differently than the cursor. It
    should also be enabled if there is no underlying plane, or if underlying
    planes do not cover the entire CRTC.
    
    During DC validation, attempt to enable a separate DCN pipe for the
    cursor if it's in overlay mode. If that fails, or if no overlay mode is
    requested, then fallback to native mode.
    
    v2:
    * Update commit message for when overlay cursor should be enabled
    * Also consider scale and no-underlying-plane case (cursor on crtc bg)
    * Consider all underlying planes when determinig overlay/native, not
      just the plane immediately beneath the cursor, as it may not cover the
      entire CRTC.
    * Fix typo s/decending/descending/
    * Force native cursor on pre-DCN hardware
    
    Reviewed-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Acked-by: default avatarZaeem Mohamed <zaeem.mohamed@amd.com>
    Signed-off-by: Leo Li's avatarLeo Li <sunpeng.li@amd.com>
    Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
    Acked-by: default avatarPekka Paalanen <pekka.paalanen@collabora.com>
    Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
    1d0c9ded