Applied.  Thanks!

Alex

On Fri, Feb 6, 2026 at 5:39 PM Mario Kleiner <[email protected]> wrote:
>
> The plane scaling hw seems to have the same min/max plane scaling limits
> for all 16 bpc / 64 bpp interleaved pixel color formats.
>
> Therefore add cases to amdgpu_dm_plane_get_min_max_dc_plane_scaling() for
> all the 16 bpc fixed-point / unorm formats to use the same .fp16
> up/downscaling factor limits as used by the fp16 floating point formats.
>
> So far, 16 bpc unorm formats were not handled, and the default: path
> returned max/min factors for 32 bpp argb8888 formats, which were wrong
> and bigger than what many DCE / DCN hw generations could handle.
>
> The result sometimes was misscaling of framebuffers with
> DRM_FORMAT_XRGB16161616, DRM_FORMAT_ARGB16161616, DRM_FORMAT_XBGR16161616,
> DRM_FORMAT_ABGR16161616, leading to very wrong looking display, as tested
> on Polaris11 / DCE-11.2.
>
> So far this went unnoticed, because only few userspace clients used such
> 16 bpc unorm framebuffers, and those didn't use hw plane scaling, so they
> did not experience this issue.
>
> With upcoming Mesa 26 exposing 16 bpc unorm formats under both OpenGL
> and Vulkan under Wayland, and the upcoming GNOME 50 Mutter Wayland
> compositor allowing for direct scanout of these formats, the scaling
> hw will be used on these formats if possible for HiDPI display scaling,
> so it is important to use the correct hw scaling limits to avoid wrong
> display.
>
> Tested on AMD Polaris 11 / DCE 11.2 with upcoming Mesa 26 and GNOME 50
> on HiDPI displays with scaling enabled. The mutter Wayland compositor now
> correctly falls back to scaling via desktop compositing instead of direct
> scanout, thereby avoiding wrong image display. For unscaled mode, it
> correctly uses direct scanout.
>
> Fixes: 580204038f5b ("drm/amd/display: Enable support for 16 bpc fixed-point 
> framebuffers.")
> Signed-off-by: Mario Kleiner <[email protected]>
> Tested-by: Mario Kleiner <[email protected]>
> Cc: Alex Deucher <[email protected]>
> Cc: Harry Wentland <[email protected]>
> Cc: Leo Li <[email protected]>
> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> index d3e62f511c8f..394880ec1078 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
> @@ -1060,10 +1060,15 @@ static void 
> amdgpu_dm_plane_get_min_max_dc_plane_scaling(struct drm_device *dev,
>                 *min_downscale = plane_cap->max_downscale_factor.nv12;
>                 break;
>
> +       /* All 64 bpp formats have the same fp16 scaling limits */
>         case DRM_FORMAT_XRGB16161616F:
>         case DRM_FORMAT_ARGB16161616F:
>         case DRM_FORMAT_XBGR16161616F:
>         case DRM_FORMAT_ABGR16161616F:
> +       case DRM_FORMAT_XRGB16161616:
> +       case DRM_FORMAT_ARGB16161616:
> +       case DRM_FORMAT_XBGR16161616:
> +       case DRM_FORMAT_ABGR16161616:
>                 *max_upscale = plane_cap->max_upscale_factor.fp16;
>                 *min_downscale = plane_cap->max_downscale_factor.fp16;
>                 break;
> --
> 2.43.0
>

Reply via email to