aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/mesa/main/format_parser.py
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2015-02-22 14:31:16 +0100
committermarha <marha@users.sourceforge.net>2015-02-22 14:31:16 +0100
commitf1c2db43dcf35d2cf4715390bd2391c28e42a8c2 (patch)
tree46b537271afe0f6534231b1bd4cc4f91ae1fb446 /mesalib/src/mesa/main/format_parser.py
parent5e5a48ff8cd08f123601cd0625ca62a86675aac9 (diff)
downloadvcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.tar.gz
vcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.tar.bz2
vcxsrv-f1c2db43dcf35d2cf4715390bd2391c28e42a8c2.zip
xwininfo fontconfig libX11 libXdmcp libfontenc libxcb libxcb/xcb-proto mesalib xserver xkeyboard-config mkfontscale git update 22 Feb 2015
xserver commit 3a06faf3fcdb7451125a46181f9152e8e59e9770 libxcb commit e3ec1f74637237ce500dfd0ca59f2e422da4e019 libxcb/xcb-proto commit 4c550465934164aab2449a125f75f4ca07816233 xkeyboard-config commit 26f344c93f8c6141e9233eb68088ba4fd56bc9ef libX11 commit c8e19b393defd53f046ddc2da3a16881221b3c34 libXdmcp commit 9f4cac7656b221ce2a8f97e7bd31e5e23126d001 libfontenc commit de1843aaf76015c9d99416f3122d169fe331b849 mkfontscale commit 87d628f8eec170ec13bb9feefb1ce05aed07d1d6 xwininfo commit 0c49f8f2bd56b1e77721e81030ea948386dcdf4e fontconfig commit d6d5adeb7940c0d0beb86489c2a1c2ce59e5c044 mesa commit 4359954d842caa2a9f8d4b50d70ecc789884b68b
Diffstat (limited to 'mesalib/src/mesa/main/format_parser.py')
-rw-r--r--mesalib/src/mesa/main/format_parser.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/mesalib/src/mesa/main/format_parser.py b/mesalib/src/mesa/main/format_parser.py
index 5e45c74de..11184f78e 100644
--- a/mesalib/src/mesa/main/format_parser.py
+++ b/mesalib/src/mesa/main/format_parser.py
@@ -24,6 +24,8 @@
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+import sys
+
VOID = 'x'
UNSIGNED = 'u'
SIGNED = 's'
@@ -102,6 +104,10 @@ class Channel:
"""Returns true if the size of this channel is a power of two."""
return is_power_of_two(self.size)
+ def datatype(self):
+ """Returns the datatype corresponding to a channel type and size"""
+ return _get_datatype(self.type, self.size)
+
class Swizzle:
"""Describes a swizzle operation.
@@ -469,6 +475,49 @@ class Format:
return channel
return None
+ def datatype(self):
+ """Returns the datatype corresponding to a format's channel type and size"""
+ if self.layout == PACKED:
+ if self.block_size() == 8:
+ return 'uint8_t'
+ if self.block_size() == 16:
+ return 'uint16_t'
+ if self.block_size() == 32:
+ return 'uint32_t'
+ else:
+ assert False
+ else:
+ return _get_datatype(self.channel_type(), self.channel_size())
+
+def _get_datatype(type, size):
+ if type == FLOAT:
+ if size == 32:
+ return 'float'
+ elif size == 16:
+ return 'uint16_t'
+ else:
+ assert False
+ elif type == UNSIGNED:
+ if size <= 8:
+ return 'uint8_t'
+ elif size <= 16:
+ return 'uint16_t'
+ elif size <= 32:
+ return 'uint32_t'
+ else:
+ assert False
+ elif type == SIGNED:
+ if size <= 8:
+ return 'int8_t'
+ elif size <= 16:
+ return 'int16_t'
+ elif size <= 32:
+ return 'int32_t'
+ else:
+ assert False
+ else:
+ assert False
+
def _parse_channels(fields, layout, colorspace, swizzle):
channels = []
for field in fields:
@@ -515,7 +564,10 @@ def parse(filename):
block_height = int(fields[3])
colorspace = fields[9]
- swizzle = Swizzle(fields[8])
+ try:
+ swizzle = Swizzle(fields[8])
+ except:
+ sys.exit("error parsing swizzle for format " + name)
channels = _parse_channels(fields[4:8], layout, colorspace, swizzle)
yield Format(name, layout, block_width, block_height, channels, swizzle, colorspace)