@@ -689,13 +689,32 @@ static void amdgpu_dm_plane_add_gfx12_modifiers(struct amdgpu_device *adev,
689
689
uint64_t * * mods , uint64_t * size , uint64_t * capacity )
690
690
{
691
691
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 ]);
692
717
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 );
699
718
}
700
719
701
720
static int amdgpu_dm_plane_get_plane_modifiers (struct amdgpu_device * adev , unsigned int plane_type , uint64_t * * mods )
0 commit comments