]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/display: remove duplicate format modifier
authorErik Kurzinger <ekurzinger@gmail.com>
Tue, 10 Feb 2026 20:08:15 +0000 (15:08 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 17 Mar 2026 14:39:13 +0000 (10:39 -0400)
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 <ekurzinger@gmail.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c

index d8c69fc94abbca9d896c50018dcfee121774d034..9de336776405165f8f997a2ec4140d25918f43ef 100644 (file)
@@ -707,21 +707,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]);