Mesa (master): i965: Refactor check if color resolve is needed

Topi Pohjolainen tpohjola at kemper.freedesktop.org
Fri Nov 25 15:03:03 UTC 2016


Module: Mesa
Branch: master
Commit: 6859d2ba2ee20678e3f763dcf28e2942e0a7a627
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6859d2ba2ee20678e3f763dcf28e2942e0a7a627

Author: Topi Pohjolainen <topi.pohjolainen at intel.com>
Date:   Fri Jun 10 09:01:54 2016 +0300

i965: Refactor check if color resolve is needed

Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 43 +++++++++++++++++----------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index 8564d62..a5913bc 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -2280,6 +2280,31 @@ intel_miptree_used_for_rendering(const struct brw_context *brw,
    }
 }
 
+static bool
+intel_miptree_needs_color_resolve(const struct brw_context *brw,
+                                  const struct intel_mipmap_tree *mt,
+                                  int flags)
+{
+   if (mt->no_ccs)
+      return false;
+
+   const bool is_lossless_compressed =
+      intel_miptree_is_lossless_compressed(brw, mt);
+
+   /* From gen9 onwards there is new compression scheme for single sampled
+    * surfaces called "lossless compressed". These don't need to be always
+    * resolved.
+    */
+   if ((flags & INTEL_MIPTREE_IGNORE_CCS_E) && is_lossless_compressed)
+      return false;
+
+   /* Fast color clear resolves only make sense for non-MSAA buffers. */
+   if (mt->msaa_layout != INTEL_MSAA_LAYOUT_NONE && !is_lossless_compressed)
+      return false;
+
+   return true;
+}
+
 bool
 intel_miptree_resolve_color(struct brw_context *brw,
                             struct intel_mipmap_tree *mt, unsigned level,
@@ -2288,12 +2313,7 @@ intel_miptree_resolve_color(struct brw_context *brw,
 {
    intel_miptree_check_color_resolve(mt, level, start_layer);
 
-   /* From gen9 onwards there is new compression scheme for single sampled
-    * surfaces called "lossless compressed". These don't need to be always
-    * resolved.
-    */
-   if ((flags & INTEL_MIPTREE_IGNORE_CCS_E) &&
-       intel_miptree_is_lossless_compressed(brw, mt))
+   if (!intel_miptree_needs_color_resolve(brw, mt, flags))
       return false;
 
    switch (mt->fast_clear_state) {
@@ -2304,15 +2324,8 @@ intel_miptree_resolve_color(struct brw_context *brw,
    case INTEL_FAST_CLEAR_STATE_CLEAR:
       /* For now arrayed fast clear is not supported. */
       assert(num_layers == 1);
-
-      /* Fast color clear resolves only make sense for non-MSAA buffers. */
-      if (mt->msaa_layout == INTEL_MSAA_LAYOUT_NONE ||
-          intel_miptree_is_lossless_compressed(brw, mt)) {
-         brw_blorp_resolve_color(brw, mt, level, start_layer);
-         return true;
-      } else {
-         return false;
-      }
+      brw_blorp_resolve_color(brw, mt, level, start_layer);
+      return true;
    default:
       unreachable("Invalid fast clear state");
    }




More information about the mesa-commit mailing list