From 1b3dbde3b9d4773a07a2de9c5bdb223c6e8cf3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 31 Mar 2021 07:58:28 -0400 Subject: [PATCH] ac/surface: only apply the 3D swizzle mode tuning to gfx10+ This fixes an addrlib failure on gfx9. Fixes: b43f40166cd "ac/surface: select best swizzle mode for 3D sampler performance" Reviewed-by: Pierre-Eric Pelloux-Prayer Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/common/ac_surface.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c index ea3c538e171..d5c1bf38305 100644 --- a/src/amd/common/ac_surface.c +++ b/src/amd/common/ac_surface.c @@ -1596,7 +1596,8 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib, const struct radeon_info *i } /* This is only called when expecting a tiled layout. */ -static int gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib, struct radeon_surf *surf, +static int gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib, const struct radeon_info *info, + struct radeon_surf *surf, ADDR2_COMPUTE_SURFACE_INFO_INPUT *in, bool is_fmask, AddrSwizzleMode *swizzle_mode) { @@ -1650,7 +1651,7 @@ static int gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib, struct radeon_su sin.preferredSwSet.sw_R = 1; } - if (in->resourceType == ADDR_RSRC_TEX_3D && in->numSlices > 1) { + if (info->chip_class >= GFX10 && in->resourceType == ADDR_RSRC_TEX_3D && in->numSlices > 1) { /* 3D textures should use S swizzle modes for the best performance. * THe only exception is 3D render targets, which prefer 64KB_D_X. * @@ -2133,7 +2134,7 @@ static int gfx9_compute_miptree(struct ac_addrlib *addrlib, const struct radeon_ fin.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_INPUT); fout.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_OUTPUT); - ret = gfx9_get_preferred_swizzle_mode(addrlib->handle, surf, in, true, &fin.swizzleMode); + ret = gfx9_get_preferred_swizzle_mode(addrlib->handle, info, surf, in, true, &fin.swizzleMode); if (ret != ADDR_OK) return ret; @@ -2385,7 +2386,7 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ break; } - r = gfx9_get_preferred_swizzle_mode(addrlib->handle, surf, &AddrSurfInfoIn, false, + r = gfx9_get_preferred_swizzle_mode(addrlib->handle, info, surf, &AddrSurfInfoIn, false, &AddrSurfInfoIn.swizzleMode); if (r) return r; @@ -2437,7 +2438,7 @@ static int gfx9_compute_surface(struct ac_addrlib *addrlib, const struct radeon_ AddrSurfInfoIn.format = ADDR_FMT_8; if (!AddrSurfInfoIn.flags.depth) { - r = gfx9_get_preferred_swizzle_mode(addrlib->handle, surf, &AddrSurfInfoIn, false, + r = gfx9_get_preferred_swizzle_mode(addrlib->handle, info, surf, &AddrSurfInfoIn, false, &AddrSurfInfoIn.swizzleMode); if (r) return r;