Hi Nicolai, I happened to be writing something similar which also fixes up radv to never render to those surfaces as r32g32b32a32: https://patchwork.freedesktop.org/series/54172/ I can split out the radv specific stuff and this one is r-b after than.
Thanks, Bas On Tue, Dec 18, 2018 at 5:37 PM Nicolai Hähnle <nhaeh...@gmail.com> wrote: > > From: Nicolai Hähnle <nicolai.haeh...@amd.com> > > In the gfx9 addrlib, this bit has been clarified as meaning that > the surface can be used as a color buffer (render target). > > Setting this for compressed surfaces triggers a workaround that > is only required for surfaces that can be render targets, and ends > up breaking the 16-byte-per-block case. > > Fixes > dEQP-VK.pipeline.image.suballocation.sampling_type.combined.view_type.3d.format.etc2_r8g8b8a8_srgb_block.count_1.size.11x11x11 > and others > > Note that there are other related bits which we don't set as intended > by the interface, notably the 'unordered' bit, which is meant to > indicate use as a shader image. It may be worth cleaning that up at some > point after proper testing. > > Reported-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > Fixes: 776b9113656 ("amd/addrlib: update Mesa's copy of addrlib") > --- > src/amd/common/ac_surface.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/src/amd/common/ac_surface.c b/src/amd/common/ac_surface.c > index d8d927ee1c5..d647bd523f9 100644 > --- a/src/amd/common/ac_surface.c > +++ b/src/amd/common/ac_surface.c > @@ -1405,25 +1405,24 @@ static int gfx9_compute_surface(ADDR_HANDLE addrlib, > case 16: > assert(!(surf->flags & RADEON_SURF_Z_OR_SBUFFER)); > AddrSurfInfoIn.format = ADDR_FMT_32_32_32_32; > break; > default: > assert(0); > } > AddrSurfInfoIn.bpp = surf->bpe * 8; > } > > - AddrSurfInfoIn.flags.color = !(surf->flags & > RADEON_SURF_Z_OR_SBUFFER); > + AddrSurfInfoIn.flags.color = !compressed && !(surf->flags & > RADEON_SURF_Z_OR_SBUFFER); > AddrSurfInfoIn.flags.depth = (surf->flags & RADEON_SURF_ZBUFFER) != 0; > AddrSurfInfoIn.flags.display = get_display_flag(config, surf); > - /* flags.texture currently refers to TC-compatible HTILE */ > - AddrSurfInfoIn.flags.texture = AddrSurfInfoIn.flags.color || > + AddrSurfInfoIn.flags.texture = AddrSurfInfoIn.flags.color || > compressed || > surf->flags & > RADEON_SURF_TC_COMPATIBLE_HTILE; > AddrSurfInfoIn.flags.opt4space = 1; > > AddrSurfInfoIn.numMipLevels = config->info.levels; > AddrSurfInfoIn.numSamples = MAX2(1, config->info.samples); > AddrSurfInfoIn.numFrags = AddrSurfInfoIn.numSamples; > > if (!(surf->flags & RADEON_SURF_Z_OR_SBUFFER)) > AddrSurfInfoIn.numFrags = MAX2(1, > config->info.storage_samples); > > -- > 2.19.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev