Module: Mesa Branch: main Commit: 718b85a1f2f95a44f7e892b3831f83da05639551 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=718b85a1f2f95a44f7e892b3831f83da05639551
Author: Yogesh Mohan Marimuthu <[email protected]> Date: Fri Aug 11 14:28:10 2023 +0530 ac/surface: add astc block size to bpe_to_format() function v2: remove old comment (Chia-I Wu) v3: add comment on matching BC3 and ASTC4x4 (Chia-I Wu) Acked-by: : Chia-I Wu <[email protected]> Acked-by: Bas Nieuwenhuizen <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24672> --- src/amd/common/ac_surface.c | 54 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 271793798d1..f10f6dd4e17 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -636,18 +636,48 @@ static int surf_config_sanity(const struct ac_surf_config *config, unsigned flag static unsigned bpe_to_format(struct radeon_surf *surf) { - /* The format must be set correctly for the allocation of compressed - * textures to work. In other cases, setting the bpp is sufficient. - */ - if (surf->blk_w == 4 && surf->blk_h == 4) { - switch (surf->bpe) { - case 8: - return ADDR_FMT_BC1; - case 16: - return ADDR_FMT_BC3; - default: - unreachable("invalid compressed bpe"); - } + if (surf->blk_w != 1 || surf->blk_h != 1) { + if (surf->blk_w == 4 && surf->blk_h == 4) { + switch (surf->bpe) { + case 8: + return ADDR_FMT_BC1; + case 16: + /* since BC3 and ASTC4x4 has same blk dimension and bpe reporting BC3 also for ASTC4x4. + * matching is fine since addrlib needs only blk_w, blk_h and bpe to compute surface + * properties. + * TODO: If compress_type can be passed to this function, then this ugly BC3 and ASTC4x4 + * matching can be avoided. + */ + return ADDR_FMT_BC3; + default: + unreachable("invalid compressed bpe"); + } + } else if (surf->blk_w == 5 && surf->blk_h == 4) + return ADDR_FMT_ASTC_5x4; + else if (surf->blk_w == 5 && surf->blk_h == 5) + return ADDR_FMT_ASTC_5x5; + else if (surf->blk_w == 6 && surf->blk_h == 5) + return ADDR_FMT_ASTC_6x5; + else if (surf->blk_w == 6 && surf->blk_h == 6) + return ADDR_FMT_ASTC_6x6; + else if (surf->blk_w == 8 && surf->blk_h == 5) + return ADDR_FMT_ASTC_8x5; + else if (surf->blk_w == 8 && surf->blk_h == 6) + return ADDR_FMT_ASTC_8x6; + else if (surf->blk_w == 8 && surf->blk_h == 8) + return ADDR_FMT_ASTC_8x8; + else if (surf->blk_w == 10 && surf->blk_h == 5) + return ADDR_FMT_ASTC_10x5; + else if (surf->blk_w == 10 && surf->blk_h == 6) + return ADDR_FMT_ASTC_10x6; + else if (surf->blk_w == 10 && surf->blk_h == 8) + return ADDR_FMT_ASTC_10x8; + else if (surf->blk_w == 10 && surf->blk_h == 10) + return ADDR_FMT_ASTC_10x10; + else if (surf->blk_w == 12 && surf->blk_h == 10) + return ADDR_FMT_ASTC_12x10; + else if (surf->blk_w == 12 && surf->blk_h == 12) + return ADDR_FMT_ASTC_12x12; } else { switch (surf->bpe) { case 1:
