gallium: Add util_format_is_unorm8 check
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Fri, 5 Jul 2019 15:40:22 +0000 (08:40 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Tue, 9 Jul 2019 21:17:47 +0000 (21:17 +0000)
Useful for formats that would work with the same driver code path as
RGBA8 UNORM but that don't meet the util_format_is_rgba8_variant
criteria due to a smaller channel count.

v2: Use simpler logic (suggested by Iago).

v3: Fix spelling erorr. boolean->bool (thank you airlied).

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/auxiliary/util/u_format.h

index cf69460..abf1141 100644 (file)
@@ -788,7 +788,6 @@ util_format_is_rgba8_variant(const struct util_format_description *desc)
    return TRUE;
 }
 
-
 /**
  * Return total bits needed for the pixel format per block.
  */
@@ -1265,6 +1264,22 @@ util_format_get_first_non_void_channel(enum pipe_format format)
    return i;
 }
 
+/**
+ * Whether this format is any 8-bit UNORM variant. Looser than
+ * util_is_rgba8_variant (also includes alpha textures, for instance).
+ */
+
+static inline bool
+util_format_is_unorm8(const struct util_format_description *desc)
+{
+   int c = util_format_get_first_non_void_channel(desc->format);
+
+   if (c == -1)
+      return false;
+
+   return desc->is_unorm && desc->is_array && desc->channel[c].size == 8;
+}
+
 /*
  * Format access functions.
  */