util: Add a new flag, for formats that can be described as a bitmask.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 6 Mar 2010 12:48:39 +0000 (12:48 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 6 Mar 2010 12:48:39 +0000 (12:48 +0000)
src/gallium/auxiliary/util/u_format.h
src/gallium/auxiliary/util/u_format_parse.py
src/gallium/auxiliary/util/u_format_table.py

index ec6b0777349410dd14e2b0219f9e4c920af52feb..b2aa5bfb188cba57ab3b78a75a937b1b97964d81 100644 (file)
@@ -145,6 +145,15 @@ struct util_format_description
     */
    unsigned is_array:1;
 
+   /**
+    * Whether the pixel format can be described as a bitfield structure.
+    *
+    * In particular:
+    * - pixel depth must be 8, 16, or 32 bits;
+    * - all channels must be unsigned, signed, or void
+    */
+   unsigned is_bitmask:1;
+
    /**
     * Whether channels have mixed types (ignoring UTIL_FORMAT_TYPE_VOID).
     */
index 250926418ecbd55ebcf80352005f4e5951fa2529..80bae6fc955c0641c85bb78ef41d8168ddfa41be 100755 (executable)
@@ -166,17 +166,11 @@ class Format:
         return True
 
     def is_bitmask(self):
-        if self.block_size() > 32:
-            return False
-        if not self.is_pot():
+        if self.block_size() not in (8, 16, 32):
             return False
         for channel in self.channels:
-            if not is_pot(channel.size):
-                return True
             if channel.type not in (VOID, UNSIGNED, SIGNED):
                 return False
-            if channel.size >= 32:
-                return False
         return True
 
     def inv_swizzles(self):
index f9d21ed8aa155b5b4a1bda0e6ca2671eec03b511..fb68852a530f778b3e2e77e5ea7c98b6283cb1e0 100755 (executable)
@@ -96,6 +96,7 @@ def write_format_table(formats):
     print "   0,"
     print "   0,"
     print "   0,"
+    print "   0,"
     print "   {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},"
     print "   {0, 0, 0, 0},"
     print "   0"
@@ -111,6 +112,7 @@ def write_format_table(formats):
         print "   %s," % (layout_map(format.layout),)
         print "   %u,\t/* nr_channels */" % (format.nr_channels(),)
         print "   %s,\t/* is_array */" % (bool_map(format.is_array()),)
+        print "   %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()),)
         print "   %s,\t/* is_mixed */" % (bool_map(format.is_mixed()),)
         print "   {"
         for i in range(4):