<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 19, 2017 at 2:22 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="">The lifespan of the fast-clear data will surpass the render pass scope.<br>
We need CCS_D to be enabled in order to invalidate blocks previously<br>
marked as cleared and to sample cleared data correctly.<br>
<br>
v2: Avoid refactoring.<br>
</span>v3: Allow CCS_D for subpass resolves.<br>
<span class=""><br>
Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
---<br>
</span> src/intel/vulkan/anv_blorp.c       | 26 +++++++++++++++++++-------<br>
 src/intel/vulkan/genX_cmd_<wbr>buffer.c |  5 +----<br>
 2 files changed, 20 insertions(+), 11 deletions(-)<br>
<br>
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c<br>
index d6cbc1c0cd..88dbba8a12 100644<br>
--- a/src/intel/vulkan/anv_blorp.c<br>
+++ b/src/intel/vulkan/anv_blorp.c<br>
@@ -1359,8 +1359,10 @@ anv_cmd_buffer_clear_subpass(<wbr>struct anv_cmd_buffer *cmd_buffer)<br>
 static void<br>
 resolve_image(struct blorp_batch *batch,<br>
               const struct anv_image *src_image,<br>
+              enum isl_aux_usage src_aux_usage,<br>
               uint32_t src_level, uint32_t src_layer,<br>
               const struct anv_image *dst_image,<br>
+              enum isl_aux_usage dst_aux_usage,<br>
               uint32_t dst_level, uint32_t dst_layer,<br>
               VkImageAspectFlags aspect_mask,<br>
               uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y,<br>
@@ -1377,9 +1379,9 @@ resolve_image(struct blorp_batch *batch,<br>
<br>
       struct blorp_surf src_surf, dst_surf;<br>
       get_blorp_surf_for_anv_image(<wbr>src_image, aspect,<br>
-                                   src_image->aux_usage, &src_surf);<br>
+                                   src_aux_usage, &src_surf);<br>
       get_blorp_surf_for_anv_image(<wbr>dst_image, aspect,<br>
-                                   dst_image->aux_usage, &dst_surf);<br>
+                                   dst_aux_usage, &dst_surf);<br>
<br>
       blorp_blit(batch,<br>
                  &src_surf, src_level, src_layer,<br>
@@ -1419,9 +1421,11 @@ void anv_CmdResolveImage(<br>
<br>
       for (uint32_t layer = 0; layer < layer_count; layer++) {<br>
          resolve_image(&batch,<br>
-                       src_image, pRegions[r].srcSubresource.<wbr>mipLevel,<br>
+                       src_image, src_image->aux_usage,<br>
+                       pRegions[r].srcSubresource.<wbr>mipLevel,<br>
                        pRegions[r].srcSubresource.<wbr>baseArrayLayer + layer,<br>
-                       dst_image, pRegions[r].dstSubresource.<wbr>mipLevel,<br>
+                       dst_image, dst_image->aux_usage,<br>
+                       pRegions[r].dstSubresource.<wbr>mipLevel,<br>
                        pRegions[r].dstSubresource.<wbr>baseArrayLayer + layer,<br>
                        pRegions[r].dstSubresource.<wbr>aspectMask,<br>
                        pRegions[r].srcOffset.x, pRegions[r].srcOffset.y,<br>
@@ -1606,8 +1610,11 @@ ccs_resolve_attachment(struct anv_cmd_buffer *cmd_buffer,<br>
<span class="">    cmd_buffer->state.pending_<wbr>pipe_bits |=<br>
       ANV_PIPE_RENDER_TARGET_CACHE_<wbr>FLUSH_BIT | ANV_PIPE_CS_STALL_BIT;<br>
<br>
+   const uint32_t aux_layers =<br>
+      anv_image_aux_layers(image, iview->isl.base_level);<br></span></blockquote><div><br></div><div>Should this be anv_image_aux_layers() - base_layer?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
    anv_ccs_resolve(cmd_buffer, att_state->color_rt_state, image,<br>
-                   iview->isl.base_level, fb->layers, resolve_op);<br>
+                   iview->isl.base_level, MIN2(fb->layers, aux_layers),<br>
+                   resolve_op);<br>
<br>
    cmd_buffer->state.pending_<wbr>pipe_bits |=<br>
       ANV_PIPE_RENDER_TARGET_CACHE_<wbr>FLUSH_BIT | ANV_PIPE_CS_STALL_BIT;<br>
</span>@@ -1667,6 +1674,11 @@ anv_cmd_buffer_resolve_<wbr>subpass(struct anv_cmd_buffer *cmd_buffer)<br>
          struct anv_image_view *src_iview = fb->attachments[src_att];<br>
          struct anv_image_view *dst_iview = fb->attachments[dst_att];<br>
<br>
+         enum isl_aux_usage src_aux_usage =<br>
+            cmd_buffer->state.attachments[<wbr>src_att].aux_usage;<br>
+         enum isl_aux_usage dst_aux_usage =<br>
+            cmd_buffer->state.attachments[<wbr>dst_att].aux_usage;<br>
+<br>
          const VkRect2D render_area = cmd_buffer->state.render_area;<br>
<br>
          assert(src_iview->aspect_mask == dst_iview->aspect_mask);<br>
@@ -1674,10 +1686,10 @@ anv_cmd_buffer_resolve_<wbr>subpass(struct anv_cmd_buffer *cmd_buffer)<br>
          struct blorp_batch batch;<br>
          blorp_batch_init(&cmd_buffer-><wbr>device->blorp, &batch, cmd_buffer, 0);<br>
<br>
-         resolve_image(&batch, src_iview->image,<br>
+         resolve_image(&batch, src_iview->image, src_aux_usage,<br>
                        src_iview->isl.base_level,<br>
                        src_iview->isl.base_array_<wbr>layer,<br>
-                       dst_iview->image,<br>
+                       dst_iview->image, dst_aux_usage,<br>
                        dst_iview->isl.base_level,<br>
                        dst_iview->isl.base_array_<wbr>layer,<br>
                        src_iview->aspect_mask,<br>
diff --git a/src/intel/vulkan/genX_cmd_<wbr>buffer.c b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
index 85938bd91b..42028e286d 100644<br>
--- a/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
+++ b/src/intel/vulkan/genX_cmd_<wbr>buffer.c<br>
@@ -330,7 +330,7 @@ color_attachment_compute_aux_<wbr>usage(struct anv_device * device,<br>
<span class="">    if (iview->image->aux_usage == ISL_AUX_USAGE_CCS_E) {<br>
       att_state->aux_usage = ISL_AUX_USAGE_CCS_E;<br>
       att_state->input_aux_usage = ISL_AUX_USAGE_CCS_E;<br>
-   } else if (att_state->fast_clear) {<br>
+   } else {<br>
       att_state->aux_usage = ISL_AUX_USAGE_CCS_D;<br>
       /* From the Sky Lake PRM, RENDER_SURFACE_STATE::<wbr>AuxiliarySurfaceMode:<br>
        *<br>
</span>@@ -347,9 +347,6 @@ color_attachment_compute_aux_<wbr>usage(struct anv_device * device,<br>
<span class="">          att_state->input_aux_usage = ISL_AUX_USAGE_CCS_D;<br>
       else<br>
          att_state->input_aux_usage = ISL_AUX_USAGE_NONE;<br>
-   } else {<br>
-      att_state->aux_usage = ISL_AUX_USAGE_NONE;<br>
-      att_state->input_aux_usage = ISL_AUX_USAGE_NONE;<br>
    }<br>
 }<br>
<br>
--<br>
</span>2.13.3<br>
<div class="HOEnZb"><div class="h5"><br>
______________________________<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>