[Mesa-stable] [Mesa-dev] [PATCH 01/30] i965: Mark depth surfaces as needing a HiZ resolve after blitting

Chad Versace chadversary at chromium.org
Fri Jun 2 20:57:21 UTC 2017


On Fri 02 Jun 2017, Jason Ekstrand wrote:
> On Fri, Jun 2, 2017 at 1:01 PM, Chad Versace <[1]chadversary at chromium.org>
> wrote:
> 
>     On Wed 31 May 2017, Pohjolainen, Topi wrote:
>     > On Wed, May 31, 2017 at 10:22:09AM -0700, Jason Ekstrand wrote:
>     > > On Tue, May 30, 2017 at 7:29 AM, Pohjolainen, Topi <
>     > > [2]topi.pohjolainen at gmail.com> wrote:
> 
>     > > > > On Fri, May 26, 2017 at 04:30:05PM -0700, Jason Ekstrand wrote:
>     > > > > > Cc: "17.0 17.1" <[3]mesa-stable at lists.freedesktop.org>
>     > > > > > ---
>     > > > > >  src/mesa/drivers/dri/i965/intel_blit.c | 2 ++
>     > > > > >  1 file changed, 2 insertions(+)
>     > > > > >
>     > > > > > diff --git a/src/mesa/drivers/dri/i965/intel_blit.c
>     > > > b/src/mesa/drivers/dri/i965/intel_blit.c
>     > > > > > index 2925fc2..b1e1eaa 100644
>     > > > > > --- a/src/mesa/drivers/dri/i965/intel_blit.c
>     > > > > > +++ b/src/mesa/drivers/dri/i965/intel_blit.c
>     > > > > > @@ -329,6 +329,7 @@ intel_miptree_blit(struct brw_context *brw,
>     > > > > >     intel_miptree_slice_resolve_depth(brw, dst_mt, dst_level,
>     > > > dst_slice);
>     > > > > >     intel_miptree_resolve_color(brw, src_mt, src_level,
>     src_slice, 1,
>     > > > 0);
>     > > > > >     intel_miptree_resolve_color(brw, dst_mt, dst_level,
>     dst_slice, 1,
>     > > > 0);
>     > > > > > +   intel_miptree_slice_set_needs_hiz_resolve(dst_mt, dst_level,
>     > > > dst_slice);
> 
>     Something feels wrong. Suppose that, before the blit, the HiZ buffer
>     contains significant data. Here, we schedule an op to invalidate the HiZ
>     data. Also, suppose the the below call to emit_miptree_blit() rejects
>     the blit (maybe because the pitch is too big) and returns false. The
>     failed blit will likely emit a GL error or, in some cases, i965 will
>     fallback to to doing the blit with the 3D engine. In either case, there
>     is a likely bug waiting because the HiZ buffer is scheduled to have its
>     HiZ data invalidated before its next use, but the HiZ data is still
>     significant.
> 
> 
> I agree that you are technically mostly correct.  However, I don't think it's
> actually going to matter in practice for 3 reasons:
> 
>  1) The GL error case is bogus.  We aren't allowed to start modifying things
> and then throw a GL error unless that error is OUT_OF_MEMORY.  All of the
> error-checking should have happened up-front and it is our job to succeed
> somehow.
> 
>  2) By the time we get to a blit path, we've given up on HiZ.  We never fall
> back from BLIT to render.  If BLIT fails, we fall back to software at which
> point we're going to write without HiZ anyway so setting needs_hiz_resolve is
> fine.
> 
>  3) There is no bug waiting.  Since we do a depth resolve first, the HiZ and
> depth will be consistent and anything that anything that would use it with HiZ
> will see the fact that it needs a HiZ resolve and do one.  You can't get into a
> case where we say that it needs a hiz resolve and then edit HiZ without
> resolving.  The worst that happens if I'm completely wrong about (1) and (2) is
> that you get more HiZ resolves than needed.

You convinced with me point 3. I failed to take into account the depth
resolve a few lines above.

Reviewed-by: Chad Versace <chadversary at chromium.org>


More information about the mesa-stable mailing list