ac/surface/gfx9: request desired micro tile mode explicitly

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
Marek Olšák 2018-04-02 12:54:52 -04:00
parent 5dd02123a0
commit b64b712558

View file

@ -814,7 +814,8 @@ static int gfx6_compute_surface(ADDR_HANDLE addrlib,
static int static int
gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib, gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib,
ADDR2_COMPUTE_SURFACE_INFO_INPUT *in, ADDR2_COMPUTE_SURFACE_INFO_INPUT *in,
bool is_fmask, AddrSwizzleMode *swizzle_mode) bool is_fmask, unsigned flags,
AddrSwizzleMode *swizzle_mode)
{ {
ADDR_E_RETURNCODE ret; ADDR_E_RETURNCODE ret;
ADDR2_GET_PREFERRED_SURF_SETTING_INPUT sin = {0}; ADDR2_GET_PREFERRED_SURF_SETTING_INPUT sin = {0};
@ -839,6 +840,13 @@ gfx9_get_preferred_swizzle_mode(ADDR_HANDLE addrlib,
sin.numSamples = in->numSamples; sin.numSamples = in->numSamples;
sin.numFrags = in->numFrags; sin.numFrags = in->numFrags;
if (flags & RADEON_SURF_SCANOUT)
sin.preferredSwSet.sw_D = 1;
else if (in->flags.depth || in->flags.stencil || is_fmask)
sin.preferredSwSet.sw_Z = 1;
else
sin.preferredSwSet.sw_S = 1;
if (is_fmask) { if (is_fmask) {
sin.flags.color = 0; sin.flags.color = 0;
sin.flags.fmask = 1; sin.flags.fmask = 1;
@ -1036,7 +1044,9 @@ static int gfx9_compute_miptree(ADDR_HANDLE addrlib,
fin.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_INPUT); fin.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_INPUT);
fout.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_OUTPUT); fout.size = sizeof(ADDR2_COMPUTE_FMASK_INFO_OUTPUT);
ret = gfx9_get_preferred_swizzle_mode(addrlib, in, true, &fin.swizzleMode); ret = gfx9_get_preferred_swizzle_mode(addrlib, in,
true, surf->flags,
&fin.swizzleMode);
if (ret != ADDR_OK) if (ret != ADDR_OK)
return ret; return ret;
@ -1232,7 +1242,8 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
break; break;
} }
r = gfx9_get_preferred_swizzle_mode(addrlib, &AddrSurfInfoIn, false, r = gfx9_get_preferred_swizzle_mode(addrlib, &AddrSurfInfoIn,
false, surf->flags,
&AddrSurfInfoIn.swizzleMode); &AddrSurfInfoIn.swizzleMode);
if (r) if (r)
return r; return r;
@ -1268,7 +1279,8 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib,
AddrSurfInfoIn.format = ADDR_FMT_8; AddrSurfInfoIn.format = ADDR_FMT_8;
if (!AddrSurfInfoIn.flags.depth) { if (!AddrSurfInfoIn.flags.depth) {
r = gfx9_get_preferred_swizzle_mode(addrlib, &AddrSurfInfoIn, false, r = gfx9_get_preferred_swizzle_mode(addrlib, &AddrSurfInfoIn,
false, surf->flags,
&AddrSurfInfoIn.swizzleMode); &AddrSurfInfoIn.swizzleMode);
if (r) if (r)
return r; return r;