• Mario Kleiner's avatar
    drm/amd/display: Add support for SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616. · 050cd3d6
    Mario Kleiner authored
    Add the necessary format definition, bandwidth and pixel size mappings,
    prescaler setup, and pixelformat selection, following the logic
    already present for SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616.
    
    The new SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616 is implemented as the
    old SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616 format, but with swapped
    red <-> green color channel, by use of the hardware xbar.
    
    Please note that on the DCN 1/2/3 display engines, the pixelformat
    in hubp and dpp setup for the old SURFACE_PIXEL_FORMAT_GRPH_ARGB16161616
    and the new SURFACE_PIXEL_FORMAT_GRPH_ABGR16161616 was changed from
    format id 22 to id 26. See amd/include/navi10_enum.h for the meaning
    of the id's.
    
    For format 22, the display engine read the framebuffer in 16 bpc format,
    but truncated to the 12 bpc actually supported by later pipeline stages.
    However, the engine took the 12 LSB of each color component for
    truncation, which is incompatible with rendering at least under Vulkan,
    where content is 16 bit wide, and a 12 MSB alignment would be appropriate,
    if any. Format 20 for ARGB16161616_12MSB does work, but even better, we
    can choose format 26 for ARGB16161616_UNORM, keeping all 16 bits around
    until later stages of the display pipeline.
    
    This allows to directly consume what the rendering hw produces under
    Vulkan for swapchain format VK_FORMAT_R16G16B16A16_UNORM, as tested
    with a patched version of the current AMD open-source amdvlk driver
    which maps swapchain format VK_FORMAT_R16G16B16A16_UNORM onto
    DRM_FORMAT_XBGR16161616.
    
    The old id 22 would cause colorful pixeltrash to be displayed instead.
    
    Tested under DCN-1.0 and DCE-11.2.
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
    050cd3d6
dcn10_hubbub.c 33.9 KB