summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTopi Pohjolainen <topi.pohjolainen@intel.com>2016-06-10 09:01:54 +0300
committerTopi Pohjolainen <topi.pohjolainen@intel.com>2016-11-25 16:57:07 +0200
commit6859d2ba2ee20678e3f763dcf28e2942e0a7a627 (patch)
tree95c770b070bbe3746b04417e2713d2b744647f2d
parentea2c4196004980a513aee10b606bc1aa74d003c5 (diff)
i965: Refactor check if color resolve is needed
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com> Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
-rw-r--r--src/mesa/drivers/dri/i965/intel_mipmap_tree.c43
1 files 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 8564d62f41..a5913bc7b7 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");
}