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:
parent
ec42f52013
commit
1b3dbde3b9
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue