Module: Mesa Branch: main Commit: e02a1f0a4456d6556b3a76105dd1c45c3829288f URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e02a1f0a4456d6556b3a76105dd1c45c3829288f
Author: Samuel Pitoiset <samuel.pitoi...@gmail.com> Date: Fri Nov 17 16:40:56 2023 +0100 ac/surface: change tile mode for 3D PRT surfaces with bpp < 64 on GFX6-8 This is loosely based on PAL. This seems to fix 3D PRT support with RADV on Polaris10. THIN means the tile is a 2D slice. THICK means the tile is a 3D box. Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26260> --- src/amd/common/ac_surface.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index ddba5c211a9..25832d8f966 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -809,11 +809,13 @@ static int gfx6_compute_level(ADDR_HANDLE addrlib, const struct ac_surf_config * surf_level->mode = RADEON_SURF_MODE_LINEAR_ALIGNED; break; case ADDR_TM_1D_TILED_THIN1: + case ADDR_TM_1D_TILED_THICK: case ADDR_TM_PRT_TILED_THIN1: surf_level->mode = RADEON_SURF_MODE_1D; break; case ADDR_TM_2D_TILED_THIN1: case ADDR_TM_PRT_2D_TILED_THIN1: + case ADDR_TM_PRT_TILED_THICK: surf_level->mode = RADEON_SURF_MODE_2D; break; default: @@ -1170,9 +1172,13 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *i AddrSurfInfoIn.tileMode = ADDR_TM_1D_TILED_THIN1; break; case RADEON_SURF_MODE_2D: - if (surf->flags & RADEON_SURF_PRT) - AddrSurfInfoIn.tileMode = ADDR_TM_PRT_2D_TILED_THIN1; - else + if (surf->flags & RADEON_SURF_PRT) { + if (config->is_3d && surf->bpe < 8) { + AddrSurfInfoIn.tileMode = ADDR_TM_PRT_2D_TILED_THICK; + } else { + AddrSurfInfoIn.tileMode = ADDR_TM_PRT_2D_TILED_THIN1; + } + } else AddrSurfInfoIn.tileMode = ADDR_TM_2D_TILED_THIN1; break; default: