[Mesa-dev] [v2 18/19] i965: Add helper for lossless compression support

Ben Widawsky ben at bwidawsk.net
Mon Feb 15 21:27:19 UTC 2016


On Thu, Feb 11, 2016 at 08:34:11PM +0200, Topi Pohjolainen wrote:
> v2: Use explicitly against base type of GL_FLOAT instead of
>     using _mesa_is_format_integer_color(). Otherwise we miss
>     GL_UNSIGNED_NORMALIZED.
> 
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> ---
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 22 ++++++++++++++++++++++
>  src/mesa/drivers/dri/i965/intel_mipmap_tree.h |  3 +++
>  2 files changed, 25 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> index 6c233d8..e9fbeeb 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.c
> @@ -294,6 +294,28 @@ intel_miptree_is_lossless_compressed(const struct brw_context *brw,
>     return mt->num_samples <= 1;
>  }
>  
> +bool
> +intel_miptree_supports_lossless_compressed(mesa_format format)
> +{
> +   /* For now compression is only enabled for integer formats even though
> +    * there exist supported floating point formats also. This is a heuristic
> +    * decision based on current public benchmarks. In none of the cases these
> +    * formats provided any improvement but a few cases were seen to regress.
> +    * Hence these are left to to be enabled in the future when they are known
> +    * to improve things.
> +    */
> +   if (_mesa_get_format_datatype(format) == GL_FLOAT)
> +      return false;
> +
> +   /* In principle, fast clear mechanism and lossless compression go hand in
> +    * hand. However, fast clear can be also used to clear srgb surfaces by
> +    * using equivalent linear format. This trick, however, can't be extended
> +    * to be used with lossless compression and therefore a check is needed to
> +    * see if the format really is linear.
> +    */
> +   return _mesa_get_srgb_format_linear(format) == format;
> +}
> +

Hmm. Doesn't this need to use the ccs_e field in surface formats, or did I miss
something?

>  /**
>   * Determine depth format corresponding to a depth+stencil format,
>   * for separate stencil.
> diff --git a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> index 7cdfb37..6ce9f75 100644
> --- a/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> +++ b/src/mesa/drivers/dri/i965/intel_mipmap_tree.h
> @@ -679,6 +679,9 @@ intel_miptree_supports_non_msrt_fast_clear(struct brw_context *brw,
>                                             const struct intel_mipmap_tree *mt);
>  
>  bool
> +intel_miptree_supports_lossless_compressed(mesa_format format);
> +
> +bool
>  intel_miptree_alloc_non_msrt_mcs(struct brw_context *brw,
>                                   struct intel_mipmap_tree *mt);
>  
> -- 
> 2.5.0
> 
> _______________________________________________
> 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