<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>