[Mesa-dev] [PATCH v15 13/16] i965: Use partial resolves for CCS buffers being scanned out

Daniel Stone daniels at collabora.com
Tue Jun 6 17:20:21 UTC 2017


From: Ben Widawsky <ben at bwidawsk.net>

On Gen9 hardware, the display engine is able to scanout a compressed
framebuffer by providing an offset to auxiliary compression information.
Unfortunately, the hardware is incapable of doing the same thing for the
fast clear color.

To mitigate this, the hardware introduced a new resolve type called a
partial resolve. The partial resolve will only do a resolve of the fast
clear color and leave the rest of the compressed data alone.

This patch enables using this resolve type for cases where the
framebuffer will be passed along to the kernel for display.

v2: Add early exit from intel_miptree_make_shareable() when it's
scanout.
v3: Add another assert for mt->mcs_buf->offset. (Topi)

Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
Acked-by: Daniel Stone <daniels at collabora.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
Signed-off-by: Daniel Stone <daniels at collabora.com>
---
 src/mesa/drivers/dri/i965/brw_context.c       |  3 ++-
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 10 +++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 5e722cd6da..1b50cff338 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -1381,7 +1381,8 @@ intel_resolve_for_dri2_flush(struct brw_context *brw,
       if (rb->mt->num_samples <= 1) {
          assert(rb->mt_layer == 0 && rb->mt_level == 0 &&
                 rb->layer_count == 1);
-         intel_miptree_resolve_color(brw, rb->mt, 0, 0, 1, 0);
+         intel_miptree_resolve_color(brw, rb->mt, 0, 0, 1,
+                                     INTEL_RESOLVE_HINT_CLEAR_COLOR);
       } else {
          intel_renderbuffer_downsample(brw, rb);
       }
diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
index 267e46a284..79429a8c86 100644
--- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
@@ -2325,7 +2325,15 @@ intel_miptree_make_shareable(struct brw_context *brw,
    assert(mt->msaa_layout == INTEL_MSAA_LAYOUT_NONE || mt->num_samples <= 1);
 
    if (mt->mcs_buf) {
-      intel_miptree_all_slices_resolve_color(brw, mt, 0);
+      intel_miptree_all_slices_resolve_color(brw, mt, mt->is_scanout ?
+                                             INTEL_RESOLVE_HINT_CLEAR_COLOR :
+                                             INTEL_RESOLVE_HINT_FULL);
+      if (mt->is_scanout) {
+         assert(!mt->hiz_buf);
+         assert(mt->mcs_buf->offset);
+         return;
+      }
+
       mt->aux_disable |= (INTEL_AUX_DISABLE_CCS | INTEL_AUX_DISABLE_MCS);
       brw_bo_unreference(mt->mcs_buf->bo);
       free(mt->mcs_buf);
-- 
2.13.0



More information about the mesa-dev mailing list