[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(¶ms);
> @@ -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