From ed6bf12d6608af1bc25d1cfdfae09f54e5566284 Mon Sep 17 00:00:00 2001 From: Mark Yacoub Date: Mon, 21 Jun 2021 13:21:46 -0400 Subject: lib/igt_fb: Support Tile Size for AMD non linear modifiers. Calculate the width and height of the tile on amdgpu when the modifier is not linear. v1: Change width_ret to bytes not pixels. Cc: bas@basnieuwenhuizen.nl Cc: daniel.vetter@ffwll.ch Signed-off-by: Mark Yacoub Reviewed-by: Rodrigo Siqueira --- lib/igt_fb.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/igt_fb.c b/lib/igt_fb.c index 71b89855..acb81518 100644 --- a/lib/igt_fb.c +++ b/lib/igt_fb.c @@ -396,6 +396,19 @@ void igt_get_fb_tile_size(int fd, uint64_t modifier, int fb_bpp, vc4_modifier_param = fourcc_mod_broadcom_param(modifier); modifier = fourcc_mod_broadcom_mod(modifier); } + // For all non-linear modifiers, AMD uses 64 KiB tiles + else if (IS_AMD_FMT_MOD(modifier)) { + const int bytes_per_pixel = fb_bpp / 8; + const int format_log2 = log2(bytes_per_pixel); + const int pixel_log2 = log2(64 * 1024) - format_log2; + const int width_log2 = (pixel_log2 + 1) / 2; + const int height_log2 = pixel_log2 - width_log2; + igt_require_amdgpu(fd); + + *width_ret = bytes_per_pixel << width_log2; + *height_ret = 1 << height_log2; + return; + } switch (modifier) { case LOCAL_DRM_FORMAT_MOD_NONE: -- cgit v1.2.3