• Eric Anholt's avatar
    drm/vc4: Add a proper short-circut path for legacy cursor updates. · 6674a904
    Eric Anholt authored
    Previously, on every modeset we would allocate new display list
    memory, recompute changed planes, write all of them to the new memory,
    and pointed scanout at the new list (which will latch approximately at
    the next line of scanout).  We let
    drm_atomic_helper_wait_for_vblanks() decide whether we needed to wait
    for a vblank after a modeset before cleaning up the old state and
    letting the next modeset proceed, and on legacy cursor updates we
    wouldn't wait.  If you moved the cursor fast enough, we could
    potentially wrap around the display list memory area and overwrite the
    existing display list while it was still being scanned out, resulting
    in the HVS scanning out garbage or just halting.
    
    Instead of making cursor updates wait for scanout to move to the new
    display list area (which introduces significant cursor lag in X), we
    just rewrite our current display list.
    Signed-off-by: default avatarEric Anholt <eric@anholt.net>
    6674a904
vc4_plane.c 13 KB