<div dir="ltr">You're going to want to re-review this one when I send the v2.  It changed quite a bit.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Feb 13, 2018 at 2:44 PM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">On Tue, Feb 13, 2018 at 11:02 AM, Nanley Chery <span dir="ltr"><<a href="mailto:nanleychery@gmail.com" target="_blank">nanleychery@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_6257391089241253652HOEnZb"><div class="m_6257391089241253652h5">On Mon, Feb 05, 2018 at 02:34:56PM -0800, Jason Ekstrand wrote:<br>
> This moves the decision out of begin_subpass and into BeginRenderPass<br>
> like the decision for color clears.  We use a similar name for the<br>
> function for depth/stencil as for color even though no aux usage is<br>
> really getting computed.<br>
> ---<br>
>  src/intel/vulkan/genX_cmd_buff<wbr>er.c | 84 +++++++++++++++++++++++-------<wbr>--------<br>
>  1 file changed, 50 insertions(+), 34 deletions(-)<br>
><br>
> diff --git a/src/intel/vulkan/genX_cmd_bu<wbr>ffer.c b/src/intel/vulkan/genX_cmd_bu<wbr>ffer.c<br>
> index 21fdc6b..ab79fbf 100644<br>
> --- a/src/intel/vulkan/genX_cmd_bu<wbr>ffer.c<br>
> +++ b/src/intel/vulkan/genX_cmd_bu<wbr>ffer.c<br>
> @@ -350,6 +350,52 @@ color_attachment_compute_aux_u<wbr>sage(struct anv_device * device,<br>
>     }<br>
>  }<br>
><br>
> +static void<br>
> +depth_stencil_attachment_comp<wbr>ute_aux_usage(struct anv_device *device,<br>
> +                                           struct anv_cmd_state *cmd_state,<br>
> +                                           uint32_t att, VkRect2D render_area)<br>
> +{<br>
> +   struct anv_attachment_state *att_state = &cmd_state->attachments[att];<br>
> +   struct anv_image_view *iview = cmd_state->framebuffer->attach<wbr>ments[att];<br>
> +<br>
> +   /* These will be initialized after the first subpass transition. */<br>
> +   att_state->aux_usage = ISL_AUX_USAGE_NONE;<br>
> +   att_state->input_aux_usage = ISL_AUX_USAGE_NONE;<br>
> +<br>
> +   if (att_state->aux_usage != ISL_AUX_USAGE_HIZ) {<br>
<br>
</div></div>We set this to NONE 3 lines above. I think you meant to have your<br>
variable be: iview->image->planes[plane].au<wbr>x_usage ?<br></blockquote><div><br></div></div></div><div>Yup.  You're right.  Fixed locally.<br><br>This means I accidentally disabled HiZ clears entirely. :(  This is going to need another jenkins run.<br></div><div><div class="h5"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This is a nice cleanup. With the above fixed, this patch is<br>
Reviewed-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com" target="_blank">nanley.g.chery@intel.com</a>><br>
<div><div class="m_6257391089241253652h5"><br>
<br>
> +      att_state->fast_clear = false;<br>
> +      return;<br>
> +   } else if (!(att_state->pending_clear_as<wbr>pects & VK_IMAGE_ASPECT_DEPTH_BIT)) {<br>
> +      /* If we're just clearing stencil, we can always HiZ clear */<br>
> +      att_state->fast_clear = true;<br>
> +      return;<br>
> +   }<br>
> +<br>
> +   if (!blorp_can_hiz_clear_depth(GE<wbr>N_GEN,<br>
> +                                  iview->planes[0].isl.format,<br>
> +                                  iview->image->samples,<br>
> +                                  render_area.offset.x,<br>
> +                                  render_area.offset.y,<br>
> +                                  render_area.offset.x +<br>
> +                                  render_area.extent.width,<br>
> +                                  render_area.offset.y +<br>
> +                                  render_area.extent.height)) {<br>
> +      att_state->fast_clear = false;<br>
> +   } else if (att_state->clear_value.depthS<wbr>tencil.depth != ANV_HZ_FC_VAL) {<br>
> +      att_state->fast_clear = false;<br>
> +   } else if (GEN_GEN == 8 &&<br>
> +              anv_can_sample_with_hiz(&devic<wbr>e->info, iview->image)) {<br>
> +      /* Only gen9+ supports returning ANV_HZ_FC_VAL when sampling a<br>
> +       * fast-cleared portion of a HiZ buffer. Testing has revealed that Gen8<br>
> +       * only supports returning 0.0f. Gens prior to gen8 do not support this<br>
> +       * feature at all.<br>
> +       */<br>
> +      att_state->fast_clear = false;<br>
> +   } else {<br>
> +      att_state->fast_clear = true;<br>
> +   }<br>
> +}<br>
> +<br>
>  static bool<br>
>  need_input_attachment_state(co<wbr>nst struct anv_render_pass_attachment *att)<br>
>  {<br>
> @@ -1125,12 +1171,9 @@ genX(cmd_buffer_setup_attachme<wbr>nts)(struct anv_cmd_buffer *cmd_buffer,<br>
>              add_image_view_relocs(cmd_buff<wbr>er, iview, 0,<br>
>                                    state->attachments[i].color);<br>
>           } else {<br>
> -            /* This field will be initialized after the first subpass<br>
> -             * transition.<br>
> -             */<br>
> -            state->attachments[i].aux_usag<wbr>e = ISL_AUX_USAGE_NONE;<br>
> -<br>
> -            state->attachments[i].input_au<wbr>x_usage = ISL_AUX_USAGE_NONE;<br>
> +            depth_stencil_attachment_compu<wbr>te_aux_usage(cmd_buffer->devic<wbr>e,<br>
> +                                                       state, i,<br>
> +                                                       begin->renderArea);<br>
>           }<br>
><br>
>           if (need_input_attachment_state(&<wbr>pass->attachments[i])) {<br>
> @@ -3541,34 +3584,7 @@ cmd_buffer_begin_subpass(struc<wbr>t anv_cmd_buffer *cmd_buffer,<br>
>                                 VK_IMAGE_ASPECT_STENCIL_BIT))<wbr>;<br>
><br>
>        if (att_state->pending_clear_aspe<wbr>cts) {<br>
> -         bool clear_with_hiz = att_state->aux_usage == ISL_AUX_USAGE_HIZ;<br>
> -         if (clear_with_hiz &&<br>
> -             (att_state->pending_clear_asp<wbr>ects & VK_IMAGE_ASPECT_DEPTH_BIT)) {<br>
> -            if (!blorp_can_hiz_clear_depth(GE<wbr>N_GEN,<br>
> -                                           iview->planes[0].isl.format,<br>
> -                                           iview->image->samples,<br>
> -                                           render_area.offset.x,<br>
> -                                           render_area.offset.y,<br>
> -                                           render_area.offset.x +<br>
> -                                           render_area.extent.width,<br>
> -                                           render_area.offset.y +<br>
> -                                           render_area.extent.height)) {<br>
> -               clear_with_hiz = false;<br>
> -            } else if (att_state->clear_value.depthS<wbr>tencil.depth != ANV_HZ_FC_VAL) {<br>
> -               clear_with_hiz = false;<br>
> -            } else if (GEN_GEN == 8 &&<br>
> -                       anv_can_sample_with_hiz(&cmd_<wbr>buffer->device->info,<br>
> -                                               iview->image)) {<br>
> -               /* Only gen9+ supports returning ANV_HZ_FC_VAL when sampling a<br>
> -                * fast-cleared portion of a HiZ buffer. Testing has revealed<br>
> -                * that Gen8 only supports returning 0.0f. Gens prior to gen8<br>
> -                * do not support this feature at all.<br>
> -                */<br>
> -               clear_with_hiz = false;<br>
> -            }<br>
> -         }<br>
> -<br>
> -         if (clear_with_hiz) {<br>
> +         if (att_state->fast_clear) {<br>
>              /* We currently only support HiZ for single-layer images */<br>
>              assert(iview->planes[0].<a href="http://isl.ba">isl.ba</a><wbr>se_level == 0);<br>
>              assert(iview->planes[0].<a href="http://isl.ba">isl.ba</a><wbr>se_array_layer == 0);<br>
> --<br>
> 2.5.0.400.gff86faf<br>
><br>
</div></div>> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div></div><br></div></div>
</blockquote></div><br></div>