[Mesa-dev] [PATCH 07/14] anv/cmd_buffer: Decide whether or not to HiZ clear up-front

Jason Ekstrand jason at jlekstrand.net
Tue Feb 13 22:44:14 UTC 2018


On Tue, Feb 13, 2018 at 11:02 AM, Nanley Chery <nanleychery at gmail.com>
wrote:

> On Mon, Feb 05, 2018 at 02:34:56PM -0800, Jason Ekstrand wrote:
> > This moves the decision out of begin_subpass and into BeginRenderPass
> > like the decision for color clears.  We use a similar name for the
> > function for depth/stencil as for color even though no aux usage is
> > really getting computed.
> > ---
> >  src/intel/vulkan/genX_cmd_buffer.c | 84 +++++++++++++++++++++++-------
> --------
> >  1 file changed, 50 insertions(+), 34 deletions(-)
> >
> > diff --git a/src/intel/vulkan/genX_cmd_buffer.c
> b/src/intel/vulkan/genX_cmd_buffer.c
> > index 21fdc6b..ab79fbf 100644
> > --- a/src/intel/vulkan/genX_cmd_buffer.c
> > +++ b/src/intel/vulkan/genX_cmd_buffer.c
> > @@ -350,6 +350,52 @@ color_attachment_compute_aux_usage(struct
> anv_device * device,
> >     }
> >  }
> >
> > +static void
> > +depth_stencil_attachment_compute_aux_usage(struct anv_device *device,
> > +                                           struct anv_cmd_state
> *cmd_state,
> > +                                           uint32_t att, VkRect2D
> render_area)
> > +{
> > +   struct anv_attachment_state *att_state =
> &cmd_state->attachments[att];
> > +   struct anv_image_view *iview = cmd_state->framebuffer->
> attachments[att];
> > +
> > +   /* These will be initialized after the first subpass transition. */
> > +   att_state->aux_usage = ISL_AUX_USAGE_NONE;
> > +   att_state->input_aux_usage = ISL_AUX_USAGE_NONE;
> > +
> > +   if (att_state->aux_usage != ISL_AUX_USAGE_HIZ) {
>
> We set this to NONE 3 lines above. I think you meant to have your
> variable be: iview->image->planes[plane].aux_usage ?
>

Yup.  You're right.  Fixed locally.

This means I accidentally disabled HiZ clears entirely. :(  This is going
to need another jenkins run.


> This is a nice cleanup. With the above fixed, this patch is
> Reviewed-by: Nanley Chery <nanley.g.chery at intel.com>
>
>
> > +      att_state->fast_clear = false;
> > +      return;
> > +   } else if (!(att_state->pending_clear_aspects &
> VK_IMAGE_ASPECT_DEPTH_BIT)) {
> > +      /* If we're just clearing stencil, we can always HiZ clear */
> > +      att_state->fast_clear = true;
> > +      return;
> > +   }
> > +
> > +   if (!blorp_can_hiz_clear_depth(GEN_GEN,
> > +                                  iview->planes[0].isl.format,
> > +                                  iview->image->samples,
> > +                                  render_area.offset.x,
> > +                                  render_area.offset.y,
> > +                                  render_area.offset.x +
> > +                                  render_area.extent.width,
> > +                                  render_area.offset.y +
> > +                                  render_area.extent.height)) {
> > +      att_state->fast_clear = false;
> > +   } else if (att_state->clear_value.depthStencil.depth !=
> ANV_HZ_FC_VAL) {
> > +      att_state->fast_clear = false;
> > +   } else if (GEN_GEN == 8 &&
> > +              anv_can_sample_with_hiz(&device->info, iview->image)) {
> > +      /* Only gen9+ supports returning ANV_HZ_FC_VAL when sampling a
> > +       * fast-cleared portion of a HiZ buffer. Testing has revealed
> that Gen8
> > +       * only supports returning 0.0f. Gens prior to gen8 do not
> support this
> > +       * feature at all.
> > +       */
> > +      att_state->fast_clear = false;
> > +   } else {
> > +      att_state->fast_clear = true;
> > +   }
> > +}
> > +
> >  static bool
> >  need_input_attachment_state(const struct anv_render_pass_attachment
> *att)
> >  {
> > @@ -1125,12 +1171,9 @@ genX(cmd_buffer_setup_attachments)(struct
> anv_cmd_buffer *cmd_buffer,
> >              add_image_view_relocs(cmd_buffer, iview, 0,
> >                                    state->attachments[i].color);
> >           } else {
> > -            /* This field will be initialized after the first subpass
> > -             * transition.
> > -             */
> > -            state->attachments[i].aux_usage = ISL_AUX_USAGE_NONE;
> > -
> > -            state->attachments[i].input_aux_usage = ISL_AUX_USAGE_NONE;
> > +            depth_stencil_attachment_compute_aux_usage(cmd_buffer->
> device,
> > +                                                       state, i,
> > +
>  begin->renderArea);
> >           }
> >
> >           if (need_input_attachment_state(&pass->attachments[i])) {
> > @@ -3541,34 +3584,7 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer
> *cmd_buffer,
> >                                 VK_IMAGE_ASPECT_STENCIL_BIT));
> >
> >        if (att_state->pending_clear_aspects) {
> > -         bool clear_with_hiz = att_state->aux_usage ==
> ISL_AUX_USAGE_HIZ;
> > -         if (clear_with_hiz &&
> > -             (att_state->pending_clear_aspects &
> VK_IMAGE_ASPECT_DEPTH_BIT)) {
> > -            if (!blorp_can_hiz_clear_depth(GEN_GEN,
> > -                                           iview->planes[0].isl.format,
> > -                                           iview->image->samples,
> > -                                           render_area.offset.x,
> > -                                           render_area.offset.y,
> > -                                           render_area.offset.x +
> > -                                           render_area.extent.width,
> > -                                           render_area.offset.y +
> > -                                           render_area.extent.height)) {
> > -               clear_with_hiz = false;
> > -            } else if (att_state->clear_value.depthStencil.depth !=
> ANV_HZ_FC_VAL) {
> > -               clear_with_hiz = false;
> > -            } else if (GEN_GEN == 8 &&
> > -                       anv_can_sample_with_hiz(&cmd_
> buffer->device->info,
> > -                                               iview->image)) {
> > -               /* Only gen9+ supports returning ANV_HZ_FC_VAL when
> sampling a
> > -                * fast-cleared portion of a HiZ buffer. Testing has
> revealed
> > -                * that Gen8 only supports returning 0.0f. Gens prior to
> gen8
> > -                * do not support this feature at all.
> > -                */
> > -               clear_with_hiz = false;
> > -            }
> > -         }
> > -
> > -         if (clear_with_hiz) {
> > +         if (att_state->fast_clear) {
> >              /* We currently only support HiZ for single-layer images */
> >              assert(iview->planes[0].isl.base_level == 0);
> >              assert(iview->planes[0].isl.base_array_layer == 0);
> > --
> > 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/20180213/8f303cd7/attachment.html>


More information about the mesa-dev mailing list