<div dir="ltr"><div>Dylan,<br>Thanks for reviewing. I've got a new version coming that is much better documented and incorporates all of your comments. It even has docstrings!<br></div>--Jason<br><div><div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Mon, Jul 21, 2014 at 11:26 AM, Dylan Baker <span dir="ltr"><<a href="mailto:baker.dylan.c@gmail.com" target="_blank">baker.dylan.c@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">On Thursday, July 17, 2014 11:04:24 AM Jason Ekstrand wrote:<br>
> Instead of a having all of the format metadata in a gigantic hard-to-edit<br>
> array of type struct format_info, we now use a human-readable CSV file.<br>
> The CSV file also contains more format information than the format_info<br>
> struct contained so we can potentially make format_info more detailed later.<br>
><br>
> The idea (and some of the implementation) for this was taken from the<br>
> gallium driver. However, due to differences in the way the two systems<br>
> handle formats, they are NOT the same; watch out for differences.<br>
><br>
> Signed-off-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>
<br>
</div>I have some formatting/style/cleanup comments for your python. I also have a<br>
general suggestion, that you might want to use division from the __future__<br>
module. This fixes division to behave like the more sensible python3 default:<br>
// is floor division always, and / is true division always.<br>
<div><div class="h5"><br>
> ---<br>
> src/mesa/Makefile.am | 10 +<br>
> src/mesa/main/.gitignore | 1 +<br>
> src/mesa/main/format_info.py | 181 +++++<br>
> src/mesa/main/format_parser.py | 406 ++++++++++<br>
> src/mesa/main/formats.c | 1739<br>
> +--------------------------------------- 5 files changed, 599<br>
> insertions(+), 1738 deletions(-)<br>
> create mode 100644 src/mesa/main/format_info.py<br>
> create mode 100755 src/mesa/main/format_parser.py<br>
><br>
> diff --git a/src/mesa/Makefile.am b/src/mesa/Makefile.am<br>
> index 88eeff9..57c1e4a 100644<br>
> --- a/src/mesa/Makefile.am<br>
> +++ b/src/mesa/Makefile.am<br>
> @@ -64,6 +64,7 @@ include Makefile.sources<br>
><br>
> BUILT_SOURCES = \<br>
> main/get_hash.h \<br>
> + main/format_info.c \<br>
> $(BUILDDIR)main/git_sha1.h \<br>
> $(BUILDDIR)program/program_parse.tab.c \<br>
> $(BUILDDIR)program/lex.yy.c<br>
> @@ -81,6 +82,15 @@ main/get_hash.h: $(GLAPI)/gl_and_es_API.xml<br>
> main/get_hash_params.py \ -f $< > $@.tmp; \<br>
> mv $@.tmp $@;<br>
><br>
> +main/format_info.c: main/formats.csv \<br>
> + main/format_parser.py main/format_info.py<br>
> + $(AM_V_GEN)set -e; \<br>
> + $(PYTHON2) $(PYTHON_FLAGS) $(srcdir)/main/format_info.py \<br>
> + $< > $@.tmp; \<br>
> + mv $@.tmp $@;<br>
> +<br>
> +main/formats.c: main/format_info.c<br>
> +<br>
> noinst_LTLIBRARIES = $(ARCH_LIBS)<br>
> if NEED_LIBMESA<br>
> noinst_LTLIBRARIES += <a href="http://libmesa.la" target="_blank">libmesa.la</a><br>
> diff --git a/src/mesa/main/.gitignore b/src/mesa/main/.gitignore<br>
> index 837f490..fec0629 100644<br>
> --- a/src/mesa/main/.gitignore<br>
> +++ b/src/mesa/main/.gitignore<br>
> @@ -8,3 +8,4 @@ git_sha1.h.tmp<br>
> remap_helper.h<br>
> get_hash.h<br>
> get_hash.h.tmp<br>
> +format_info.c<br>
> diff --git a/src/mesa/main/format_info.py b/src/mesa/main/format_info.py<br>
> new file mode 100644<br>
> index 0000000..9b63bfb<br>
> --- /dev/null<br>
> +++ b/src/mesa/main/format_info.py<br>
> @@ -0,0 +1,181 @@<br>
> +#!/usr/bin/env python<br>
> +#<br>
> +# Copyright 2014 Intel Corporation<br>
> +#<br>
> +# Permission is hereby granted, free of charge, to any person obtaining a<br>
> +# copy of this software and associated documentation files (the<br>
> +# "Software"), to deal in the Software without restriction, including<br>
> +# without limitation the rights to use, copy, modify, merge, publish,<br>
> +# distribute, sub license, and/or sell copies of the Software, and to<br>
> +# permit persons to whom the Software is furnished to do so, subject to<br>
> +# the following conditions:<br>
> +#<br>
> +# The above copyright notice and this permission notice (including the<br>
> +# next paragraph) shall be included in all copies or substantial portions<br>
> +# of the Software.<br>
> +#<br>
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS<br>
> +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF<br>
> +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.<br>
> +# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR<br>
> +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,<br>
> +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE<br>
> +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>
> +<br>
> +import format_parser as parser<br>
> +import sys<br>
> +<br>
> +def get_gl_base_format(fmat):<br>
> + if <a href="http://fmat.name" target="_blank">fmat.name</a> == 'MESA_FORMAT_NONE':<br>
> + return 'GL_NONE'<br>
> + elif <a href="http://fmat.name" target="_blank">fmat.name</a> in ['MESA_FORMAT_YCBCR', 'MESA_FORMAT_YCBCR_REV']:<br>
> + return 'GL_YCBCR_MESA'<br>
> + elif fmat.has_channel('r'):<br>
> + if fmat.has_channel('g'):<br>
> + if fmat.has_channel('b'):<br>
> + if fmat.has_channel('a'):<br>
> + return 'GL_RGBA'<br>
> + else:<br>
> + return 'GL_RGB'<br>
> + else:<br>
> + return 'GL_RG'<br>
> + else:<br>
> + return 'GL_RED'<br>
> + elif fmat.has_channel('l'):<br>
> + if fmat.has_channel('a'):<br>
> + return 'GL_LUMINANCE_ALPHA'<br>
> + else:<br>
> + return 'GL_LUMINANCE'<br>
> + elif fmat.has_channel('a') and fmat.num_channels() == 1:<br>
> + return 'GL_ALPHA'<br>
> + elif fmat.has_channel('z'):<br>
> + if fmat.has_channel('s'):<br>
> + return 'GL_DEPTH_STENCIL'<br>
> + else:<br>
> + return 'GL_DEPTH_COMPONENT'<br>
> + elif fmat.has_channel('s'):<br>
> + return 'GL_STENCIL_INDEX'<br>
> + elif fmat.has_channel('i') and fmat.num_channels() == 1:<br>
> + return 'GL_INTENSITY'<br>
> + else:<br>
> + assert False<br>
> +<br>
> +def get_gl_data_type(fmat):<br>
> + if fmat.is_compressed():<br>
> + if 'SIGNED' in <a href="http://fmat.name" target="_blank">fmat.name</a> or 'SNORM' in <a href="http://fmat.name" target="_blank">fmat.name</a>:<br>
> + return 'GL_SIGNED_NORMALIZED'<br>
> + else:<br>
> + return 'GL_UNSIGNED_NORMALIZED'<br>
> + elif <a href="http://fmat.name" target="_blank">fmat.name</a> in ['MESA_FORMAT_YCBCR', 'MESA_FORMAT_YCBCR_REV']:<br>
> + return 'GL_UNSIGNED_NORMALIZED'<br>
> +<br>
> + channel = None<br>
> + for chan in fmat.channels:<br>
> + if chan.type == 'x' and len(fmat.channels) > 1:<br>
> + continue # We can do better<br>
> + elif <a href="http://chan.name" target="_blank">chan.name</a> == 's' and fmat.has_channel('z'):<br>
> + continue # We'll use the type from the depth instead<br>
> +<br>
> + channel = chan<br>
> + break;<br>
> +<br>
> + if channel.type == parser.UNSIGNED:<br>
> + if channel.norm:<br>
> + return 'GL_UNSIGNED_NORMALIZED'<br>
> + else:<br>
> + return 'GL_UNSIGNED_INT'<br>
> + elif channel.type == parser.SIGNED:<br>
> + if channel.norm:<br>
> + return 'GL_SIGNED_NORMALIZED'<br>
> + else:<br>
> + return 'GL_INT'<br>
> + elif channel.type == parser.FLOAT:<br>
> + return 'GL_FLOAT'<br>
> + elif channel.type == parser.VOID:<br>
> + return 'GL_NONE'<br>
> + else:<br>
> + assert False<br>
> +<br>
> +def get_channel_bits(fmat, chan_name):<br>
> + if fmat.is_compressed():<br>
> + # These values are pretty-much bogus, but OpenGL requires that we<br>
> + # return an "approximate" number of bits.<br>
> + if fmat.layout == 's3tc':<br>
> + return 4 if fmat.has_channel(chan_name) else 0<br>
> + elif fmat.layout == 'fxt1':<br>
> + if chan_name in 'rgb':<br>
> + return 4<br>
> + elif chan_name == 'a':<br>
> + return 1 if fmat.has_channel('a') else 0<br>
> + else:<br>
> + return 0<br>
> + elif fmat.layout == 'rgtc':<br>
> + return 8 if fmat.has_channel(chan_name) else 0<br>
> + elif fmat.layout in ('etc1', 'etc2'):<br>
> + if fmat.name.endswith('_ALPHA1') and chan_name == 'a':<br>
> + return 1<br>
> +<br>
> + bits = 11 if fmat.name.endswith('11_EAC') else 8<br>
> + return bits if fmat.has_channel(chan_name) else 0<br>
> + else:<br>
> + assert False<br>
> + else:<br>
> + # Uncompressed textures<br>
> + for chan in fmat.channels:<br>
> + if <a href="http://chan.name" target="_blank">chan.name</a> == chan_name:<br>
> + return chan.size<br>
> + return 0<br>
> +<br>
> +formats = parser.parse(sys.argv[1])<br>
> +<br>
> +print '''<br>
> +/*<br>
> + * Mesa 3-D graphics library<br>
> + *<br>
> + * Copyright (c) 2014 Intel Corporation<br>
> + *<br>
> + * Permission is hereby granted, free of charge, to any person obtaining a<br>
> + * copy of this software and associated documentation files (the<br>
> "Software"), + * to deal in the Software without restriction, including<br>
> without limitation + * the rights to use, copy, modify, merge, publish,<br>
> distribute, sublicense, + * and/or sell copies of the Software, and to<br>
> permit persons to whom the + * Software is furnished to do so, subject to<br>
> the following conditions: + *<br>
> + * The above copyright notice and this permission notice shall be included<br>
> + * in all copies or substantial portions of the Software.<br>
> + *<br>
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS<br>
> + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF<br>
> MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.<br>
> IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY<br>
> CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,<br>
> TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE<br>
> SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE.<br>
> + */<br>
> +<br>
> + /*<br>
> + * This file is AUTOGENERATED by format_info.py. Do not edit it<br>
> + * manually or commit it into version control.<br>
> + */<br>
> +<br>
> +static struct gl_format_info format_info[MESA_FORMAT_COUNT] =<br>
> +{<br>
> +'''<br>
> +<br>
> +for fmat in formats:<br>
> + print ' {'<br>
> + print ' {0},'.format(<a href="http://fmat.name" target="_blank">fmat.name</a>)<br>
> + print ' "{0}",'.format(<a href="http://fmat.name" target="_blank">fmat.name</a>)<br>
> + print ' {0},'.format(get_gl_base_format(fmat))<br>
> + print ' {0},'.format(get_gl_data_type(fmat))<br>
> +<br>
> + bits = [ get_channel_bits(fmat, name) for name in ['r', 'g', 'b', 'a']]<br>
> + print ' {0},'.format(', '.join(map(str, bits)))<br>
> + bits = [ get_channel_bits(fmat, name) for name in ['l', 'i', 'I', 'z',<br>
> 's']] + print ' {0},'.format(', '.join(map(str, bits)))<br>
> +<br>
> + print ' {0}, {1}, {2},'.format(fmat.block_width, fmat.block_height,<br>
> + int(fmat.block_size() / 8)) +<br>
> print ' },'<br>
> +<br>
> +print '};'<br>
> diff --git a/src/mesa/main/format_parser.py b/src/mesa/main/format_parser.py<br>
> new file mode 100755<br>
> index 0000000..2791c6c<br>
> --- /dev/null<br>
> +++ b/src/mesa/main/format_parser.py<br>
> @@ -0,0 +1,406 @@<br>
> +#!/usr/bin/env python<br>
> +#<br>
> +# Copyright 2009 VMware, Inc.<br>
> +# Copyright 2014 Intel Corporation<br>
> +# All Rights Reserved.<br>
> +#<br>
> +# Permission is hereby granted, free of charge, to any person obtaining a<br>
> +# copy of this software and associated documentation files (the<br>
> +# "Software"), to deal in the Software without restriction, including<br>
> +# without limitation the rights to use, copy, modify, merge, publish,<br>
> +# distribute, sub license, and/or sell copies of the Software, and to<br>
> +# permit persons to whom the Software is furnished to do so, subject to<br>
> +# the following conditions:<br>
> +#<br>
> +# The above copyright notice and this permission notice (including the<br>
> +# next paragraph) shall be included in all copies or substantial portions<br>
> +# of the Software.<br>
> +#<br>
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS<br>
> +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF<br>
> +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.<br>
> +# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR<br>
> +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,<br>
> +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE<br>
> +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>
> +<br>
> +VOID = 'x'<br>
> +UNSIGNED = 'u'<br>
> +SIGNED = 's'<br>
> +FLOAT = 'f'<br>
> +<br>
> +ARRAY = 'array'<br>
> +PACKED = 'packed'<br>
> +OTHER = 'other'<br>
> +<br>
> +RGB = 'rgb'<br>
> +SRGB = 'srgb'<br>
> +YUV = 'yuv'<br>
> +ZS = 'zs'<br>
> +<br>
> +def is_power_of_two(x):<br>
> + return not bool(x & (x - 1))<br>
> +<br>
> +VERY_LARGE = 99999999999999999999999<br>
> +<br>
> +class Channel:<br>
<br>
</div></div>You should use a new-style class, class Channel(object), you should do this<br>
for your other classes as well<br>
<div><div class="h5"><br>
> + '''Describe the channel of a color channel.'''<br>
> +<br>
> + def __init__(self, type, norm, size):<br>
> + self.type = type<br>
> + self.norm = norm<br>
> + self.size = size<br>
> + self.sign = type in (SIGNED, FLOAT)<br>
> + <a href="http://self.name" target="_blank">self.name</a> = None # Set when the channels are added to the format<br>
> + self.shift = -1 # Set when the channels are added to the format<br>
> + self.index = -1 # Set when the channels are added to the format<br>
> +<br>
> + def __str__(self):<br>
> + s = str(self.type)<br>
> + if self.norm:<br>
> + s += 'n'<br>
> + s += str(self.size)<br>
> + return s<br>
> +<br>
> + def __eq__(self, other):<br>
> + return self.type == other.type and self.norm == other.norm and<br>
> self.size == other.size +<br>
> + def max(self):<br>
> + '''Maximum representable number.'''<br>
> + if self.type == FLOAT:<br>
> + return VERY_LARGE<br>
> + if self.norm:<br>
> + return 1<br>
> + if self.type == UNSIGNED:<br>
> + return (1 << self.size) - 1<br>
> + if self.type == SIGNED:<br>
> + return (1 << (self.size - 1)) - 1<br>
> + assert False<br>
> +<br>
> + def min(self):<br>
> + '''Minimum representable number.'''<br>
> + if self.type == FLOAT:<br>
> + return -VERY_LARGE<br>
> + if self.type == UNSIGNED:<br>
> + return 0<br>
> + if self.norm:<br>
> + return -1<br>
> + if self.type == SIGNED:<br>
> + return -(1 << (self.size - 1))<br>
> + assert False<br>
> +<br>
> + def one(self):<br>
> + '''Representation of 1.0f.'''<br>
> + if self.type == UNSIGNED:<br>
> + return (1 << self.size) - 1<br>
> + if self.type == SIGNED:<br>
> + return (1 << (self.size - 1)) - 1<br>
> + else:<br>
> + return 1<br>
> +<br>
> + def is_power_of_two(self):<br>
> + return is_power_of_two(self.size)<br>
> +<br>
> +class Swizzle:<br>
> + __identity_str = 'xyzw01_'<br>
> +<br>
> + SWIZZLE_X = 0<br>
> + SWIZZLE_Y = 1<br>
> + SWIZZLE_Z = 2<br>
> + SWIZZLE_W = 3<br>
> + SWIZZLE_ZERO = 4<br>
> + SWIZZLE_ONE = 5<br>
> + SWIZZLE_NONE = 6<br>
> +<br>
> + def __init__(self, swizzle):<br>
> + if type(swizzle) is str:<br>
> + swizzle = [Swizzle.__identity_str.index(c) for c in swizzle]<br>
> + else:<br>
> + for s in swizzle:<br>
> + assert type(s) is int and 0 <= s and s <= Swizzle.SWIZZLE_NONE<br>
> + swizzle = list(swizzle)<br>
> +<br>
> + assert len(swizzle) <= 4<br>
> +<br>
> + self.__list = swizzle + [Swizzle.SWIZZLE_NONE] * (4 - len(swizzle))<br>
> +<br>
> + def __iter__(self):<br>
> + return self.__list.__iter__()<br>
<br>
</div></div>Don't call magic methods directly (anything that starts and ends with __), you<br>
should use the iter() function<br>
return iter(self.__list)<br>
<div class=""><br>
> +<br>
> + def __str__(self):<br>
> + return ''.join([Swizzle.__identity_str[i] for i in self.__list])[:4]<br>
<br>
</div>You could replace the list comprehension with a generator, (just drop the '['<br>
and ']'). You should probably also have a comment mentioning that you are<br>
intentionally do string slicing<br>
<div class=""><br>
> +<br>
> + def __getitem__(self, idx):<br>
> + if type(idx) is int:<br>
<br>
</div>this works and is correct, but generally isinstance() is used for this<br>
operation<br>
<div class=""><br>
> + assert idx >= Swizzle.SWIZZLE_X and idx <= Swizzle.SWIZZLE_NONE<br>
> + if idx <= Swizzle.SWIZZLE_W:<br>
> + return self.__list.__getitem__(idx)<br>
> + else:<br>
> + return idx<br>
> + elif type(idx) is str:<br>
> + if idx in 'xyzw':<br>
> + idx = 'xyzw'.find(idx)<br>
> + elif idx in 'rgba':<br>
> + idx = 'rgba'.find(idx)<br>
> + elif idx in 'zs':<br>
> + idx = 'zs'.find(idx)<br>
> + else:<br>
> + assert False<br>
> + return self.__list.__getitem__(idx)<br>
> + else:<br>
> + assert False<br>
> +<br>
> + def __mul__(self, other):<br>
> + assert isinstance(other, Swizzle)<br>
> + return Swizzle([self[other[i]] for i in range(4)])<br>
<br>
</div>This is generally not the way this is done in python. You should be able to do<br>
this with list slicing. Something like:<br>
return Swizzle(self[x] for x in other[:4])<br>
<div class=""><br>
> +<br>
> + def inverse(self):<br>
> + rev = [Swizzle.SWIZZLE_NONE] * 4<br>
> + for i in range(4):<br>
> + for j in range(4):<br>
<br>
</div>in python2 don't use range(), use xrange() instead. xrange() returns an<br>
iterator, while range() returns a list.<br>
<br>
You could also use itertools.product() to remove the nested loop if you<br>
wanted.<br>
<div><div class="h5"><br>
> + if self.__list[j] == i and rev[i] == Swizzle.SWIZZLE_NONE:<br>
> + rev[i] = j<br>
> + return Swizzle(rev)<br>
> +<br>
> +<br>
> +class Format:<br>
> + '''Describe a pixel format.'''<br>
> +<br>
> + def __init__(self, name, layout, block_width, block_height, channels,<br>
> swizzle, colorspace): + <a href="http://self.name" target="_blank">self.name</a> = name<br>
> + self.layout = layout<br>
> + self.block_width = block_width<br>
> + self.block_height = block_height<br>
> + self.channels = channels<br>
> + assert isinstance(swizzle, Swizzle)<br>
> + self.swizzle = swizzle<br>
> + <a href="http://self.name" target="_blank">self.name</a> = name<br>
> + self.colorspace = colorspace<br>
> +<br>
> + # Name the channels<br>
> + chan_names = ['']*4<br>
> + if self.colorspace in (RGB, SRGB):<br>
> + for (i, s) in enumerate(swizzle):<br>
> + if s < 4:<br>
> + chan_names[s] += 'rgba'[i]<br>
> + elif colorspace == ZS:<br>
> + for (i, s) in enumerate(swizzle):<br>
> + if s < 4:<br>
> + chan_names[s] += 'zs'[i]<br>
> + else:<br>
> + chan_names = ['x', 'y', 'z', 'w']<br>
> +<br>
> + for c, name in zip(self.channels, chan_names):<br>
> + if name == 'rgb':<br>
> + <a href="http://c.name" target="_blank">c.name</a> = 'l'<br>
> + elif name == 'rgba':<br>
> + <a href="http://c.name" target="_blank">c.name</a> = 'i'<br>
> + elif name == '':<br>
> + <a href="http://c.name" target="_blank">c.name</a> = 'x'<br>
> + else:<br>
> + <a href="http://c.name" target="_blank">c.name</a> = name<br>
> +<br>
> + # Set indices and offsets<br>
> + if self.layout == PACKED:<br>
> + shift = 0<br>
> + for channel in self.channels:<br>
> + channel.shift = shift<br>
> + shift += channel.size<br>
> + for idx, channel in enumerate(self.channels):<br>
> + channel.index = idx<br>
> + else:<br>
> + pass # Shift means nothing here<br>
> +<br>
> + def __str__(self):<br>
> + return <a href="http://self.name" target="_blank">self.name</a><br>
> +<br>
> + def short_name(self):<br>
> + '''Make up a short norm for a format, suitable to be used as suffix<br>
> in + function names.'''<br>
> +<br>
> + name = <a href="http://self.name" target="_blank">self.name</a><br>
> + if name.startswith('MESA_FORMAT_'):<br>
> + name = name[len('MESA_FORMAT_'):]<br>
> + name = name.lower()<br>
> + return name<br>
> +<br>
> + def block_size(self):<br>
> + size = 0<br>
> + for channel in self.channels:<br>
> + size += channel.size<br>
> + return size<br>
> +<br>
> + def num_channels(self):<br>
> + nr_channels = 0<br>
> + for channel in self.channels:<br>
> + if channel.size:<br>
> + nr_channels += 1<br>
> + return nr_channels<br>
> +<br>
> + def array_element(self):<br>
> + if self.layout == ARRAY:<br>
> + return self.channels[0]<br>
> + elif self.layout == PACKED:<br>
> + ref_channel = self.channels[0]<br>
> + if ref_channel.type == VOID:<br>
> + ref_channel = self.channels[1]<br>
> + for channel in self.channels:<br>
> + if channel.size == 0 or channel.type == VOID:<br>
> + continue<br>
> + if channel.size != ref_channel.size or channel.size % 8 != 0:<br>
> + return None<br>
> + if channel.type != ref_channel.type:<br>
> + return None<br>
> + if channel.norm != ref_channel.norm:<br>
> + return None<br>
> + return ref_channel<br>
> + else:<br>
> + return None<br>
> +<br>
> + def is_array(self):<br>
> + return self.array_element() != None<br>
> +<br>
> + def is_compressed(self):<br>
> + return self.block_width != 1 or self.block_height != 1<br>
> +<br>
> + def is_int(self):<br>
> + if self.layout not in (ARRAY, PACKED):<br>
> + return False<br>
> + for channel in self.channels:<br>
> + if channel.type not in (VOID, UNSIGNED, SIGNED):<br>
> + return False<br>
> + return True<br>
> +<br>
> + def is_float(self):<br>
> + if self.layout not in (ARRAY, PACKED):<br>
> + return False<br>
> + for channel in self.channels:<br>
> + if channel.type not in (VOID, FLOAT):<br>
> + return False<br>
> + return True<br>
> +<br>
> + def channel_type(self):<br>
> + _type = VOID<br>
> + for c in self.channels:<br>
> + if c.type == VOID:<br>
> + continue<br>
> + if _type == VOID:<br>
> + _type = c.type<br>
> + assert c.type == _type<br>
> + return _type<br>
> +<br>
> + def channel_size(self):<br>
> + size = None<br>
> + for c in self.channels:<br>
> + if c.type == VOID:<br>
> + continue<br>
> + if size is None:<br>
> + size = c.size<br>
> + assert c.size == size<br>
> + return size<br>
> +<br>
> + def max_channel_size(self):<br>
> + size = 0<br>
> + for c in self.channels:<br>
> + if c.type == VOID:<br>
> + continue<br>
> + size = max(size, c.size)<br>
> + return size<br>
> +<br>
> + def is_normalized(self):<br>
> + norm = None<br>
> + for c in self.channels:<br>
> + if c.type == VOID:<br>
> + continue<br>
> + if norm is None:<br>
> + norm = c.norm<br>
> + assert c.norm == norm<br>
> + return norm<br>
> +<br>
> + def has_channel(self, name):<br>
> + if self.is_compressed():<br>
> + # No channel information, so we pull it from the swizzle<br>
> + if str(self.swizzle) == 'xxxx':<br>
> + return name == 'i'<br>
> + elif str(self.swizzle)[0:3] in ('xxx', 'yyy'):<br>
> + if name == 'l':<br>
> + return True<br>
> + elif name == 'a':<br>
> + return self.swizzle['a'] <= Swizzle.SWIZZLE_W<br>
> + else:<br>
> + return False<br>
> + elif name in 'rgba':<br>
> + return self.swizzle[name] <= Swizzle.SWIZZLE_W<br>
> + else:<br>
> + return False<br>
> + else:<br>
> + for channel in self.channels:<br>
> + if <a href="http://channel.name" target="_blank">channel.name</a> == name:<br>
> + return True<br>
> + return False<br>
> +<br>
> + def get_channel(self, name):<br>
> + for channel in self.channels:<br>
> + if <a href="http://channel.name" target="_blank">channel.name</a> == name:<br>
> + return channel<br>
> + assert False<br>
> +<br>
> + def has_depth(self):<br>
> + return self.colorspace == ZS and self.has_channel(0)<br>
> +<br>
> + def has_stencil(self):<br>
> + return self.colorspace == ZS and self.has_channel(1)<br>
> +<br>
> + def stride(self):<br>
> + return self.block_size()/8<br>
> +<br>
> +def _parse_channels(fields, layout, colorspace, swizzle):<br>
> + channels = []<br>
> + for field in fields:<br>
> + if not field:<br>
> + continue;<br>
<br>
</div></div>remove the semicolon<br>
<div class=""><br>
> +<br>
> + type = field[0] if field[0] else 'x'<br>
> +<br>
> + if field[1] == 'n':<br>
> + norm = True<br>
> + size = int(field[2:])<br>
> + else:<br>
> + norm = False<br>
> + size = int(field[1:])<br>
> +<br>
> + channel = Channel(type, norm, size)<br>
> + channels.append(channel)<br>
> +<br>
> + return channels<br>
> +<br>
> +def parse(filename):<br>
> + '''Parse the format descrition in CSV format in terms of the<br>
> + Channel and Format classes above.'''<br>
> +<br>
> + stream = open(filename)<br>
<br>
</div>you should use open() as a context manager, that way you don't need to<br>
remember to close the file (which you forgot). like so:<br>
with open(filename, 'r') as stream:<br>
<div class=""> for line in stream:<br>
<br>
> + formats = []<br>
> + for line in stream:<br>
> + try:<br>
> + comment = line.index('#')<br>
> + except ValueError:<br>
> + pass<br>
> + else:<br>
> + line = line[:comment]<br>
> + line = line.strip()<br>
> + if not line:<br>
> + continue<br>
> +<br>
> + fields = [field.strip() for field in line.split(',')]<br>
> +<br>
> + name = fields[0]<br>
> + layout = fields[1]<br>
> + block_width, block_height = map(int, fields[2:4])<br>
<br>
</div>map() is deprecated (so is filter(), in case you where wondering), using a<br>
list comprehension or generator is the modern way to handle this.<br>
block_width, block_height = (int(x) for x in fields[2:4])<br>
<div class="HOEnZb"><div class="h5"><br>
> + colorspace = fields[9]<br>
> +<br>
> + swizzle = Swizzle(fields[8])<br>
> + channels = _parse_channels(fields[4:8], layout, colorspace, swizzle)<br>
> +<br>
> + format = Format(name, layout, block_width, block_height, channels,<br>
> swizzle, colorspace) + formats.append(format)<br>
> + return formats<br>
> diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c<br>
> index 1f20a9a..e237064 100644<br>
> --- a/src/mesa/main/formats.c<br>
> +++ b/src/mesa/main/formats.c<br>
> @@ -70,1743 +70,7 @@ struct gl_format_info<br>
> GLubyte BytesPerBlock;<br>
> };<br>
><br>
> -<br>
> -/**<br>
> - * Info about each format.<br>
> - * These must be in the same order as the MESA_FORMAT_* enums so that<br>
> - * we can do lookups without searching.<br>
> - */<br>
> -static struct gl_format_info format_info[MESA_FORMAT_COUNT] =<br>
> -{<br>
> - /* Packed unorm formats */<br>
> - {<br>
> - MESA_FORMAT_NONE, /* Name */<br>
> - "MESA_FORMAT_NONE", /* StrName */<br>
> - GL_NONE, /* BaseFormat */<br>
> - GL_NONE, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 0, 0, 0 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A8B8G8R8_UNORM, /* Name */<br>
> - "MESA_FORMAT_A8B8G8R8_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_X8B8G8R8_UNORM, /* Name */<br>
> - "MESA_FORMAT_X8B8G8R8_UNORM",/* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8A8_UNORM, /* Name */<br>
> - "MESA_FORMAT_R8G8B8A8_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8X8_UNORM, /* Name */<br>
> - "MESA_FORMAT_R8G8B8X8_UNORM",/* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B8G8R8A8_UNORM, /* Name */<br>
> - "MESA_FORMAT_B8G8R8A8_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B8G8R8X8_UNORM, /* Name */<br>
> - "MESA_FORMAT_B8G8R8X8_UNORM",/* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A8R8G8B8_UNORM, /* Name */<br>
> - "MESA_FORMAT_A8R8G8B8_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_X8R8G8B8_UNORM, /* Name */<br>
> - "MESA_FORMAT_X8R8G8B8_UNORM",/* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L16A16_UNORM, /* Name */<br>
> - "MESA_FORMAT_L16A16_UNORM", /* StrName */<br>
> - GL_LUMINANCE_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */<br>
> - 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A16L16_UNORM, /* Name */<br>
> - "MESA_FORMAT_A16L16_UNORM", /* StrName */<br>
> - GL_LUMINANCE_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */<br>
> - 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B5G6R5_UNORM, /* Name */<br>
> - "MESA_FORMAT_B5G6R5_UNORM", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R5G6B5_UNORM, /* Name */<br>
> - "MESA_FORMAT_R5G6B5_UNORM", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B4G4R4A4_UNORM, /* Name */<br>
> - "MESA_FORMAT_B4G4R4A4_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B4G4R4X4_UNORM,<br>
> - "MESA_FORMAT_B4G4R4X4_UNORM",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A4R4G4B4_UNORM, /* Name */<br>
> - "MESA_FORMAT_A4R4G4B4_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A1B5G5R5_UNORM, /* Name */<br>
> - "MESA_FORMAT_A1B5G5R5_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B5G5R5A1_UNORM, /* Name */<br>
> - "MESA_FORMAT_B5G5R5A1_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B5G5R5X1_UNORM,<br>
> - "MESA_FORMAT_B5G5R5X1_UNORM",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 5, 5, 5, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A1R5G5B5_UNORM, /* Name */<br>
> - "MESA_FORMAT_A1R5G5B5_UNORM",/* StrName */<br>
> - GL_RGBA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L8A8_UNORM, /* Name */<br>
> - "MESA_FORMAT_L8A8_UNORM", /* StrName */<br>
> - GL_LUMINANCE_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A8L8_UNORM, /* Name */<br>
> - "MESA_FORMAT_A8L8_UNORM", /* StrName */<br>
> - GL_LUMINANCE_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8_UNORM,<br>
> - "MESA_FORMAT_R8G8_UNORM",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_G8R8_UNORM,<br>
> - "MESA_FORMAT_G8R8_UNORM",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L4A4_UNORM, /* Name */<br>
> - "MESA_FORMAT_L4A4_UNORM", /* StrName */<br>
> - GL_LUMINANCE_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 4, /* Red/Green/Blue/AlphaBits */<br>
> - 4, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B2G3R3_UNORM, /* Name */<br>
> - "MESA_FORMAT_B2G3R3_UNORM", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 3, 3, 2, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R16G16_UNORM,<br>
> - "MESA_FORMAT_R16G16_UNORM",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_G16R16_UNORM,<br>
> - "MESA_FORMAT_G16R16_UNORM",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B10G10R10A2_UNORM,<br>
> - "MESA_FORMAT_B10G10R10A2_UNORM",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 10, 10, 10, 2,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B10G10R10X2_UNORM,<br>
> - "MESA_FORMAT_B10G10R10X2_UNORM",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 10, 10, 10, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R10G10B10A2_UNORM,<br>
> - "MESA_FORMAT_R10G10B10A2_UNORM",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 10, 10, 10, 2,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_S8_UINT_Z24_UNORM, /* Name */<br>
> - "MESA_FORMAT_S8_UINT_Z24_UNORM", /* StrName */<br>
> - GL_DEPTH_STENCIL, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits<br>
> */ - 1, 1, 4 /* BlockWidth/Height,Bytes */ -<br>
> },<br>
> - {<br>
> - MESA_FORMAT_X8_UINT_Z24_UNORM, /* Name */<br>
> - "MESA_FORMAT_X8_UINT_Z24_UNORM", /* StrName */<br>
> - GL_DEPTH_COMPONENT, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 24, 0, /* Lum/Int/Index/Depth/StencilBits<br>
> */ - 1, 1, 4 /* BlockWidth/Height,Bytes */ -<br>
> },<br>
> - {<br>
> - MESA_FORMAT_Z24_UNORM_S8_UINT, /* Name */<br>
> - "MESA_FORMAT_Z24_UNORM_S8_UINT", /* StrName */<br>
> - GL_DEPTH_STENCIL, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits<br>
> */ - 1, 1, 4 /* BlockWidth/Height,Bytes */ -<br>
> },<br>
> - {<br>
> - MESA_FORMAT_Z24_UNORM_X8_UINT, /* Name */<br>
> - "MESA_FORMAT_Z24_UNORM_X8_UINT", /* StrName */<br>
> - GL_DEPTH_COMPONENT, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 24, 0, /* Lum/Int/Index/Depth/StencilBits<br>
> */ - 1, 1, 4 /* BlockWidth/Height,Bytes */ -<br>
> },<br>
> - {<br>
> - MESA_FORMAT_YCBCR, /* Name */<br>
> - "MESA_FORMAT_YCBCR", /* StrName */<br>
> - GL_YCBCR_MESA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_YCBCR_REV, /* Name */<br>
> - "MESA_FORMAT_YCBCR_REV", /* StrName */<br>
> - GL_YCBCR_MESA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> -<br>
> - /* Array unorm formats */<br>
> - {<br>
> - MESA_FORMAT_A_UNORM8, /* Name */<br>
> - "MESA_FORMAT_A_UNORM8", /* StrName */<br>
> - GL_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_UNORM16, /* Name */<br>
> - "MESA_FORMAT_A_UNORM16", /* StrName */<br>
> - GL_ALPHA, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 16, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_UNORM8, /* Name */<br>
> - "MESA_FORMAT_L_UNORM8", /* StrName */<br>
> - GL_LUMINANCE, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_UNORM16, /* Name */<br>
> - "MESA_FORMAT_L_UNORM16", /* StrName */<br>
> - GL_LUMINANCE, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 16, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_UNORM8, /* Name */<br>
> - "MESA_FORMAT_I_UNORM8", /* StrName */<br>
> - GL_INTENSITY, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 8, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_UNORM16, /* Name */<br>
> - "MESA_FORMAT_I_UNORM16", /* StrName */<br>
> - GL_INTENSITY, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 16, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_UNORM8,<br>
> - "MESA_FORMAT_R_UNORM8",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_UNORM16,<br>
> - "MESA_FORMAT_R_UNORM16",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 16, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_BGR_UNORM8, /* Name */<br>
> - "MESA_FORMAT_BGR_UNORM8", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 3 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_UNORM8, /* Name */<br>
> - "MESA_FORMAT_RGB_UNORM8", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 3 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_UNORM16,<br>
> - "MESA_FORMAT_RGBA_UNORM16",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 16, 16, 16, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_UNORM16,<br>
> - "MESA_FORMAT_RGBX_UNORM16",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_Z_UNORM16, /* Name */<br>
> - "MESA_FORMAT_Z_UNORM16", /* StrName */<br>
> - GL_DEPTH_COMPONENT, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 16, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 2 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_Z_UNORM32, /* Name */<br>
> - "MESA_FORMAT_Z_UNORM32", /* StrName */<br>
> - GL_DEPTH_COMPONENT, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 32, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_S_UINT8, /* Name */<br>
> - "MESA_FORMAT_S_UINT8", /* StrName */<br>
> - GL_STENCIL_INDEX, /* BaseFormat */<br>
> - GL_UNSIGNED_INT, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 8, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> -<br>
> - /* Packed signed/normalized formats */<br>
> - {<br>
> - MESA_FORMAT_A8B8G8R8_SNORM,<br>
> - "MESA_FORMAT_A8B8G8R8_SNORM",<br>
> - GL_RGBA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_X8B8G8R8_SNORM,<br>
> - "MESA_FORMAT_X8B8G8R8_SNORM",<br>
> - GL_RGB,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4 /* 4 bpp, but no alpha */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8A8_SNORM,<br>
> - "MESA_FORMAT_R8G8B8A8_SNORM",<br>
> - GL_RGBA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8X8_SNORM,<br>
> - "MESA_FORMAT_R8G8B8X8_SNORM",<br>
> - GL_RGB,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R16G16_SNORM,<br>
> - "MESA_FORMAT_R16G16_SNORM",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_G16R16_SNORM,<br>
> - "MESA_FORMAT_G16R16_SNORM",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8_SNORM,<br>
> - "MESA_FORMAT_R8G8_SNORM",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_G8R8_SNORM,<br>
> - "MESA_FORMAT_G8R8_SNORM",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L8A8_SNORM,<br>
> - "MESA_FORMAT_L8A8_SNORM",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 8,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> -<br>
> - /* Array signed/normalized formats */<br>
> - {<br>
> - MESA_FORMAT_A_SNORM8,<br>
> - "MESA_FORMAT_A_SNORM8",<br>
> - GL_ALPHA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_SNORM16,<br>
> - "MESA_FORMAT_A_SNORM16",<br>
> - GL_ALPHA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_SNORM8,<br>
> - "MESA_FORMAT_L_SNORM8",<br>
> - GL_LUMINANCE,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_SNORM16,<br>
> - "MESA_FORMAT_L_SNORM16",<br>
> - GL_LUMINANCE,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_SNORM8,<br>
> - "MESA_FORMAT_I_SNORM8",<br>
> - GL_INTENSITY,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 0, 8, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_SNORM16,<br>
> - "MESA_FORMAT_I_SNORM16",<br>
> - GL_INTENSITY,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 0, 16, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_SNORM8, /* Name */<br>
> - "MESA_FORMAT_R_SNORM8", /* StrName */<br>
> - GL_RED, /* BaseFormat */<br>
> - GL_SIGNED_NORMALIZED, /* DataType */<br>
> - 8, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 1 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_SNORM16,<br>
> - "MESA_FORMAT_R_SNORM16",<br>
> - GL_RED,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_SNORM16,<br>
> - "MESA_FORMAT_LA_SNORM16",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 16,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_SNORM16,<br>
> - "MESA_FORMAT_RGB_SNORM16",<br>
> - GL_RGB,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 6<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_SNORM16,<br>
> - "MESA_FORMAT_RGBA_SNORM16",<br>
> - GL_RGBA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 16, 16, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_SNORM16,<br>
> - "MESA_FORMAT_RGBX_SNORM16",<br>
> - GL_RGB,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> -<br>
> - /* Packed sRGB formats */<br>
> - {<br>
> - MESA_FORMAT_A8B8G8R8_SRGB,<br>
> - "MESA_FORMAT_A8B8G8R8_SRGB",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B8G8R8A8_SRGB,<br>
> - "MESA_FORMAT_B8G8R8A8_SRGB",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_B8G8R8X8_SRGB,<br>
> - "MESA_FORMAT_B8G8R8X8_SRGB",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8A8_SRGB,<br>
> - "MESA_FORMAT_R8G8B8A8_SRGB",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R8G8B8X8_SRGB,<br>
> - "MESA_FORMAT_R8G8B8X8_SRGB",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L8A8_SRGB,<br>
> - "MESA_FORMAT_L8A8_SRGB",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 0, 0, 0, 8,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> -<br>
> - /* Array sRGB formats */<br>
> - {<br>
> - MESA_FORMAT_L_SRGB8,<br>
> - "MESA_FORMAT_L_SRGB8",<br>
> - GL_LUMINANCE,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_BGR_SRGB8,<br>
> - "MESA_FORMAT_BGR_SRGB8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 3<br>
> - },<br>
> -<br>
> - /* Packed float formats */<br>
> - {<br>
> - MESA_FORMAT_R9G9B9E5_FLOAT,<br>
> - "MESA_FORMAT_RGB9_E5",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 9, 9, 9, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R11G11B10_FLOAT,<br>
> - "MESA_FORMAT_R11G11B10_FLOAT",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 11, 11, 10, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_Z32_FLOAT_S8X24_UINT, /* Name */<br>
> - "MESA_FORMAT_Z32_FLOAT_S8X24_UINT", /* StrName */<br>
> - GL_DEPTH_STENCIL, /* BaseFormat */<br>
> - /* DataType here is used to answer GL_TEXTURE_DEPTH_TYPE queries, and<br>
> is - * never used for stencil because stencil is always<br>
> GL_UNSIGNED_INT. - */<br>
> - GL_FLOAT, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 32, 8, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 8 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> -<br>
> - /* Array float formats */<br>
> - {<br>
> - MESA_FORMAT_A_FLOAT16,<br>
> - "MESA_FORMAT_A_FLOAT16",<br>
> - GL_ALPHA,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_FLOAT32,<br>
> - "MESA_FORMAT_A_FLOAT32",<br>
> - GL_ALPHA,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_FLOAT16,<br>
> - "MESA_FORMAT_L_FLOAT16",<br>
> - GL_LUMINANCE,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 0,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_FLOAT32,<br>
> - "MESA_FORMAT_L_FLOAT32",<br>
> - GL_LUMINANCE,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 0,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_FLOAT16,<br>
> - "MESA_FORMAT_LA_FLOAT16",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 16,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_FLOAT32,<br>
> - "MESA_FORMAT_LA_FLOAT32",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 32,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_FLOAT16,<br>
> - "MESA_FORMAT_I_FLOAT16",<br>
> - GL_INTENSITY,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 16, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_FLOAT32,<br>
> - "MESA_FORMAT_I_FLOAT32",<br>
> - GL_INTENSITY,<br>
> - GL_FLOAT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 32, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_FLOAT16,<br>
> - "MESA_FORMAT_R_FLOAT16",<br>
> - GL_RED,<br>
> - GL_FLOAT,<br>
> - 16, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_FLOAT32,<br>
> - "MESA_FORMAT_R_FLOAT32",<br>
> - GL_RED,<br>
> - GL_FLOAT,<br>
> - 32, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_FLOAT16,<br>
> - "MESA_FORMAT_RG_FLOAT16",<br>
> - GL_RG,<br>
> - GL_FLOAT,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_FLOAT32,<br>
> - "MESA_FORMAT_RG_FLOAT32",<br>
> - GL_RG,<br>
> - GL_FLOAT,<br>
> - 32, 32, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_FLOAT16,<br>
> - "MESA_FORMAT_RGB_FLOAT16",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 6<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_FLOAT32,<br>
> - "MESA_FORMAT_RGB_FLOAT32",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 12<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_FLOAT16,<br>
> - "MESA_FORMAT_RGBA_FLOAT16",<br>
> - GL_RGBA,<br>
> - GL_FLOAT,<br>
> - 16, 16, 16, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_FLOAT32,<br>
> - "MESA_FORMAT_RGBA_FLOAT32",<br>
> - GL_RGBA,<br>
> - GL_FLOAT,<br>
> - 32, 32, 32, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_FLOAT16,<br>
> - "MESA_FORMAT_RGBX_FLOAT16",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_FLOAT32,<br>
> - "MESA_FORMAT_RGBX_FLOAT32",<br>
> - GL_RGB,<br>
> - GL_FLOAT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_Z_FLOAT32, /* Name */<br>
> - "MESA_FORMAT_Z_FLOAT32", /* StrName */<br>
> - GL_DEPTH_COMPONENT, /* BaseFormat */<br>
> - GL_FLOAT, /* DataType */<br>
> - 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 32, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 1, 1, 4 /* BlockWidth/Height,Bytes */<br>
> - },<br>
> -<br>
> - /* Packed signed/unsigned non-normalized integer formats */<br>
> - {<br>
> - MESA_FORMAT_B10G10R10A2_UINT,<br>
> - "MESA_FORMAT_B10G10R10A2_UINT",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_INT,<br>
> - 10, 10, 10, 2,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R10G10B10A2_UINT,<br>
> - "MESA_FORMAT_R10G10B10A2_UINT",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_INT,<br>
> - 10, 10, 10, 2,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> -<br>
> - /* Array signed/unsigned non-normalized integer formats */<br>
> - {<br>
> - MESA_FORMAT_A_UINT8,<br>
> - "MESA_FORMAT_A_UINT8",<br>
> - GL_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_UINT16,<br>
> - "MESA_FORMAT_A_UINT16",<br>
> - GL_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_UINT32,<br>
> - "MESA_FORMAT_A_UINT32",<br>
> - GL_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_SINT8,<br>
> - "MESA_FORMAT_A_SINT8",<br>
> - GL_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_SINT16,<br>
> - "MESA_FORMAT_A_SINT16",<br>
> - GL_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_A_SINT32,<br>
> - "MESA_FORMAT_A_SINT32",<br>
> - GL_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_UINT8,<br>
> - "MESA_FORMAT_I_UINT8",<br>
> - GL_INTENSITY,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 8, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_UINT16,<br>
> - "MESA_FORMAT_I_UINT16",<br>
> - GL_INTENSITY,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 16, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_UINT32,<br>
> - "MESA_FORMAT_I_UINT32",<br>
> - GL_INTENSITY,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 32, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_SINT8,<br>
> - "MESA_FORMAT_I_SINT8",<br>
> - GL_INTENSITY,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 8, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_SINT16,<br>
> - "MESA_FORMAT_I_SINT16",<br>
> - GL_INTENSITY,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 16, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_I_SINT32,<br>
> - "MESA_FORMAT_I_SINT32",<br>
> - GL_INTENSITY,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 0, 32, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_UINT8,<br>
> - "MESA_FORMAT_L_UINT8",<br>
> - GL_LUMINANCE,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_UINT16,<br>
> - "MESA_FORMAT_L_UINT16",<br>
> - GL_LUMINANCE,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_UINT32,<br>
> - "MESA_FORMAT_L_UINT32",<br>
> - GL_LUMINANCE,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 0,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_SINT8,<br>
> - "MESA_FORMAT_L_SINT8",<br>
> - GL_LUMINANCE,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_SINT16,<br>
> - "MESA_FORMAT_L_SINT16",<br>
> - GL_LUMINANCE,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_SINT32,<br>
> - "MESA_FORMAT_L_SINT32",<br>
> - GL_LUMINANCE,<br>
> - GL_INT,<br>
> - 0, 0, 0, 0,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_UINT8,<br>
> - "MESA_FORMAT_LA_UINT8",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 8,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_UINT16,<br>
> - "MESA_FORMAT_LA_UINT16",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 16,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_UINT32,<br>
> - "MESA_FORMAT_LA_UINT32",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_UNSIGNED_INT,<br>
> - 0, 0, 0, 32,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_SINT8,<br>
> - "MESA_FORMAT_LA_SINT8",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 8,<br>
> - 8, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_SINT16,<br>
> - "MESA_FORMAT_LA_SINT16",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 16,<br>
> - 16, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_SINT32,<br>
> - "MESA_FORMAT_LA_SINT32",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_INT,<br>
> - 0, 0, 0, 32,<br>
> - 32, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_UINT8,<br>
> - "MESA_FORMAT_R_UINT8",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_INT,<br>
> - 8, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_UINT16,<br>
> - "MESA_FORMAT_R_UINT16",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_INT,<br>
> - 16, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_UINT32,<br>
> - "MESA_FORMAT_R_UINT32",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_INT,<br>
> - 32, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_SINT8,<br>
> - "MESA_FORMAT_R_SINT8",<br>
> - GL_RED,<br>
> - GL_INT,<br>
> - 8, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 1<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_SINT16,<br>
> - "MESA_FORMAT_R_SINT16",<br>
> - GL_RED,<br>
> - GL_INT,<br>
> - 16, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_SINT32,<br>
> - "MESA_FORMAT_R_SINT32",<br>
> - GL_RED,<br>
> - GL_INT,<br>
> - 32, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_UINT8,<br>
> - "MESA_FORMAT_RG_UINT8",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_INT,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_UINT16,<br>
> - "MESA_FORMAT_RG_UINT16",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_INT,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_UINT32,<br>
> - "MESA_FORMAT_RG_UINT32",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_INT,<br>
> - 32, 32, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_SINT8,<br>
> - "MESA_FORMAT_RG_SINT8",<br>
> - GL_RG,<br>
> - GL_INT,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 2<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_SINT16,<br>
> - "MESA_FORMAT_RG_SINT16",<br>
> - GL_RG,<br>
> - GL_INT,<br>
> - 16, 16, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_SINT32,<br>
> - "MESA_FORMAT_RG_SINT32",<br>
> - GL_RG,<br>
> - GL_INT,<br>
> - 32, 32, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_UINT8,<br>
> - "MESA_FORMAT_RGB_UINT8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 3<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_UINT16,<br>
> - "MESA_FORMAT_RGB_UINT16",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 6<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_UINT32,<br>
> - "MESA_FORMAT_RGB_UINT32",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 12<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_SINT8,<br>
> - "MESA_FORMAT_RGB_SINT8",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 3<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_SINT16,<br>
> - "MESA_FORMAT_RGB_SINT16",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 6<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGB_SINT32,<br>
> - "MESA_FORMAT_RGB_SINT32",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 12<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_UINT8,<br>
> - "MESA_FORMAT_RGBA_UINT8",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_INT,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_UINT16,<br>
> - "MESA_FORMAT_RGBA_UINT16",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_INT,<br>
> - 16, 16, 16, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_UINT32,<br>
> - "MESA_FORMAT_RGBA_UINT32",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_INT,<br>
> - 32, 32, 32, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_SINT8,<br>
> - "MESA_FORMAT_RGBA_SINT8",<br>
> - GL_RGBA,<br>
> - GL_INT,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_SINT16,<br>
> - "MESA_FORMAT_RGBA_SINT16",<br>
> - GL_RGBA,<br>
> - GL_INT,<br>
> - 16, 16, 16, 16,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_SINT32,<br>
> - "MESA_FORMAT_RGBA_SINT32",<br>
> - GL_RGBA,<br>
> - GL_INT,<br>
> - 32, 32, 32, 32,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_UINT8,<br>
> - "MESA_FORMAT_RGBX_UINT8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_UINT16,<br>
> - "MESA_FORMAT_RGBX_UINT16",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_UINT32,<br>
> - "MESA_FORMAT_RGBX_UINT32",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_INT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_SINT8,<br>
> - "MESA_FORMAT_RGBX_SINT8",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 4<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_SINT16,<br>
> - "MESA_FORMAT_RGBX_SINT16",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 16, 16, 16, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 8<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBX_SINT32,<br>
> - "MESA_FORMAT_RGBX_SINT32",<br>
> - GL_RGB,<br>
> - GL_INT,<br>
> - 32, 32, 32, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 1, 1, 16<br>
> - },<br>
> -<br>
> - /* DXT compressed formats */<br>
> - {<br>
> - MESA_FORMAT_RGB_DXT1, /* Name */<br>
> - "MESA_FORMAT_RGB_DXT1", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_DXT1,<br>
> - "MESA_FORMAT_RGBA_DXT1",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_DXT3,<br>
> - "MESA_FORMAT_RGBA_DXT3",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_DXT5,<br>
> - "MESA_FORMAT_RGBA_DXT5",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> -<br>
> - /* DXT sRGB compressed formats */<br>
> - {<br>
> - MESA_FORMAT_SRGB_DXT1, /* Name */<br>
> - "MESA_FORMAT_SRGB_DXT1", /* StrName */<br>
> - GL_RGB, /* BaseFormat */<br>
> - GL_UNSIGNED_NORMALIZED, /* DataType */<br>
> - 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_SRGBA_DXT1,<br>
> - "MESA_FORMAT_SRGBA_DXT1",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_SRGBA_DXT3,<br>
> - "MESA_FORMAT_SRGBA_DXT3",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_SRGBA_DXT5,<br>
> - "MESA_FORMAT_SRGBA_DXT5",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 4,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> -<br>
> - /* FXT1 compressed formats */<br>
> - {<br>
> - MESA_FORMAT_RGB_FXT1,<br>
> - "MESA_FORMAT_RGB_FXT1",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 0, /* approx Red/Green/BlueBits */<br>
> - 0, 0, 0, 0, 0,<br>
> - 8, 4, 16 /* 16 bytes per 8x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RGBA_FXT1,<br>
> - "MESA_FORMAT_RGBA_FXT1",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 4, 4, 4, 1, /* approx Red/Green/Blue/AlphaBits */<br>
> - 0, 0, 0, 0, 0,<br>
> - 8, 4, 16 /* 16 bytes per 8x4 block */<br>
> - },<br>
> -<br>
> - /* RGTC compressed formats */<br>
> - {<br>
> - MESA_FORMAT_R_RGTC1_UNORM,<br>
> - "MESA_FORMAT_R_RGTC1_UNORM",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_R_RGTC1_SNORM,<br>
> - "MESA_FORMAT_R_RGTC1_SNORM",<br>
> - GL_RED,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_RGTC2_UNORM,<br>
> - "MESA_FORMAT_RG_RGTC2_UNORM",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_RG_RGTC2_SNORM,<br>
> - "MESA_FORMAT_RG_RGTC2_SNORM",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 8, 8, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> -<br>
> - /* LATC1/2 compressed formats */<br>
> - {<br>
> - MESA_FORMAT_L_LATC1_UNORM,<br>
> - "MESA_FORMAT_L_LATC1_UNORM",<br>
> - GL_LUMINANCE,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 4, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_L_LATC1_SNORM,<br>
> - "MESA_FORMAT_L_LATC1_SNORM",<br>
> - GL_LUMINANCE,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 0,<br>
> - 4, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_LATC2_UNORM,<br>
> - "MESA_FORMAT_LA_LATC2_UNORM",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 0, 0, 0, 4,<br>
> - 4, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_LA_LATC2_SNORM,<br>
> - "MESA_FORMAT_LA_LATC2_SNORM",<br>
> - GL_LUMINANCE_ALPHA,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 0, 0, 0, 4,<br>
> - 4, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> -<br>
> - /* ETC1/2 compressed formats */<br>
> - {<br>
> - MESA_FORMAT_ETC1_RGB8,<br>
> - "MESA_FORMAT_ETC1_RGB8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_RGB8,<br>
> - "MESA_FORMAT_ETC2_RGB8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_SRGB8,<br>
> - "MESA_FORMAT_ETC2_SRGB8",<br>
> - GL_RGB,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_RGBA8_EAC,<br>
> - "MESA_FORMAT_ETC2_RGBA8_EAC",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC,<br>
> - "MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 8,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_R11_EAC,<br>
> - "MESA_FORMAT_ETC2_R11_EAC",<br>
> - GL_RED,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 11, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_RG11_EAC,<br>
> - "MESA_FORMAT_ETC2_RG11_EAC",<br>
> - GL_RG,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 11, 11, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_SIGNED_R11_EAC,<br>
> - "MESA_FORMAT_ETC2_SIGNED_R11_EAC",<br>
> - GL_RED,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 11, 0, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_SIGNED_RG11_EAC,<br>
> - "MESA_FORMAT_ETC2_SIGNED_RG11_EAC",<br>
> - GL_RG,<br>
> - GL_SIGNED_NORMALIZED,<br>
> - 11, 11, 0, 0,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 16 /* 16 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1,<br>
> - "MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 1,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> - {<br>
> - MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1,<br>
> - "MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1",<br>
> - GL_RGBA,<br>
> - GL_UNSIGNED_NORMALIZED,<br>
> - 8, 8, 8, 1,<br>
> - 0, 0, 0, 0, 0,<br>
> - 4, 4, 8 /* 8 bytes per 4x4 block */<br>
> - },<br>
> -};<br>
> -<br>
> -<br>
> +#include "format_info.c"<br>
><br>
> static const struct gl_format_info *<br>
> _mesa_get_format_info(mesa_format format)<br>
> @@ -2331,7 +595,6 @@ check_format_to_type_and_comps(void)<br>
> }<br>
> }<br>
><br>
> -<br>
> /**<br>
> * Do sanity checking of the format info table.<br>
> */<br>
</div></div></blockquote></div><br></div></div></div></div>