On Fri, Oct 23, 2015 at 12:17 PM, Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> wrote: > On Thu, Oct 22, 2015 at 12:12 PM, Marek Olšák <mar...@gmail.com> wrote: >>> diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c >>> b/src/gallium/drivers/radeonsi/si_descriptors.c >>> index 5548cba3..a277fa5 100644 >>> --- a/src/gallium/drivers/radeonsi/si_descriptors.c >>> +++ b/src/gallium/drivers/radeonsi/si_descriptors.c >>> @@ -234,7 +234,7 @@ static void si_set_sampler_views(struct pipe_context >>> *ctx, >>> } else { >>> samplers->depth_texture_mask &= ~(1 << >>> slot); >>> } >>> - if (rtex->cmask.size || rtex->fmask.size) { >>> + if (rtex->cmask.size || rtex->fmask.size || >>> rtex->surface.dcc_enabled) { >>> samplers->compressed_colortex_mask |= 1 << >>> slot; >> >> I'd like this flag to be set only when dirty_level_mask is non-zero. >> Setting this for all textures that have DCC is quite expensive in draw >> calls. > > I think this code is incorrect even without considering DCC. If we do > a fast clear on a surface which allocates a cmask and then use that > surface as a texture without calling set_sampler_views in between > (because it was bound before) we get a stale compressed_colortex_mask. > > Some testing shows that this can be triggered using OpenGL, although > the GL_ARB_texture_barrier extension may be needed to make the result > not undefined per the specification.
In that case, we should decompress in texture_barrier and not in draw calls. Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev