• James Jones's avatar
    drm/nouveau: Accept 'legacy' format modifiers · faa0fcf9
    James Jones authored
    Accept the DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()
    family of modifiers to handle broken userspace
    Xorg modesetting and Mesa drivers. Existing Mesa
    drivers are still aware of only these older
    format modifiers which do not differentiate
    between different variations of the block linear
    layout. When the format modifier support flag was
    flipped in the nouveau kernel driver, the X.org
    modesetting driver began attempting to use its
    format modifier-enabled framebuffer path. Because
    the set of format modifiers advertised by the
    kernel prior to this change do not intersect with
    the set of format modifiers advertised by Mesa,
    allocating GBM buffers using format modifiers
    fails and the modesetting driver falls back to
    non-modifier allocation. However, it still later
    queries the modifier of the GBM buffer when
    creating its DRM-KMS framebuffer object, receives
    the old-format modifier from Mesa, and attempts
    to create a framebuffer with it. Since the kernel
    is still not aware of these formats, this fails.
    
    Userspace should not be attempting to query format
    modifiers of GBM buffers allocated with a non-
    format-modifier-aware allocation path, but to
    avoid breaking existing userspace behavior, this
    change accepts the old-style format modifiers when
    creating framebuffers and applying them to planes
    by translating them to the equivalent new-style
    modifier. To accomplish this, some layout
    parameters must be assumed to match properties of
    the device targeted by the relevant ioctls. To
    avoid perpetuating misuse of the old-style
    modifiers, this change does not advertise support
    for them. Doing so would imply compatibility
    between devices with incompatible memory layouts.
    
    Tested with Xorg 1.20 modesetting driver,
    weston@c46c70dac84a4b3030cd05b380f9f410536690fc,
    gnome & KDE wayland desktops from Ubuntu 18.04,
    and sway 1.5
    Reported-by: default avatarKirill A. Shutemov <kirill@shutemov.name>
    Fixes: fa4f4c21 ("drm/nouveau/kms: Support NVIDIA format modifiers")
    Link: https://lkml.org/lkml/2020/6/30/1251Signed-off-by: default avatarJames Jones <jajones@nvidia.com>
    Acked-by: default avatarBen Skeggs <bskeggs@redhat.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    faa0fcf9
nouveau_display.c 22.1 KB