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.pohjolai...@intel.com> CC: Ben Widawsky <benjamin.widaw...@intel.com> CC: Kenneth Graunke <kenn...@whitecape.org> CC: Harri Syrja <harri.sy...@intel.com> Cc: Chad Versace <c...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev