[Mesa-dev] [PATCH] i965/blorp: Do a depth flush/stall prior to HiZ operations

Jason Ekstrand jason at jlekstrand.net
Mon Jun 5 18:11:40 UTC 2017


On Mon, Jun 5, 2017 at 10:50 AM, Anuj Phogat <anuj.phogat at gmail.com> wrote:

> On Sun, Jun 4, 2017 at 9:53 PM, Jason Ekstrand <jason at jlekstrand.net>
> wrote:
> > Without this stall, the test group ES3-CTS.functional.fbo.msaa.\* hangs
> > about 1 out of every 2 or 3 times on my Sky Lake GT3 laptop.  With the
> > flush and stall, I can run it 6 times in a row without a hang.
> >
> > Cc: "17.1" <mesa-stable at lists.freedesktop.org>
> > ---
> >  src/mesa/drivers/dri/i965/brw_blorp.c | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c
> b/src/mesa/drivers/dri/i965/brw_blorp.c
> > index c452b7e..bfb866a 100644
> > --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> > +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> > @@ -1127,6 +1127,20 @@ intel_hiz_exec(struct brw_context *brw, struct
> intel_mipmap_tree *mt,
> >  {
> >     const char *opname = NULL;
> >
> > +   /* From the Ivy Bridge PRM, Vol. 2, pt. 1, section 11.5.3.1 "Depth
> > +    * Buffer Clear":
> > +    *
> > +    *    "If other rendering operations have preceded this clear, a
> > +    *    PIPE_CONTROL with depth cache flush enabled, Depth Stall bit
> enabled
> > +    *    must be issued before the rectangle primitive used for the
> depth
> > +    *    buffer clear operation."
> > +    *
> > +    * This is similar to what is required for CCS operations.
> > +    */
> > +   brw_emit_pipe_control_flush(brw,
> > +                               PIPE_CONTROL_DEPTH_CACHE_FLUSH |
> > +                               PIPE_CONTROL_DEPTH_STALL);
> > +
> We're already doing this in brw_fast_clear_depth().  There is also a
> related comment in the same function:
>
>        * In addition, from the Ivybridge PRM, volume 2, 1.10.4.1
> PIPE_CONTROL,
>        * Depth Cache Flush Enable:
>        *
>        *   This bit must not be set when Depth Stall Enable bit is set in
>        *   this packet.
>        *
>        * This is confirmed to hold for real, HSW gets immediate gpu hangs.
>        *
>        * Therefore issue two pipe control flushes, one for cache flush and
>        * another for depth stall.
>
> I think you can simply move the relevant code from brw_fast_clear_depth()
> to intel_hiz_exec().
>

Right.  Somehow I missed that.  To put a finer point on things, I don't
think it's required for depth resolves but it does seem to be needed for
HiZ resolves which makes sense because they are basically the same as
fast-clears only they write a different value to the HIZ buffer.

I'll send out a new patch now that I've thought about it more.


> >     switch (op) {
> >     case BLORP_HIZ_OP_DEPTH_RESOLVE:
> >        opname = "depth resolve";
> > --
> > 2.5.0.400.gff86faf
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170605/cc9b7bb4/attachment.html>


More information about the mesa-dev mailing list