On 28/07/17 17:21, Nanley Chery wrote:
On Fri, Jul 28, 2017 at 09:28:45AM +0100, Lionel Landwerlin wrote:
On 19/07/17 22:21, Nanley Chery wrote:
Cc: <mesa-sta...@lists.freedesktop.org>
Suggested-by: Jason Ekstrand <ja...@jlekstrand.net>
Signed-off-by: Nanley Chery <nanley.g.ch...@intel.com>
---
   src/intel/vulkan/anv_blorp.c       |  8 ++++----
   src/intel/vulkan/anv_private.h     |  8 ++++----
   src/intel/vulkan/genX_cmd_buffer.c | 25 +++++++++++++++----------
   3 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 459d57ec57..d6cbc1c0cd 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -1434,10 +1434,10 @@ void anv_CmdResolveImage(
   }
   void
-anv_image_ccs_clear(struct anv_cmd_buffer *cmd_buffer,
-                    const struct anv_image *image,
-                    const uint32_t base_level, const uint32_t level_count,
-                    const uint32_t base_layer, uint32_t layer_count)
+anv_image_fast_clear(struct anv_cmd_buffer *cmd_buffer,
+                     const struct anv_image *image,
+                     const uint32_t base_level, const uint32_t level_count,
+                     const uint32_t base_layer, uint32_t layer_count)
   {
      assert(image->type == VK_IMAGE_TYPE_3D || image->extent.depth == 1);
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 4dce360c76..9a5d2d6fa4 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2108,10 +2108,10 @@ anv_ccs_resolve(struct anv_cmd_buffer * const 
cmd_buffer,
                   const enum blorp_fast_clear_op op);
   void
-anv_image_ccs_clear(struct anv_cmd_buffer *cmd_buffer,
-                    const struct anv_image *image,
-                    const uint32_t base_level, const uint32_t level_count,
-                    const uint32_t base_layer, uint32_t layer_count);
+anv_image_fast_clear(struct anv_cmd_buffer *cmd_buffer,
+                     const struct anv_image *image,
+                     const uint32_t base_level, const uint32_t level_count,
+                     const uint32_t base_layer, uint32_t layer_count);
   enum isl_aux_usage
   anv_layout_to_aux_usage(const struct gen_device_info * const devinfo,
diff --git a/src/intel/vulkan/genX_cmd_buffer.c 
b/src/intel/vulkan/genX_cmd_buffer.c
index 9b3bb10164..81972821d1 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -392,7 +392,9 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer,
                           VkImageLayout initial_layout,
                           VkImageLayout final_layout)
   {
-   if (image->aux_usage != ISL_AUX_USAGE_CCS_E)
+   assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
+
+   if (image->aux_usage == ISL_AUX_USAGE_NONE)
         return;
This bit definitely makes sense to me.
I've been hitting it on newer work where the anv_image_fast_clear() would
assert because there is no auxiliary surface.

I'm not familiar with the CCS stuff enough to review the part below though
:(

No problem, and please don't feel obligated to.

Acked-by: Lionel Landwerlin <lionel.g.landwer...@intel.com>

Thanks for the Ack, though, this series has already been pushed
upstream. The assert you mentioned, are you hitting that on current
master?

Yes, though I have other changes on top, so it might be my fault.
That's funny you mentioned this is already upstream, I can't see the
     if (image->aux_usage == NONE) return;
in the transition_color_buffer function on master.
Has that changed?


Regards,
Nanley

      if (initial_layout != VK_IMAGE_LAYOUT_UNDEFINED &&
@@ -405,15 +407,18 @@ transition_color_buffer(struct anv_cmd_buffer *cmd_buffer,
         layer_count = anv_minify(image->extent.depth, base_level);
      }
-#if GEN_GEN >= 9
-   /* We're transitioning from an undefined layout so it doesn't really matter
-    * what data ends up in the color buffer.  We do, however, need to ensure
-    * that the CCS has valid data in it.  One easy way to do that is to
-    * fast-clear the specified range.
-    */
-   anv_image_ccs_clear(cmd_buffer, image, base_level, level_count,
-                       base_layer, layer_count);
-#endif
+   if (image->aux_usage == ISL_AUX_USAGE_CCS_E ||
+       image->samples == 2 || image->samples == 8) {
+      /* We're transitioning from an undefined layout so it doesn't really
+       * matter what data ends up in the color buffer. We do, however, need to
+       * ensure that the auxiliary surface is not in an undefined state. This
+       * state is possible for CCS buffers SKL+ and MCS buffers with certain
+       * sample counts. One easy way to get to a valid state is to fast-clear
+       * the specified range.
+       */
+      anv_image_fast_clear(cmd_buffer, image, base_level, level_count,
+                           base_layer, layer_count);
+   }
   }
   /**


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to