Am 28.11.2012 21:57, schrieb jfons...@vmware.com: > From: José Fonseca <jfons...@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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev