[Mesa-dev] [PATCH 2/2] i965: Check CCS_E compatibility for texture view rendering

Jason Ekstrand jason at jlekstrand.net
Fri Oct 27 19:52:30 UTC 2017


On Fri, Oct 27, 2017 at 12:24 PM, Nanley Chery <nanleychery at gmail.com>
wrote:

> Only use CCS_E to render to a texture that is CCS_E-compatible with the
> original texture's miptree (linear) format. This prevents render
> operations from writing data that can't be decoded with the original
> miptree format.
>
> On Gen10, with the new CCS_E-enabled formats handled, this enables the
> driver to pass the arb_texture_view-rendering-formats piglit test.
>
> Cc: <mesa-stable at lists.freedesktop.org>
> Signed-off-by: Nanley Chery <nanley.g.chery at intel.com>
> ---
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 28
> +++++++++++++++++++++++++--
>  1 file changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index a850f4d17b..59c57c227b 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -241,6 +241,27 @@ intel_miptree_supports_hiz(const struct brw_context
> *brw,
>     }
>  }
>
> +/**
> + * Return true if the format that will be used to access the miptree is
> + * CCS_E-compatible with the miptree's linear/non-sRGB format.
> + *
> + * Why use the linear format? Well, although the miptree may be specified
> with
> + * an sRGB format, the usage of that color space/format can be toggled.
> Since
> + * our HW tends to support more linear formats than sRGB ones, we use this
> + * format variant for check for CCS_E compatibility.
> + */
> +static bool
> +format_ccs_e_compat_with_miptree(const struct gen_device_info *devinfo,
> +                                 const struct intel_mipmap_tree *mt,
> +                                 enum isl_format access_format)
> +{
> +   assert(mt->aux_usage == ISL_AUX_USAGE_CCS_E);
> +
> +   mesa_format linear_format = _mesa_get_srgb_format_linear(mt->format);
> +   enum isl_format isl_format = brw_isl_format_for_mesa_
> format(linear_format);
> +   return isl_formats_are_ccs_e_compatible(devinfo, isl_format,
> access_format);
> +}
> +
>  static bool
>  intel_miptree_supports_ccs_e(struct brw_context *brw,
>                               const struct intel_mipmap_tree *mt)
> @@ -2662,8 +2683,11 @@ intel_miptree_render_aux_usage(struct brw_context
> *brw,
>        return mt->mcs_buf ? ISL_AUX_USAGE_CCS_D : ISL_AUX_USAGE_NONE;
>
>     case ISL_AUX_USAGE_CCS_E: {
> -      /* If the format supports CCS_E, then we can just use it */
> -      if (isl_format_supports_ccs_e(&brw->screen->devinfo,
> render_format))
> +      /* If the format supports CCS_E and is compatible with the miptree,
> +       * then we can use it.
> +       */
> +      if (format_ccs_e_compat_with_miptree(&brw->screen->devinfo,
> +                                           mt, render_format))
>

You don't need the helper if you just use mt->surf.format.  That's what
can_texture_with_ccs does.


>           return ISL_AUX_USAGE_CCS_E;
>
>        /* Otherwise, we have to fall back to CCS_D */
> --
> 2.14.3
>
> _______________________________________________
> 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/20171027/1c311186/attachment.html>


More information about the mesa-dev mailing list