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