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) -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev