[Mesa-dev] [PATCH 05/12] i965/blorp: Skip redundant re-fast clear for non-compressed
Topi Pohjolainen
topi.pohjolainen at intel.com
Wed Aug 31 15:17:54 UTC 2016
Originally re-clears where skipped but when lossless compression
was introduced the re-clears where errorneously enabled also for
non-compressed fast clears.
Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
CC: Ben Widawsky <benjamin.widawsky at intel.com>
CC: Kenneth Graunke <kenneth at whitecape.org>
CC: Harri Syrja <harri.syrja at intel.com>
Cc: Chad Versace <chad at kiwitree.net>
---
src/mesa/drivers/dri/i965/brw_blorp.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
index 8a3caac..bc8513d 100644
--- a/src/mesa/drivers/dri/i965/brw_blorp.c
+++ b/src/mesa/drivers/dri/i965/brw_blorp.c
@@ -698,10 +698,23 @@ do_single_blorp_clear(struct brw_context *brw, struct gl_framebuffer *fb,
const bool color_updated = brw_meta_set_fast_clear_color(
brw, irb->mt, &ctx->Color.ClearColor);
- /* If the buffer is already in INTEL_FAST_CLEAR_STATE_CLEAR, the clear
- * is redundant and can be skipped.
+ /* If the buffer is already in INTEL_FAST_CLEAR_STATE_CLEAR, and the
+ * buffer isn't compressed, the clear is redundant and can be skipped.
+ *
+ * Without compression fast clear only operates on the mcs buffer
+ * recording if color values are cleared. The hardware, however,
+ * doesn't write the actual color value into the mcs or color
+ * buffer. Only by the time of render (inclucing color resolve) does the
+ * hardware read the _current_ color value in the surface state and
+ * write the actual pixel values in the color buffer accordingly.
+ *
+ * This seems to be the reason why sampler engine cannot handle
+ * non-compressed fast clear - it doesn't know how to read the color
+ * value from the surface state. With compression the color value is
+ * recorded in the color buffer (only not for every pixel) and therefore
+ * it is available without consulting the surface state.
*/
- if (!color_updated &&
+ if ((!color_updated || !is_lossless_compressed) &&
irb->mt->fast_clear_state == INTEL_FAST_CLEAR_STATE_CLEAR)
return true;
--
2.5.5
More information about the mesa-dev
mailing list