[PATCH] drm/amd/display: Revert logic for plane modifiers
Rodrigo Siqueira Jordao
Rodrigo.Siqueira at amd.com
Thu Oct 20 12:35:23 UTC 2022
On 2022-10-19 11:15, Joaquín Ignacio Aramendía wrote:
> This file was split in commit 5d945cbcd4b16a29d6470a80dfb19738f9a4319f
> ("drm/amd/display: Create a file dedicated to planes") the logic in
> dm_plane_format_mod_supported() function got changed by a switch logic.
> That change broke drm_plane modifiers setting on series 5000 APUs
> (tested on OXP mini AMD 5800U and HP Dev One 5850U PRO)
> leading to Gamescope not working as reproted on GitHub[1]
>
> To reproduce the issue, enter a TTY and run:
>
> $ gamescope -- vkcube
>
> With said commit applied it will abort. This one restores the old logic,
> fixing the issue that affects Gamescope.
>
> [1](https://github.com/Plagman/gamescope/issues/624>>
> Signed-off-by: Joaquín Ignacio Aramendía <samsagax at gmail.com>
> ---
> .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 50 +++----------------
> 1 file changed, 8 insertions(+), 42 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 dfd3be49eac8..81c1fc9468b8 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
> @@ -1371,6 +1371,8 @@ static bool dm_plane_format_mod_supported(struct drm_plane *plane,
> const struct drm_format_info *info = drm_format_info(format);
> struct hw_asic_id asic_id = adev->dm.dc->ctx->asic_id;
Hi,
First of all, thanks a lot for this patch.
You can drop asic_id since it is not used anymore.
Thanks
Siqueira
>
> + int i;
> +
> enum dm_micro_swizzle microtile = modifier_gfx9_swizzle_mode(modifier) & 3;
>
> if (!info)
> @@ -1386,49 +1388,13 @@ static bool dm_plane_format_mod_supported(struct drm_plane *plane,
> return true;
> }
>
> - /* check if swizzle mode is supported by this version of DCN */
> - switch (asic_id.chip_family) {
> - case FAMILY_SI:
> - case FAMILY_CI:
> - case FAMILY_KV:
> - case FAMILY_CZ:
> - case FAMILY_VI:
> - /* asics before AI does not have modifier support */
> - return false;
> - case FAMILY_AI:
> - case FAMILY_RV:
> - case FAMILY_NV:
> - case FAMILY_VGH:
> - case FAMILY_YELLOW_CARP:
> - case AMDGPU_FAMILY_GC_10_3_6:
> - case AMDGPU_FAMILY_GC_10_3_7:
> - switch (AMD_FMT_MOD_GET(TILE, modifier)) {
> - case AMD_FMT_MOD_TILE_GFX9_64K_R_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_D_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_S_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_D:
> - return true;
> - default:
> - return false;
> - }
> - break;
> - case AMDGPU_FAMILY_GC_11_0_0:
> - case AMDGPU_FAMILY_GC_11_0_1:
> - switch (AMD_FMT_MOD_GET(TILE, modifier)) {
> - case AMD_FMT_MOD_TILE_GFX11_256K_R_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_R_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_D_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_S_X:
> - case AMD_FMT_MOD_TILE_GFX9_64K_D:
> - return true;
> - default:
> - return false;
> - }
> - break;
> - default:
> - ASSERT(0); /* Unknown asic */
> - break;
> + /* Check that the modifier is on the list of the plane's supported modifiers. */
> + for (i = 0; i < plane->modifier_count; i++) {
> + if (modifier == plane->modifiers[i])
> + break;
> }
> + if (i == plane->modifier_count)
> + return false;
>
> /*
> * For D swizzle the canonical modifier depends on the bpp, so check
More information about the amd-gfx
mailing list