util/u_format: Kill util_format_is_array().
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 28 Nov 2012 19:20:18 +0000 (19:20 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 29 Nov 2012 14:08:42 +0000 (14:08 +0000)
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.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
src/gallium/auxiliary/gallivm/lp_bld_type.h
src/gallium/auxiliary/util/u_format.c
src/gallium/auxiliary/util/u_format.h

index 750d54524c6f95908deb0cf083d26ceadeabbdb9..0b54ba4c5f5c4af156e9b41ea733d7ae16a87068 100644 (file)
@@ -481,7 +481,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);
    }
 
index 6ce5501baf4ee742eba22880cf8b93000f989918..d0b490b51e8fa0626651a665bf7ed5ec2e2469ed 100644 (file)
@@ -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;
index ddce95601a6ee97d86faa076498d552a7e55aa45..8228de1f23d392f083d2821b2bc77bb0ef2cfb16 100644 (file)
@@ -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)
index ec368fd75def8b67d040a607d286865ba5878f39..024dabb07ba04582fc7e6c5d0b1de93d7a42bdbd 100644 (file)
@@ -590,16 +590,6 @@ util_format_is_pure_sint(enum pipe_format format);
 boolean
 util_format_is_pure_uint(enum pipe_format format);
 
-/**
- * Whether the format is a simple array format where all channels
- * are of the same type and can be loaded from memory as a vector.
- *
- * If format is 4 channel it can be swizzled (eg BGRA) as long
- * as the alpha is the 3rd channel.
- */
-boolean
-util_format_is_array(const struct util_format_description *desc);
-
 /**
  * Check if the src format can be blitted to the destination format with
  * a simple memcpy.  For example, blitting from RGBA to RGBx is OK, but not