@@ -689,13 +689,32 @@ static void amdgpu_dm_plane_add_gfx12_modifiers(struct amdgpu_device *adev,
689689 uint64_t * * mods , uint64_t * size , uint64_t * capacity )
690690{
691691 uint64_t ver = AMD_FMT_MOD | AMD_FMT_MOD_SET (TILE_VERSION , AMD_FMT_MOD_TILE_VER_GFX12 );
692+ uint64_t mod_256k = ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_256K_2D );
693+ uint64_t mod_64k = ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_64K_2D );
694+ uint64_t mod_4k = ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_4K_2D );
695+ uint64_t mod_256b = ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_256B_2D );
696+ uint64_t dcc = ver | AMD_FMT_MOD_SET (DCC , 1 );
697+ uint8_t max_comp_block [] = {1 , 0 };
698+ uint64_t max_comp_block_mod [ARRAY_SIZE (max_comp_block )] = {0 };
699+ uint8_t i = 0 , j = 0 ;
700+ uint64_t gfx12_modifiers [] = {mod_256k , mod_64k , mod_4k , mod_256b , DRM_FORMAT_MOD_LINEAR };
701+
702+ for (i = 0 ; i < ARRAY_SIZE (max_comp_block ); i ++ )
703+ max_comp_block_mod [i ] = AMD_FMT_MOD_SET (DCC_MAX_COMPRESSED_BLOCK , max_comp_block [i ]);
704+
705+ /* With DCC: Best choice should be kept first. Hence, add all 256k modifiers of different
706+ * max compressed blocks first and then move on to the next smaller sized layouts.
707+ * Do not add the linear modifier here, and hence the condition of size-1 for the loop
708+ */
709+ for (j = 0 ; j < ARRAY_SIZE (gfx12_modifiers ) - 1 ; j ++ )
710+ for (i = 0 ; i < ARRAY_SIZE (max_comp_block ); i ++ )
711+ amdgpu_dm_plane_add_modifier (mods , size , capacity ,
712+ ver | dcc | max_comp_block_mod [i ] | gfx12_modifiers [j ]);
713+
714+ /* Without DCC. Add all modifiers including linear at the end */
715+ for (i = 0 ; i < ARRAY_SIZE (gfx12_modifiers ); i ++ )
716+ amdgpu_dm_plane_add_modifier (mods , size , capacity , gfx12_modifiers [i ]);
692717
693- /* Without DCC: */
694- amdgpu_dm_plane_add_modifier (mods , size , capacity , ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_256K_2D ));
695- amdgpu_dm_plane_add_modifier (mods , size , capacity , ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_64K_2D ));
696- amdgpu_dm_plane_add_modifier (mods , size , capacity , ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_4K_2D ));
697- amdgpu_dm_plane_add_modifier (mods , size , capacity , ver | AMD_FMT_MOD_SET (TILE , AMD_FMT_MOD_TILE_GFX12_256B_2D ));
698- amdgpu_dm_plane_add_modifier (mods , size , capacity , DRM_FORMAT_MOD_LINEAR );
699718}
700719
701720static int amdgpu_dm_plane_get_plane_modifiers (struct amdgpu_device * adev , unsigned int plane_type , uint64_t * * mods )
0 commit comments