From d71563162328ef0c78e8372a455e3e2aeebf39df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 18 May 2023 16:41:36 -0400 Subject: [PATCH] ac/surface: fix is_linear for stencil-only surfaces Reviewed-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/common/ac_surface.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index d5f3d7fc824..ac7b95aa892 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -1434,7 +1434,9 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *i surf->flags &= ~RADEON_SURF_TC_COMPATIBLE_HTILE; } - surf->is_linear = surf->u.legacy.level[0].mode == RADEON_SURF_MODE_LINEAR_ALIGNED; + surf->is_linear = (only_stencil ? surf->u.legacy.zs.stencil_level[0].mode : + surf->u.legacy.level[0].mode) == RADEON_SURF_MODE_LINEAR_ALIGNED; + surf->is_displayable = surf->is_linear || surf->micro_tile_mode == RADEON_MICRO_MODE_DISPLAY || surf->micro_tile_mode == RADEON_MICRO_MODE_RENDER; @@ -2385,7 +2387,8 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ return r; } - surf->is_linear = surf->u.gfx9.swizzle_mode == ADDR_SW_LINEAR; + surf->is_linear = (only_stencil ? surf->u.gfx9.zs.stencil_swizzle_mode : + surf->u.gfx9.swizzle_mode) == ADDR_SW_LINEAR; /* Query whether the surface is displayable. */ /* This is only useful for surfaces that are allocated without SCANOUT. */