[Mesa-dev] [PATCH 07/18] intel/blorp: Take a fast_clear_op in ccs_resolve

Pohjolainen, Topi topi.pohjolainen at gmail.com
Thu Nov 3 14:41:04 UTC 2016


On Fri, Oct 28, 2016 at 02:17:03AM -0700, Jason Ekstrand wrote:
> Eventually, we may want to just have a single blorp_ccs_op function that
> does both clears and resolves.  For now we'll stick to just making the
> ccs_resolve function we have now a bit more configurable.

I had a question in patch 4. Patches 1-3, 5 and 7 are:

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

> 
> Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
> ---
>  src/intel/blorp/blorp.h               | 10 +++++++++-
>  src/intel/blorp/blorp_clear.c         | 12 ++++++------
>  src/intel/blorp/blorp_priv.h          |  7 -------
>  src/mesa/drivers/dri/i965/brw_blorp.c | 15 ++++++++++++++-
>  4 files changed, 29 insertions(+), 15 deletions(-)
> 
> diff --git a/src/intel/blorp/blorp.h b/src/intel/blorp/blorp.h
> index c16e724..87ed70e 100644
> --- a/src/intel/blorp/blorp.h
> +++ b/src/intel/blorp/blorp.h
> @@ -166,10 +166,18 @@ blorp_clear_attachments(struct blorp_batch *batch,
>                          bool clear_depth, float depth_value,
>                          uint8_t stencil_mask, uint8_t stencil_value);
>  
> +enum blorp_fast_clear_op {
> +   BLORP_FAST_CLEAR_OP_NONE = 0,
> +   BLORP_FAST_CLEAR_OP_CLEAR,
> +   BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL,
> +   BLORP_FAST_CLEAR_OP_RESOLVE_FULL,
> +};
> +
>  void
>  blorp_ccs_resolve(struct blorp_batch *batch,
>                    struct blorp_surf *surf, uint32_t level, uint32_t layer,
> -                  enum isl_format format);
> +                  enum isl_format format,
> +                  enum blorp_fast_clear_op resolve_op);
>  
>  /**
>   * For an overview of the HiZ operations, see the following sections of the
> diff --git a/src/intel/blorp/blorp_clear.c b/src/intel/blorp/blorp_clear.c
> index 2d37256..4b1f947 100644
> --- a/src/intel/blorp/blorp_clear.c
> +++ b/src/intel/blorp/blorp_clear.c
> @@ -542,7 +542,8 @@ blorp_clear_attachments(struct blorp_batch *batch,
>  void
>  blorp_ccs_resolve(struct blorp_batch *batch,
>                    struct blorp_surf *surf, uint32_t level, uint32_t layer,
> -                  enum isl_format format)
> +                  enum isl_format format,
> +                  enum blorp_fast_clear_op resolve_op)
>  {
>     struct blorp_params params;
>     blorp_params_init(&params);
> @@ -585,14 +586,13 @@ blorp_ccs_resolve(struct blorp_batch *batch,
>     params.y1 = ALIGN(params.y1, y_scaledown) / y_scaledown;
>  
>     if (batch->blorp->isl_dev->info->gen >= 9) {
> -      if (params.dst.aux_usage == ISL_AUX_USAGE_CCS_E)
> -         params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
> -      else
> -         params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL;
> +      assert(resolve_op == BLORP_FAST_CLEAR_OP_RESOLVE_FULL ||
> +             resolve_op == BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL);
>     } else {
>        /* Broadwell and earlier do not have a partial resolve */
> -      params.fast_clear_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
> +      assert(resolve_op == BLORP_FAST_CLEAR_OP_RESOLVE_FULL);
>     }
> +   params.fast_clear_op = resolve_op;
>  
>     /* Note: there is no need to initialize push constants because it doesn't
>      * matter what data gets dispatched to the render target.  However, we must
> diff --git a/src/intel/blorp/blorp_priv.h b/src/intel/blorp/blorp_priv.h
> index 300bd9d..0077c24 100644
> --- a/src/intel/blorp/blorp_priv.h
> +++ b/src/intel/blorp/blorp_priv.h
> @@ -44,13 +44,6 @@ enum {
>     BLORP_NUM_BT_ENTRIES
>  };
>  
> -enum blorp_fast_clear_op {
> -   BLORP_FAST_CLEAR_OP_NONE = 0,
> -   BLORP_FAST_CLEAR_OP_CLEAR,
> -   BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL,
> -   BLORP_FAST_CLEAR_OP_RESOLVE_FULL,
> -};
> -
>  struct brw_blorp_surface_info
>  {
>     bool enabled;
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c b/src/mesa/drivers/dri/i965/brw_blorp.c
> index 2aa9420..9eee933 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> @@ -943,10 +943,23 @@ brw_blorp_resolve_color(struct brw_context *brw, struct intel_mipmap_tree *mt)
>     unsigned level = 0;
>     blorp_surf_for_miptree(brw, &surf, mt, true, &level, isl_tmp);
>  
> +   enum blorp_fast_clear_op resolve_op;
> +   if (brw->gen >= 9) {
> +      if (surf.aux_usage == ISL_AUX_USAGE_CCS_E)
> +         resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
> +      else
> +         resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_PARTIAL;
> +   } else {
> +      assert(surf.aux_usage == ISL_AUX_USAGE_CCS_D);
> +      /* Broadwell and earlier do not have a partial resolve */
> +      resolve_op = BLORP_FAST_CLEAR_OP_RESOLVE_FULL;
> +   }
> +
>     struct blorp_batch batch;
>     blorp_batch_init(&brw->blorp, &batch, brw, 0);
>     blorp_ccs_resolve(&batch, &surf, 0 /* level */, 0 /* layer */,
> -                     brw_blorp_to_isl_format(brw, format, true));
> +                     brw_blorp_to_isl_format(brw, format, true),
> +                     resolve_op);
>     blorp_batch_finish(&batch);
>  
>     mt->fast_clear_state = INTEL_FAST_CLEAR_STATE_RESOLVED;
> -- 
> 2.5.0.400.gff86faf
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list