<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Feb 2, 2018 at 2:39 PM, 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"><span class="">On Fri, Jan 19, 2018 at 03:47:38PM -0800, Jason Ekstrand wrote:<br>
</span><div><div class="h5">> Now that we're tracking aux properly per-slice, we can enable this for<br>
> applications which actually care.<br>
> ---<br>
>  src/intel/vulkan/anv_blorp.c       | 22 +++++++++++++++-------<br>
>  src/intel/vulkan/genX_cmd_<wbr>buffer.c | 13 +++++++++----<br>
>  2 files changed, 24 insertions(+), 11 deletions(-)<br>
><br>
> diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c<br>
> index 594b0d8..73a44fd 100644<br>
> --- a/src/intel/vulkan/anv_blorp.c<br>
> +++ b/src/intel/vulkan/anv_blorp.c<br>
> @@ -1205,9 +1205,16 @@ anv_cmd_buffer_clear_subpass(<wbr>struct anv_cmd_buffer *cmd_buffer)<br>
>                                     image, VK_IMAGE_ASPECT_COLOR_BIT,<br>
>                                     att_state->aux_usage, &surf);<br>
><br>
> +      uint32_t base_layer = iview->planes[0].isl.base_<wbr>array_layer;<br>
> +      uint32_t layer_count = fb->layers;<br>
> +<br>
>        if (att_state->fast_clear) {<br>
>           surf.clear_color = vk_to_isl_color(att_state-><wbr>clear_value.color);<br>
><br>
> +         /* We only support fast-clears on the first layer */<br>
> +         assert(iview->planes[0].isl.<wbr>base_level == 0);<br>
> +         assert(iview->planes[0].isl.<wbr>base_array_layer == 0);<br>
> +<br>
>           /* From the Sky Lake PRM Vol. 7, "Render Target Fast Clear":<br>
>            *<br>
>            *    "After Render target fast clear, pipe-control with color cache<br>
> @@ -1229,27 +1236,28 @@ anv_cmd_buffer_clear_subpass(<wbr>struct anv_cmd_buffer *cmd_buffer)<br>
><br>
>           assert(image->n_planes == 1);<br>
>           blorp_fast_clear(&batch, &surf, iview->planes[0].isl.format,<br>
> -                          iview->planes[0].isl.base_<wbr>level,<br>
> -                          iview->planes[0].isl.base_<wbr>array_layer, fb->layers,<br>
> +                          iview->planes[0].isl.base_<wbr>level, base_layer, 1,<br>
>                            render_area.offset.x, render_area.offset.y,<br>
>                            render_area.offset.x + render_area.extent.width,<br>
>                            render_area.offset.y + render_area.extent.height);<br>
> +         base_layer++;<br>
> +         layer_count--;<br>
><br>
>           cmd_buffer->state.pending_<wbr>pipe_bits |=<br>
>              ANV_PIPE_RENDER_TARGET_CACHE_<wbr>FLUSH_BIT | ANV_PIPE_CS_STALL_BIT;<br>
> -      } else {<br>
> +      }<br>
> +<br>
> +      if (layer_count > 0) {<br>
>           assert(image->n_planes == 1);<br>
>           anv_cmd_buffer_mark_image_<wbr>written(cmd_buffer, image,<br>
>                                             VK_IMAGE_ASPECT_COLOR_BIT,<br>
>                                             att_state->aux_usage,<br>
>                                             iview->planes[0].isl.base_<wbr>level,<br>
> -                                           iview->planes[0].isl.base_<wbr>array_layer,<br>
> -                                           fb->layers);<br>
> +                                           base_layer, layer_count);<br>
><br>
>           blorp_clear(&batch, &surf, iview->planes[0].isl.format,<br>
>                       anv_swizzle_for_render(iview-><wbr>planes[0].isl.swizzle),<br>
> -                     iview->planes[0].isl.base_<wbr>level,<br>
> -                     iview->planes[0].isl.base_<wbr>array_layer, fb->layers,<br>
> +                     iview->planes[0].isl.base_<wbr>level, base_layer, layer_count,<br>
>                       render_area.offset.x, render_area.offset.y,<br>
>                       render_area.offset.x + render_area.extent.width,<br>
>                       render_area.offset.y + render_area.extent.height,<br>
> diff --git a/src/intel/vulkan/genX_cmd_<wbr>buffer.c b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
> index 4c83a5c..484246d 100644<br>
> --- a/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
> +++ b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
> @@ -329,12 +329,17 @@ color_attachment_compute_aux_<wbr>usage(struct anv_device * device,<br>
>         */<br>
>        if (att_state->fast_clear &&<br>
>            (iview->planes[0].isl.base_<wbr>level > 0 ||<br>
> -           iview->image->type == VK_IMAGE_TYPE_3D ||<br>
> -           iview->image->array_size > 0)) {<br>
> +           iview->planes[0].isl.base_<wbr>array_layer > 0 ||<br>
> +           cmd_state->framebuffer->layers > 1)) {<br>
>           anv_perf_warn(device-><wbr>instance, iview->image,<br>
>                         "Rendering to a multi-LOD or multi-layer framebuffer "<br>
> -                       "with LOAD_OP_CLEAR.  Not fast-clearing");<br>
> -         att_state->fast_clear = false;<br>
> +                       "with LOAD_OP_CLEAR.  Only fast-clearing the first "<br>
> +                       "slice");<br>
> +<br>
> +         /* Leave fast_clear enabled if we are clearing the first slice. */<br>
> +         if (iview->planes[0].isl.base_<wbr>level > 0 ||<br>
> +             iview->planes[0].isl.base_<wbr>array_layer > 0)<br>
> +            att_state->fast_clear = false;<br>
<br>
</div></div>The new perf_warn is only true for the else portion of this if statement.<span class="im HOEnZb"><br></span></blockquote><div><br></div><div>No, it fires whenever the framebuffer is on LOD > 0 or multi-layer because there are slices that are being rendered to which are not being fast-cleared.  This if, on the other hand, disables fast clear if none of the slices can be fast-cleared (i.e. zero is not in the set).<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="im HOEnZb">
>        }<br>
><br>
>        if (att_state->fast_clear) {<br>
> --<br>
> 2.5.0.400.gff86faf<br>
><br>
</span><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">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>
</div></div></blockquote></div><br></div></div>