On Tue, Feb 10, 2026 at 5:16 PM Erik Kurzinger <[email protected]> wrote:
>
> amdgpu_dm_plane_get_plane_modifiers always adds DRM_FORMAT_MOD_LINEAR to
> the list of modifiers. However, with gfx12,
> amdgpu_dm_plane_add_gfx12_modifiers also adds that modifier to the list.
> So we end up with two copies. Most apps just ignore this but some
> (Weston) don't like it.
>
> As a fix, we change amdgpu_dm_plane_add_gfx12_modifiers to not add
> DRM_FORMAT_MOD_LINEAR to the list, matching the behavior of analogous
> functions for other chips.
>
> Signed-off-by: Erik Kurzinger <[email protected]>

Acked-by: Alex Deucher <[email protected]>

> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> 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..a0a7c3b5ee03 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
> @@ -704,21 +704,21 @@ static void amdgpu_dm_plane_add_gfx12_modifiers(struct 
> amdgpu_device *adev,
>         uint8_t max_comp_block[] = {2, 1, 0};
>         uint64_t max_comp_block_mod[ARRAY_SIZE(max_comp_block)] = {0};
>         uint8_t i = 0, j = 0;
> -       uint64_t gfx12_modifiers[] = {mod_256k, mod_64k, mod_4k, mod_256b, 
> DRM_FORMAT_MOD_LINEAR};
> +       /* Note, linear (no DCC) gets added to the modifier list for all 
> chips by the caller. */
> +       uint64_t gfx12_modifiers[] = {mod_256k, mod_64k, mod_4k, mod_256b};
>
>         for (i = 0; i < ARRAY_SIZE(max_comp_block); i++)
>                 max_comp_block_mod[i] = 
> AMD_FMT_MOD_SET(DCC_MAX_COMPRESSED_BLOCK, max_comp_block[i]);
>
>         /* With DCC: Best choice should be kept first. Hence, add all 256k 
> modifiers of different
>          * max compressed blocks first and then move on to the next smaller 
> sized layouts.
> -        * Do not add the linear modifier here, and hence the condition of 
> size-1 for the loop
>          */
> -       for (j = 0; j < ARRAY_SIZE(gfx12_modifiers) - 1; j++)
> +       for (j = 0; j < ARRAY_SIZE(gfx12_modifiers); j++)
>                 for (i = 0; i < ARRAY_SIZE(max_comp_block); i++)
>                         amdgpu_dm_plane_add_modifier(mods, size, capacity,
>                                                      ver | dcc | 
> max_comp_block_mod[i] | gfx12_modifiers[j]);
>
> -       /* Without DCC. Add all modifiers including linear at the end */
> +       /* Without DCC. */
>         for (i = 0; i < ARRAY_SIZE(gfx12_modifiers); i++)
>                 amdgpu_dm_plane_add_modifier(mods, size, capacity, 
> gfx12_modifiers[i]);
>
> --
> 2.53.0
>

Reply via email to