ac/surface: only apply the 3D swizzle mode tuning to gfx10+

This fixes an addrlib failure on gfx9.

Fixes: b43f40166c "ac/surface: select best swizzle mode for 3D sampler performance"

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10003>
This commit is contained in:
Marek Olšák 2021-03-31 07:58:28 -04:00 committed by Marge Bot
parent ec42f52013
commit 1b3dbde3b9
1 changed files with 6 additions and 5 deletions

View File

@ -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;