From 9afa8cc555e8452081103f0d1258ece6c54d12ef Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Tue, 17 May 2022 14:27:09 -0400 Subject: [PATCH] panfrost: Support rendering to AFBC on Valhall Add the required handling when packing render target and depth buffer descriptors on Valhall. This is mostly equivalent to Bifrost. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/panfrost/lib/pan_cs.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/panfrost/lib/pan_cs.c b/src/panfrost/lib/pan_cs.c index 35747a84633..41b46a9a441 100644 --- a/src/panfrost/lib/pan_cs.c +++ b/src/panfrost/lib/pan_cs.c @@ -204,12 +204,18 @@ pan_prepare_zs(const struct pan_fb_info *fb, struct pan_surface surf; pan_iview_get_surface(zs, 0, 0, 0, &surf); + UNUSED const struct pan_image_slice_layout *slice = &zs->image->layout.slices[level]; if (drm_is_afbc(zs->image->layout.modifier)) { -#if PAN_ARCH <= 8 -#if PAN_ARCH >= 6 - const struct pan_image_slice_layout *slice = &zs->image->layout.slices[level]; +#if PAN_ARCH >= 9 + ext->zs_writeback_base = surf.afbc.header; + ext->zs_writeback_row_stride = slice->row_stride; + /* TODO: surface stride? */ + ext->zs_afbc_body_offset = surf.afbc.body - surf.afbc.header; + /* TODO: stencil AFBC? */ +#else +#if PAN_ARCH >= 6 ext->zs_afbc_row_stride = pan_afbc_stride_blocks(zs->image->layout.modifier, slice->row_stride); #else ext->zs_block_format = MALI_BLOCK_FORMAT_AFBC; @@ -473,7 +479,18 @@ pan_prepare_rt(const struct pan_fb_info *fb, unsigned idx, pan_iview_get_surface(rt, 0, 0, 0, &surf); if (drm_is_afbc(rt->image->layout.modifier)) { -#if PAN_ARCH <= 8 +#if PAN_ARCH >= 9 + if (rt->image->layout.modifier & AFBC_FORMAT_MOD_YTR) + cfg->afbc.yuv_transform = true; + + cfg->afbc.wide_block = panfrost_afbc_is_wide(rt->image->layout.modifier); + cfg->afbc.header = surf.afbc.header; + cfg->afbc.body_offset = surf.afbc.body - surf.afbc.header; + assert(surf.afbc.body >= surf.afbc.header); + + cfg->afbc.compression_mode = pan_afbc_compression_mode(rt->format); + cfg->afbc.row_stride = row_stride; +#else const struct pan_image_slice_layout *slice = &rt->image->layout.slices[level]; #if PAN_ARCH >= 6