[Mesa-dev] [PATCH 25/26] i965/gen8: Relax asserts prohibiting arrayed/mipmapped fast clears

Jason Ekstrand jason at jlekstrand.net
Mon Oct 31 21:43:06 UTC 2016


On Tue, Oct 11, 2016 at 12:26 PM, Topi Pohjolainen <
topi.pohjolainen at gmail.com> wrote:

> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/intel/isl/isl.c                           |  3 +--
>  src/mesa/drivers/dri/i965/brw_blorp.c         |  6 +++---
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 23
> +++++++++++++----------
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.h |  3 ++-
>  4 files changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> index 66e2df3..7e1e720 100644
> --- a/src/intel/isl/isl.c
> +++ b/src/intel/isl/isl.c
> @@ -1430,8 +1430,7 @@ isl_surf_get_ccs_surf(const struct isl_device *dev,
>     assert(ISL_DEV_GEN(dev) >= 7);
>
>     assert(ISL_DEV_GEN(dev) >= 8 || surf->dim == ISL_SURF_DIM_2D);
> -
> -   assert(surf->logical_level0_px.depth == 1);
> +   assert(ISL_DEV_GEN(dev) >= 8 || surf->logical_level0_px.depth == 1);
>

I have a patch in my series which fixes this and another assert or two.


>
>     /* TODO: More conditions where it can fail. */
>
> diff --git a/src/mesa/drivers/dri/i965/brw_blorp.c
> b/src/mesa/drivers/dri/i965/brw_blorp.c
> index 4e3359c..ee81ffc 100644
> --- a/src/mesa/drivers/dri/i965/brw_blorp.c
> +++ b/src/mesa/drivers/dri/i965/brw_blorp.c
> @@ -773,7 +773,7 @@ set_slice_fast_clear_color(struct brw_context *brw,
>  {
>     bool updated = false;
>
> -   assert(first_layer == 0 && num_layers == 1);
> +   assert(brw->gen >= 8 || (first_layer == 0 && num_layers == 1));
>
>     for (unsigned i = 0; i < num_layers; ++i) {
>        updated |= brw_meta_set_fast_clear_color(
> @@ -912,7 +912,7 @@ do_single_blorp_clear(struct brw_context *brw, struct
> gl_framebuffer *fb,
>         * INTEL_FAST_CLEAR_STATE_CLEAR so that we won't waste time doing
>         * redundant clears.
>         */
> -      intel_miptree_set_fast_clear_state(irb->mt, irb->mt_level,
> +      intel_miptree_set_fast_clear_state(brw, irb->mt, irb->mt_level,
>                                           layer, num_layers,
>                                           INTEL_FAST_CLEAR_STATE_CLEAR);
>     } else {
> @@ -993,7 +993,7 @@ brw_blorp_resolve_color(struct brw_context *brw,
> struct intel_mipmap_tree *mt,
>                       brw_blorp_to_isl_format(brw, format, true));
>     blorp_batch_finish(&batch);
>
> -   intel_miptree_set_fast_clear_state(mt, level, layer, 1,
> +   intel_miptree_set_fast_clear_state(brw, mt, level, layer, 1,
>                                        INTEL_FAST_CLEAR_STATE_RESOLVED);
>  }
>
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index a41a654..932220e 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -1590,7 +1590,7 @@ intel_miptree_alloc_mcs(struct brw_context *brw,
>
>     /* Multisampled miptrees are only supported for single level. */
>     assert(mt->first_level == 0);
> -   intel_miptree_set_fast_clear_state(mt, mt->first_level, 0,
> +   intel_miptree_set_fast_clear_state(brw, mt, mt->first_level, 0,
>                                        mt->logical_depth0,
>                                        INTEL_FAST_CLEAR_STATE_CLEAR);
>
> @@ -2167,34 +2167,37 @@ intel_miptree_get_fast_clear_state(const struct
> intel_mipmap_tree *mt,
>  }
>
>  static void
> -intel_miptree_check_color_resolve(const struct intel_mipmap_tree *mt,
> +intel_miptree_check_color_resolve(const struct brw_context *brw,
> +                                  const struct intel_mipmap_tree *mt,
>                                    unsigned level, unsigned layer)
>  {
>     if (!mt->mcs_mt)
>        return;
>
> -   /* Fast color clear is not supported for mipmapped surfaces. */
> -   assert(level == 0 && mt->first_level == 0 && mt->last_level == 0);
> +   /* Fast color clear is supported for mipmapped surfaces only on Gen8+.
> */
> +   assert(brw->gen >= 8 ||
> +          (level == 0 && mt->first_level == 0 && mt->last_level == 0));
>
>     /* Compression of arrayed msaa surfaces is supported. */
>     if (mt->num_samples > 1)
>        return;
>
> -   /* Fast color clear is not supported for non-msaa arrays. */
> -   assert(layer == 0 && mt->logical_depth0 == 1);
> +   /* Fast color clear is supported for non-msaa arrays only on Gen8+. */
> +   assert(brw->gen >= 8 || (layer == 0 && mt->logical_depth0 == 1));
>
>     (void)level;
>     (void)layer;
>  }
>
>  void
> -intel_miptree_set_fast_clear_state(struct intel_mipmap_tree *mt,
> +intel_miptree_set_fast_clear_state(const struct brw_context *brw,
> +                                   struct intel_mipmap_tree *mt,
>                                     unsigned level,
>                                     unsigned first_layer,
>                                     unsigned num_layers,
>                                     enum intel_fast_clear_state new_state)
>  {
> -   intel_miptree_check_color_resolve(mt, level, first_layer);
> +   intel_miptree_check_color_resolve(brw, mt, level, first_layer);
>
>     assert(first_layer + num_layers <= mt->physical_depth0);
>
> @@ -2232,7 +2235,7 @@ intel_miptree_used_for_rendering(const struct
> brw_context *brw,
>        if (is_lossless_compressed ||
>            fast_clear_state == INTEL_FAST_CLEAR_STATE_CLEAR) {
>           intel_miptree_set_fast_clear_state(
> -            mt, level, start_layer + i, 1,
> +            brw, mt, level, start_layer + i, 1,
>              INTEL_FAST_CLEAR_STATE_UNRESOLVED);
>        }
>     }
> @@ -2269,7 +2272,7 @@ intel_miptree_resolve_color(struct brw_context *brw,
>                              unsigned level, unsigned layer,
>                              int flags)
>  {
> -   intel_miptree_check_color_resolve(mt, level, layer);
> +   intel_miptree_check_color_resolve(brw, mt, level, layer);
>
>     if (!intel_miptree_needs_color_resolve(brw, mt, flags))
>        return false;
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> index 1ba2fb9..e98a935 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> @@ -897,7 +897,8 @@ intel_miptree_get_fast_clear_state(const struct
> intel_mipmap_tree *mt,
>                                     unsigned level, unsigned layer);
>
>  void
> -intel_miptree_set_fast_clear_state(struct intel_mipmap_tree *mt,
> +intel_miptree_set_fast_clear_state(const struct brw_context *brw,
> +                                   struct intel_mipmap_tree *mt,
>                                     unsigned level,
>                                     unsigned first_layer,
>                                     unsigned num_layers,
> --
> 2.5.5
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161031/401c4978/attachment.html>


More information about the mesa-dev mailing list