On Mon, Nov 27, 2017 at 07:06:11PM -0800, Jason Ekstrand wrote:
> This unifies things a bit because we now handle depth and stencil at the
> same time.  It also ensures that clears happen for input attachments.
> ---
>  src/intel/vulkan/genX_cmd_buffer.c | 69 
> ++++++++++++++++----------------------
>  1 file changed, 28 insertions(+), 41 deletions(-)
> 
> diff --git a/src/intel/vulkan/genX_cmd_buffer.c 
> b/src/intel/vulkan/genX_cmd_buffer.c
> index 3f90c1a..e5e0d1c 100644
> --- a/src/intel/vulkan/genX_cmd_buffer.c
> +++ b/src/intel/vulkan/genX_cmd_buffer.c
> @@ -3219,58 +3219,43 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer 
> *cmd_buffer,
>  
>     VkRect2D render_area = cmd_buffer->state.render_area;
>     struct anv_framebuffer *fb = cmd_buffer->state.framebuffer;
> -   for (uint32_t i = 0; i < subpass->color_count; ++i) {
> -      const uint32_t a = subpass->color_attachments[i].attachment;
> +
> +   for (uint32_t i = 0; i < subpass->attachment_count; ++i) {
> +      const uint32_t a = subpass->attachments[i].attachment;
>        if (a == VK_ATTACHMENT_UNUSED)
>           continue;
>  
>        assert(a < cmd_state->pass->attachment_count);
>        struct anv_attachment_state *att_state = &cmd_state->attachments[a];
>  
> -      if (!att_state->pending_clear_aspects)
> -         continue;
> -
> -      assert(att_state->pending_clear_aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> -
>        struct anv_image_view *iview = fb->attachments[a];
>        const struct anv_image *image = iview->image;
>  
> -      /* Multi-planar images are not supported as attachments */
> -      assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> -      assert(image->n_planes == 1);
> -
> -      if (att_state->fast_clear) {
> -         anv_image_ccs_op(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> -                          iview->planes[0].isl.base_level,
> -                          iview->planes[0].isl.base_array_layer,
> -                          fb->layers,
> -                          ISL_AUX_OP_FAST_CLEAR, false);
> -      } else {
> -         anv_image_clear_color(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> -                               att_state->aux_usage,
> -                               iview->planes[0].isl.format,
> -                               iview->planes[0].isl.swizzle,
> -                               iview->planes[0].isl.base_level,
> -                               iview->planes[0].isl.base_array_layer,
> -                               fb->layers, render_area,
> -                               
> vk_to_isl_color(att_state->clear_value.color));
> -      }
> -
> -      att_state->pending_clear_aspects = 0;
> -   }
> -
> -   if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) 
> {
> -      const uint32_t a = subpass->depth_stencil_attachment.attachment;
> -
> -      assert(a < cmd_state->pass->attachment_count);
> -      struct anv_attachment_state *att_state = &cmd_state->attachments[a];
> -      struct anv_image_view *iview = fb->attachments[a];
> -      const struct anv_image *image = iview->image;
> +      if (att_state->pending_clear_aspects & VK_IMAGE_ASPECT_COLOR_BIT) {
> +         assert(att_state->pending_clear_aspects == 
> VK_IMAGE_ASPECT_COLOR_BIT);
>  
> -      assert(image->aspects & (VK_IMAGE_ASPECT_DEPTH_BIT |
> -                               VK_IMAGE_ASPECT_STENCIL_BIT));
> +         /* Multi-planar images are not supported as attachments */
> +         assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
> +         assert(image->n_planes == 1);
>  
> -      if (att_state->pending_clear_aspects) {
> +         if (att_state->fast_clear) {
> +            anv_image_ccs_op(cmd_buffer, image, VK_IMAGE_ASPECT_COLOR_BIT,
> +                             iview->planes[0].isl.base_level,
> +                             iview->planes[0].isl.base_array_layer,
> +                             fb->layers,
> +                             ISL_AUX_OP_FAST_CLEAR, false);
> +         } else {
> +            anv_image_clear_color(cmd_buffer, image, 
> VK_IMAGE_ASPECT_COLOR_BIT,
> +                                  att_state->aux_usage,
> +                                  iview->planes[0].isl.format,
> +                                  iview->planes[0].isl.swizzle,
> +                                  iview->planes[0].isl.base_level,
> +                                  iview->planes[0].isl.base_array_layer,
> +                                  fb->layers, render_area,
> +                                  
> vk_to_isl_color(att_state->clear_value.color));
> +         }
> +      } else if (att_state->pending_clear_aspects & 
> (VK_IMAGE_ASPECT_DEPTH_BIT |
> +                                                     
> VK_IMAGE_ASPECT_STENCIL_BIT)) {
>           if (att_state->fast_clear) {
>              /* We currently only support HiZ for single-layer images */
>              assert(iview->planes[0].isl.base_level == 0);
> @@ -3293,6 +3278,8 @@ cmd_buffer_begin_subpass(struct anv_cmd_buffer 
> *cmd_buffer,
>                                            
> att_state->clear_value.depthStencil.depth,
>                                            
> att_state->clear_value.depthStencil.stencil);
>           }
> +      } else  {

Extra space before "{". Otherwise:

Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com>

> +         assert(att_state->pending_clear_aspects == 0);
>        }
>  
>        att_state->pending_clear_aspects = 0;
> -- 
> 2.5.0.400.gff86faf
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to