GFX6-8 are the oldest GPUs supported by the amdgpu kernel driver, and the last ones that didn't support DRM format modifiers until now.
On GFX6-8, the GFX block can only use pre-determined tiling modes which are programmed by the kernel according to the tiling mode table. The new modifiers encode all the details needed for tiling on these GPUs. For the exact details, see the commit message of: "drm/fourcc: Add modifiers for AMD GFX6-8" For a userspace implementation, see this Mesa MR: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41557 And for libdrm: https://gitlab.freedesktop.org/mesa/libdrm/-/merge_requests/481 This series of patches are on top of amd-staging-drm-next. Supporting DRM format modifiers on GFX6-8 will unblock many things in the Linux graphics ecosystem that previously either didn't work on these GPUs or had to implement fallbacks. For example, compositors written in Vulkan or compositors running on Zink, interop between different APIs (eg. VAAPI / OpenGL / Vulkan) etc. Changes from v1 to v2: * Fix checking DRM_FORMAT_MOD_INVALID Changes from v2 to v3: * Return -EINVAL when pipe_config is invalid * Log unsupported array mode with drm_dbg_kms() * Fix block size calculation in amdgpu_display_verify_sizes() * Add NULL check to amdgpu_dm_plane_add_modifier_dedup() * Fix tile size calculation to bits not bytes Changes from v3 to v4: * Reword and clarify some comments * Clarify check_tiling_flags_gfx6() and reject ROTATED mode * Calculate block size in bytes not pixels Timur Kristóf (4): drm/fourcc: Add modifiers for AMD GFX6-8 drm/amdgpu: Convert tiling flags to modifiers on GFX6-8 drm/amd/display: Support DRM format modifiers on GFX6-8 drm/amd/display: Don't use tiling flags anymore drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 177 ++++++++- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 29 +- .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 343 ++++++++++++++++-- .../amd/display/amdgpu_dm/amdgpu_dm_plane.h | 3 - .../amdgpu_dm/tests/amdgpu_dm_plane_test.c | 147 -------- include/uapi/drm/drm_fourcc.h | 209 ++++++++++- 6 files changed, 665 insertions(+), 243 deletions(-) -- 2.55.0
