[Mesa-dev] [PATCH 2/4] util/u_format: Kill util_format_is_array().

Roland Scheidegger sroland at vmware.com
Wed Nov 28 13:55:12 PST 2012


Am 28.11.2012 21:57, schrieb jfonseca at vmware.com:
> From: José Fonseca <jfonseca at vmware.com>
> 
> It is buggy (it was giving wrong results for some of the formats with
> padding), and util_format_description::is_array already does precisely
> what's intended.
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_format_aos.c |    3 +-
>  src/gallium/auxiliary/gallivm/lp_bld_type.h       |    3 +-
>  src/gallium/auxiliary/util/u_format.c             |   41 ---------------------
>  3 files changed, 4 insertions(+), 43 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
> index 9591bcf..644d403 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
> @@ -471,7 +471,8 @@ lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
>     }
>  
>     /* If all channels are of same type and we are not using half-floats */
> -   if (util_format_is_array(format_desc)) {
> +   if (format_desc->is_array) {
> +      assert(!format_desc->is_mixed);
>        return lp_build_fetch_rgba_aos_array(gallivm, format_desc, type, base_ptr, offset);
>     }
>  
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> index 6ce5501..d0b490b 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_type.h
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h
> @@ -176,7 +176,8 @@ struct lp_build_context
>  static INLINE void
>  lp_type_from_format_desc(struct lp_type* type, const struct util_format_description *format_desc)
>  {
> -   assert(util_format_is_array(format_desc));
> +   assert(format_desc->is_array);
> +   assert(!format_desc->is_mixed);
>  
>     memset(type, 0, sizeof(struct lp_type));
>     type->floating = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT;
> diff --git a/src/gallium/auxiliary/util/u_format.c b/src/gallium/auxiliary/util/u_format.c
> index ddce956..8228de1 100644
> --- a/src/gallium/auxiliary/util/u_format.c
> +++ b/src/gallium/auxiliary/util/u_format.c
> @@ -134,47 +134,6 @@ util_format_is_pure_uint(enum pipe_format format)
>     return (desc->channel[i].type == UTIL_FORMAT_TYPE_UNSIGNED && desc->channel[i].pure_integer) ? TRUE : FALSE;
>  }
>  
> -boolean
> -util_format_is_array(const struct util_format_description *desc)
> -{
> -   unsigned chan;
> -
> -   if (desc->layout != UTIL_FORMAT_LAYOUT_PLAIN ||
> -       desc->colorspace != UTIL_FORMAT_COLORSPACE_RGB ||
> -       desc->block.width != 1 ||
> -       desc->block.height != 1) {
> -      return FALSE;
> -   }
> -
> -   for (chan = 0; chan < desc->nr_channels; ++chan) {
> -      if (desc->channel[chan].size != desc->channel[0].size)
> -         return FALSE;
> -
> -      if (desc->channel[chan].type == UTIL_FORMAT_TYPE_VOID && (chan + 1) == desc->nr_channels)
> -         continue;
> -
> -      if (desc->channel[chan].type != desc->channel[0].type)
> -         return FALSE;
> -
> -      if (desc->channel[chan].normalized != desc->channel[0].normalized)
> -         return FALSE;
> -
> -      if (desc->channel[chan].pure_integer != desc->channel[0].pure_integer)
> -         return FALSE;
> -   }
> -
> -   if (desc->nr_channels == 4) {
> -      if (desc->swizzle[3] < 3)
> -         return FALSE;
> -   } else {
> -      for (chan = 0; chan < desc->nr_channels; ++chan) {
> -         if (desc->swizzle[chan] != chan)
> -            return FALSE;
> -      }
> -   }
> -
> -   return TRUE;
> -}
>  
>  boolean
>  util_format_is_luminance_alpha(enum pipe_format format)
> 

The function protoype for util_format_is_array() should be removed in
u_format.h, otherwise looks good.

Roland



More information about the mesa-dev mailing list