Mesa (master): util: Added util_format_is_array.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Fri Jun 29 11:24:15 UTC 2012


Module: Mesa
Branch: master
Commit: 34075d4133f83e6fec31a62ee4b1b3c565abda56
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=34075d4133f83e6fec31a62ee4b1b3c565abda56

Author: James Benton <jbenton at vmware.com>
Date:   Fri May 18 17:27:19 2012 +0100

util: Added util_format_is_array.

This function checks whether a format description is in a simple array format.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 src/gallium/auxiliary/util/u_format.c |   32 ++++++++++++++++++++++++++++++++
 src/gallium/auxiliary/util/u_format.h |    7 +++++++
 2 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_format.c b/src/gallium/auxiliary/util/u_format.c
index cfc4a17..6f45298 100644
--- a/src/gallium/auxiliary/util/u_format.c
+++ b/src/gallium/auxiliary/util/u_format.c
@@ -159,6 +159,38 @@ util_format_is_pure_uint(enum pipe_format format)
 }
 
 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->swizzle[chan] != chan)
+         return FALSE;
+
+      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->channel[chan].size != desc->channel[0].size)
+         return FALSE;
+   }
+
+   return TRUE;
+}
+
+boolean
 util_format_is_luminance_alpha(enum pipe_format format)
 {
    const struct util_format_description *desc =
diff --git a/src/gallium/auxiliary/util/u_format.h b/src/gallium/auxiliary/util/u_format.h
index 1718fb5..e35e164 100644
--- a/src/gallium/auxiliary/util/u_format.h
+++ b/src/gallium/auxiliary/util/u_format.h
@@ -591,6 +591,13 @@ 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
+ */
+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
  * the reverse.




More information about the mesa-commit mailing list