From 31d699106d036667751751eede4fedbeb4641436 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 16 Feb 2023 10:44:21 +0100 Subject: [PATCH] ac/surface: add RADEON_SURF_VRS_RATE for selecting swizzle mode on GFX11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On GFX11, VRS rate images can't use linear tiling and the swizzle mode must be either SW_Z or SW_R. Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák Part-of: --- src/amd/common/ac_surface.c | 8 ++++++++ src/amd/common/ac_surface.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index 6b3eb869475..2e7e27892de 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -2310,6 +2310,14 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ break; } + /* On GFX11, the only allowed swizzle mode for VRS rate images is + * 64KB_R_X. + */ + if (info->gfx_level >= GFX11 && surf->flags & RADEON_SURF_VRS_RATE) { + AddrSurfInfoIn.swizzleMode = ADDR_SW_64KB_R_X; + break; + } + r = gfx9_get_preferred_swizzle_mode(addrlib->handle, info, surf, &AddrSurfInfoIn, false, &AddrSurfInfoIn.swizzleMode); if (r) diff --git a/src/amd/common/ac_surface.h b/src/amd/common/ac_surface.h index 3a3c1a9afc2..35fb27fb487 100644 --- a/src/amd/common/ac_surface.h +++ b/src/amd/common/ac_surface.h @@ -88,6 +88,7 @@ enum radeon_micro_mode #define RADEON_SURF_NO_HTILE (1ull << 30) #define RADEON_SURF_FORCE_MICRO_TILE_MODE (1ull << 31) #define RADEON_SURF_PRT (1ull << 32) +#define RADEON_SURF_VRS_RATE (1ull << 33) struct legacy_surf_level { uint32_t offset_256B; /* divided by 256, the hw can only do 40-bit addresses */