[Mesa-dev] [PATCH 09/26] i965: Split per miptree and per slice/level fast clear bits

Pohjolainen, Topi topi.pohjolainen at gmail.com
Mon Oct 31 07:59:54 UTC 2016


On Sat, Oct 29, 2016 at 12:47:02AM -0700, Jason Ekstrand wrote:
>    On Tue, Oct 11, 2016 at 12:26 PM, Topi Pohjolainen
>    <[1]topi.pohjolainen at gmail.com> wrote:
> 
>      Currently the status bits for fast clear include the flag telling
>      if non-multisampled mcs buffer should be used at all. Once the
>      state tracking is changed to follow individual levels/layers one
>      still needs to have the mcs enabling information in the miptree.
>      Therefore simply split it out to its own boolean.
> 
>    Thank you!  The fast clear state bits have been somewhat confused for
>    some time.  Between disable_aux_buffers, intel_fast_clear_state,
>    intel_msaa_layout, and the hiz resolve tracking, we have a bunch of
>    different fields that track memory layout, what aux is available, and
>    the current state of affairs and some of them are trying to track two
>    things at once. I hope to fix that some day but this is definitely a
>    step in the right direction.
> 
>      Possible follow-up work is to combine disable_aux_buffers and
>      no_msrt_mcs into single enum.
> 
>    Yeah, I think that's a good direction.  I did something similar in my
>    Vulkan CCS series where I had an "aux usage" field in the image that
>    provided a sort of "global" picture of the usage.
> 
>      Signed-off-by: Topi Pohjolainen <[2]topi.pohjolainen at intel.com>
>      ---
>       src/mesa/drivers/dri/i965/brw_blorp.c         |  2 +-
>       src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 14 +++++++++-----
>       src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 12 ++++++------
>       3 files changed, 16 insertions(+), 12 deletions(-)
>      diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c
>      b/src/mesa/drivers/dri/i965/brw_blorp.c
>      index c55bbc8..6332788 100644
>      --- a/src/mesa/drivers/dri/i965/brw_blorp.c
>      +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
>      @@ -780,7 +780,7 @@ do_single_blorp_clear(struct brw_context *brw,
>      struct gl_framebuffer *fb,
>          if (set_write_disables(irb, ctx->Color.ColorMask[buf],
>      color_write_disable))
>             can_fast_clear = false;
>      -   if (irb->mt->fast_clear_state == INTEL_FAST_CLEAR_STATE_NO_MCS
>      ||
>      +   if (irb->mt->no_msrt_mcs ||
>              !brw_is_color_fast_clear_compatible(brw, irb->mt,
>      &ctx->Color.ClearColor))
>             can_fast_clear = false;
>      diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>      b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>      index ce72e2c..4fb07e9 100644
>      --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>      +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
>      @@ -374,8 +374,9 @@ intel_miptree_create_layout(struct brw_context
>      *brw,
>          mt->logical_width0 = width0;
>          mt->logical_height0 = height0;
>          mt->logical_depth0 = depth0;
>      -   mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_NO_MCS;
>      +   mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_RESOLVED;
>          mt->disable_aux_buffers = (layout_flags &
>      MIPTREE_LAYOUT_DISABLE_AUX) != 0;
>      +   mt->no_msrt_mcs = true;
>          mt->is_scanout = (layout_flags & MIPTREE_LAYOUT_FOR_SCANOUT) !=
>      0;
>          exec_list_make_empty(&mt->hiz_map);
>          mt->cpp = _mesa_get_format_bytes(format);
>      @@ -787,7 +788,7 @@ intel_miptree_create(struct brw_context *brw,
>           */
>          if (intel_tiling_supports_non_msrt_mcs(brw, mt->tiling) &&
>              intel_miptree_supports_non_msrt_fast_clear(brw, mt)) {
>      -      mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_RESOLVED;
>      +      mt->no_msrt_mcs = false;
>             assert(brw->gen < 8 || mt->halign == 16 || num_samples <= 1);
>             /* On Gen9+ clients are not currently capable of consuming
>      compressed
>      @@ -1582,6 +1583,7 @@ intel_miptree_alloc_non_msrt_mcs(struct
>      brw_context *brw,
>       {
>          assert(mt->mcs_mt == NULL);
>          assert(!mt->disable_aux_buffers);
>      +   assert(!mt->no_msrt_mcs);
>          /* The format of the MCS buffer is opaque to the driver; all
>      that matters
>           * is that we get its size and pitch right.  We'll pretend that
>      the format
>      @@ -2126,6 +2128,9 @@ intel_miptree_resolve_color(struct brw_context
>      *brw,
>                                   unsigned level, unsigned layer,
>                                   int flags)
>       {
>      +   if (mt->no_msrt_mcs)
>      +      return false;
>      +
>          intel_miptree_check_color_resolve(mt, level, layer);
>          /* From gen9 onwards there is new compression scheme for single
>      sampled
>      @@ -2137,7 +2142,6 @@ intel_miptree_resolve_color(struct brw_context
>      *brw,
>             return false;
>          switch (mt->fast_clear_state) {
>      -   case INTEL_FAST_CLEAR_STATE_NO_MCS:
>          case INTEL_FAST_CLEAR_STATE_RESOLVED:
>             /* No resolve needed */
>             return false;
>      @@ -2187,7 +2191,7 @@ intel_miptree_make_shareable(struct
>      brw_context *brw,
>          if (mt->mcs_mt) {
>             intel_miptree_all_slices_resolve_color(brw, mt, 0);
>             intel_miptree_release(&mt->mcs_mt);
>      -      mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_NO_MCS;
>      +      mt->no_msrt_mcs = true;
>          }
>       }
>      @@ -3268,7 +3272,7 @@ intel_miptree_get_aux_isl_surf(struct
>      brw_context *brw,
>             } else if (intel_miptree_is_lossless_compressed(brw, mt)) {
>                assert(brw->gen >= 9);
>                *usage = ISL_AUX_USAGE_CCS_E;
>      -      } else if (mt->fast_clear_state !=
>      INTEL_FAST_CLEAR_STATE_NO_MCS) {
>      +      } else if (!mt->no_msrt_mcs) {
>                *usage = ISL_AUX_USAGE_CCS_D;
>             } else {
>                unreachable("Invalid MCS miptree");
>      diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
>      b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
>      index bfb8ad5..57d7b80 100644
>      --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
>      +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
>      @@ -220,12 +220,6 @@ enum intel_msaa_layout
>       enum intel_fast_clear_state
>       {
>          /**
>      -    * There is no MCS buffer for this miptree, and one should never
>      be
>      -    * allocated.
>      -    */
>      -   INTEL_FAST_CLEAR_STATE_NO_MCS,
>      -
>      -   /**
>           * No deferred clears are pending for this miptree, and the
>      contents of the
>           * color buffer are entirely correct.  An MCS buffer may or may
>      not exist
>           * for this miptree.  If it does exist, it is entirely in the
>      "no deferred
>      @@ -676,6 +670,12 @@ struct intel_mipmap_tree
>          bool disable_aux_buffers;
>          /**
>      +    * Fast clear and lossless compression are always disabled for
>      this
>      +    * miptree.
>      +    */
>      +   bool no_msrt_mcs;
> 
>    Please choose a different name for this boolean.  What you have right
>    now unabreviates to "no multisampled render target MCS" but it's for
>    single-sampled.  The single-sampled color compression surface is
>    referred to in the gen8 docs and prior as a non-multisampled MCS which
>    we abbreviate various places in the driver as non_msrt_mcs which is 1
>    character off the name of this field.  When I read this I can't tell if
>    you're saying "no non-msrt MCS" or "no-msrt MCS enabled".
>    One option would be "no_ccs".  I know that the docs overload CCS to
>    also include multisampled surfaces.  However, in ISL, we chose the
>    convention of CCS means single-sampled and MCS means multisampled.  I'm
>    also open to other names.

To me "no_ccs" sounds pretty good - that is exactly what the comment says.
Changed locally.

> 
>      +
>      +   /**
>           * Tells if the underlying buffer is to be also consumed by
>      entities other
>           * than the driver. This allows logic to turn off features such
>      as lossless
>           * compression which is not currently understood by client
>      applications.
>      --
>      2.5.5
>      _______________________________________________
>      mesa-dev mailing list
>      [3]mesa-dev at lists.freedesktop.org
>      [4]https://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 
> References
> 
>    1. mailto:topi.pohjolainen at gmail.com
>    2. mailto:topi.pohjolainen at intel.com
>    3. mailto:mesa-dev at lists.freedesktop.org
>    4. https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list