u_format_table.py revision 31ff9b0a135bf913ae6b44868bde31534a87802c
115422b2d99be074e1d6ac064b6f791245975da83José Fonseca#!/usr/bin/env python
215422b2d99be074e1d6ac064b6f791245975da83José Fonseca
315422b2d99be074e1d6ac064b6f791245975da83José Fonseca'''
415422b2d99be074e1d6ac064b6f791245975da83José Fonseca/**************************************************************************
515422b2d99be074e1d6ac064b6f791245975da83José Fonseca *
63d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca * Copyright 2009 VMware, Inc.
715422b2d99be074e1d6ac064b6f791245975da83José Fonseca * All Rights Reserved.
815422b2d99be074e1d6ac064b6f791245975da83José Fonseca *
915422b2d99be074e1d6ac064b6f791245975da83José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
1015422b2d99be074e1d6ac064b6f791245975da83José Fonseca * copy of this software and associated documentation files (the
1115422b2d99be074e1d6ac064b6f791245975da83José Fonseca * "Software"), to deal in the Software without restriction, including
1215422b2d99be074e1d6ac064b6f791245975da83José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
1315422b2d99be074e1d6ac064b6f791245975da83José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
1415422b2d99be074e1d6ac064b6f791245975da83José Fonseca * permit persons to whom the Software is furnished to do so, subject to
1515422b2d99be074e1d6ac064b6f791245975da83José Fonseca * the following conditions:
1615422b2d99be074e1d6ac064b6f791245975da83José Fonseca *
1715422b2d99be074e1d6ac064b6f791245975da83José Fonseca * The above copyright notice and this permission notice (including the
1815422b2d99be074e1d6ac064b6f791245975da83José Fonseca * next paragraph) shall be included in all copies or substantial portions
1915422b2d99be074e1d6ac064b6f791245975da83José Fonseca * of the Software.
2015422b2d99be074e1d6ac064b6f791245975da83José Fonseca *
2115422b2d99be074e1d6ac064b6f791245975da83José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2215422b2d99be074e1d6ac064b6f791245975da83José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2315422b2d99be074e1d6ac064b6f791245975da83José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
243d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
2515422b2d99be074e1d6ac064b6f791245975da83José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2615422b2d99be074e1d6ac064b6f791245975da83José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2715422b2d99be074e1d6ac064b6f791245975da83José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2815422b2d99be074e1d6ac064b6f791245975da83José Fonseca *
2915422b2d99be074e1d6ac064b6f791245975da83José Fonseca **************************************************************************/
3015422b2d99be074e1d6ac064b6f791245975da83José Fonseca'''
3115422b2d99be074e1d6ac064b6f791245975da83José Fonseca
3215422b2d99be074e1d6ac064b6f791245975da83José Fonseca
3315422b2d99be074e1d6ac064b6f791245975da83José Fonsecaimport sys
3415422b2d99be074e1d6ac064b6f791245975da83José Fonseca
353d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonsecafrom u_format_parse import *
3615422b2d99be074e1d6ac064b6f791245975da83José Fonseca
3715422b2d99be074e1d6ac064b6f791245975da83José Fonseca
38dfdf83d714c0d32d9182eb3001cf642aa6cb5c87Michal Kroldef layout_map(layout):
39dfdf83d714c0d32d9182eb3001cf642aa6cb5c87Michal Krol    return 'UTIL_FORMAT_LAYOUT_' + str(layout).upper()
4015422b2d99be074e1d6ac064b6f791245975da83José Fonseca
4115422b2d99be074e1d6ac064b6f791245975da83José Fonseca
4242b15b26fd946c9511bd4bd5f23ec7e76e15507cJosé Fonsecadef colorspace_map(colorspace):
4342b15b26fd946c9511bd4bd5f23ec7e76e15507cJosé Fonseca    return 'UTIL_FORMAT_COLORSPACE_' + str(colorspace).upper()
4442b15b26fd946c9511bd4bd5f23ec7e76e15507cJosé Fonseca
4542b15b26fd946c9511bd4bd5f23ec7e76e15507cJosé Fonseca
4642b15b26fd946c9511bd4bd5f23ec7e76e15507cJosé Fonsecacolorspace_channels_map = {
477fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca    'rgb': ['r', 'g', 'b', 'a'],
487fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca    'srgb': ['sr', 'sg', 'sb', 'a'],
497fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca    'zs': ['z', 's'],
507fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca    'yuv': ['y', 'u', 'v'],
5115422b2d99be074e1d6ac064b6f791245975da83José Fonseca}
5215422b2d99be074e1d6ac064b6f791245975da83José Fonseca
5315422b2d99be074e1d6ac064b6f791245975da83José Fonseca
5415422b2d99be074e1d6ac064b6f791245975da83José Fonsecakind_map = {
553d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    VOID:     "UTIL_FORMAT_TYPE_VOID",
5615422b2d99be074e1d6ac064b6f791245975da83José Fonseca    UNSIGNED: "UTIL_FORMAT_TYPE_UNSIGNED",
573d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SIGNED:   "UTIL_FORMAT_TYPE_SIGNED",
583d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    FIXED:    "UTIL_FORMAT_TYPE_FIXED",
593d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    FLOAT:    "UTIL_FORMAT_TYPE_FLOAT",
6015422b2d99be074e1d6ac064b6f791245975da83José Fonseca}
6115422b2d99be074e1d6ac064b6f791245975da83José Fonseca
6215422b2d99be074e1d6ac064b6f791245975da83José Fonseca
6315422b2d99be074e1d6ac064b6f791245975da83José Fonsecadef bool_map(value):
6415422b2d99be074e1d6ac064b6f791245975da83José Fonseca    if value:
6515422b2d99be074e1d6ac064b6f791245975da83José Fonseca        return "TRUE"
6615422b2d99be074e1d6ac064b6f791245975da83José Fonseca    else:
6715422b2d99be074e1d6ac064b6f791245975da83José Fonseca        return "FALSE"
6815422b2d99be074e1d6ac064b6f791245975da83José Fonseca
6915422b2d99be074e1d6ac064b6f791245975da83José Fonseca
7015422b2d99be074e1d6ac064b6f791245975da83José Fonsecaswizzle_map = {
713d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_X:    "UTIL_FORMAT_SWIZZLE_X",
723d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_Y:    "UTIL_FORMAT_SWIZZLE_Y",
733d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_Z:    "UTIL_FORMAT_SWIZZLE_Z",
743d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_W:    "UTIL_FORMAT_SWIZZLE_W",
753d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_0:    "UTIL_FORMAT_SWIZZLE_0",
763d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_1:    "UTIL_FORMAT_SWIZZLE_1",
773d305243938980af520c6d3e0ce02f4ee3a6126cJosé Fonseca    SWIZZLE_NONE: "UTIL_FORMAT_SWIZZLE_NONE",
7815422b2d99be074e1d6ac064b6f791245975da83José Fonseca}
7915422b2d99be074e1d6ac064b6f791245975da83José Fonseca
8015422b2d99be074e1d6ac064b6f791245975da83José Fonseca
8115422b2d99be074e1d6ac064b6f791245975da83José Fonsecadef write_format_table(formats):
8215422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */'
8315422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print
8415422b2d99be074e1d6ac064b6f791245975da83José Fonseca    # This will print the copyright message on the top of this file
8515422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print __doc__.strip()
8615422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print
8715422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print '#include "u_format.h"'
8815422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print
8915422b2d99be074e1d6ac064b6f791245975da83José Fonseca    print 'const struct util_format_description'
903c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print 'util_format_none_description = {'
913c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   PIPE_FORMAT_NONE,"
923c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   \"PIPE_FORMAT_NONE\","
933c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   {0, 0, 0},"
943c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   0,"
953c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   0,"
963c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   0,"
973c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   0,"
983c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}},"
993c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   {0, 0, 0, 0},"
1003c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   0"
1013c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "};"
1023c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print
10315422b2d99be074e1d6ac064b6f791245975da83José Fonseca    for format in formats:
1043c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print 'const struct util_format_description'
1053c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print 'util_format_%s_description = {' % (format.short_name(),)
1063c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %s," % (format.name,)
1073c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   \"%s\"," % (format.name,)
1083c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   {%u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_size())
1093c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %s," % (layout_map(format.layout),)
1103c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %u,\t/* nr_channels */" % (format.nr_channels(),)
1113c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %s,\t/* is_array */" % (bool_map(format.is_array()),)
1123c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %s,\t/* is_mixed */" % (bool_map(format.is_mixed()),)
11315422b2d99be074e1d6ac064b6f791245975da83José Fonseca        print "   {"
11415422b2d99be074e1d6ac064b6f791245975da83José Fonseca        for i in range(4):
11515422b2d99be074e1d6ac064b6f791245975da83José Fonseca            type = format.in_types[i]
11615422b2d99be074e1d6ac064b6f791245975da83José Fonseca            if i < 3:
11715422b2d99be074e1d6ac064b6f791245975da83José Fonseca                sep = ","
11815422b2d99be074e1d6ac064b6f791245975da83José Fonseca            else:
11915422b2d99be074e1d6ac064b6f791245975da83José Fonseca                sep = ""
1203c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca            print "      {%s, %s, %u}%s\t/* %s */" % (kind_map[type.kind], bool_map(type.norm), type.size, sep, "xyzw"[i])
1213c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   },"
1223c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   {"
12315422b2d99be074e1d6ac064b6f791245975da83José Fonseca        for i in range(4):
12415422b2d99be074e1d6ac064b6f791245975da83José Fonseca            swizzle = format.out_swizzle[i]
12515422b2d99be074e1d6ac064b6f791245975da83José Fonseca            if i < 3:
12615422b2d99be074e1d6ac064b6f791245975da83José Fonseca                sep = ","
12715422b2d99be074e1d6ac064b6f791245975da83José Fonseca            else:
12815422b2d99be074e1d6ac064b6f791245975da83José Fonseca                sep = ""
12915422b2d99be074e1d6ac064b6f791245975da83José Fonseca            try:
1307fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca                comment = colorspace_channels_map[format.colorspace][i]
1317fc75ef7d43038385b5fba73a67f1e4783b045d6José Fonseca            except (KeyError, IndexError):
13215422b2d99be074e1d6ac064b6f791245975da83José Fonseca                comment = 'ignored'
1333c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca            print "      %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)
13415422b2d99be074e1d6ac064b6f791245975da83José Fonseca        print "   },"
1353c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   %s," % (colorspace_map(format.colorspace),)
1363c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "};"
1373c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print
1383c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "const struct util_format_description *"
1393c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "util_format_description(enum pipe_format format)"
1403c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "{"
1413c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   if (format >= PIPE_FORMAT_COUNT) {"
1423c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "      return NULL;"
1433c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   }"
1443c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print
1453c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   switch (format) {"
1463c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   case PIPE_FORMAT_NONE:"
1473c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "      return &util_format_none_description;"
1483c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    for format in formats:
1493c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "   case %s:" % format.name
1503c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca        print "      return &util_format_%s_description;" % (format.short_name(),)
1513c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   default:"
1523c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "      assert(0);"
1533c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "      return NULL;"
1543c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print "   }"
15531ff9b0a135bf913ae6b44868bde31534a87802cBrian Paul    print "}"
1563c45c4bc44310c1af4f0c06d29eb0a9d39a38837José Fonseca    print
15715422b2d99be074e1d6ac064b6f791245975da83José Fonseca
15815422b2d99be074e1d6ac064b6f791245975da83José Fonseca
15915422b2d99be074e1d6ac064b6f791245975da83José Fonsecadef main():
16015422b2d99be074e1d6ac064b6f791245975da83José Fonseca
16115422b2d99be074e1d6ac064b6f791245975da83José Fonseca    formats = []
16215422b2d99be074e1d6ac064b6f791245975da83José Fonseca    for arg in sys.argv[1:]:
16315422b2d99be074e1d6ac064b6f791245975da83José Fonseca        formats.extend(parse(arg))
16415422b2d99be074e1d6ac064b6f791245975da83José Fonseca    write_format_table(formats)
16515422b2d99be074e1d6ac064b6f791245975da83José Fonseca
16615422b2d99be074e1d6ac064b6f791245975da83José Fonseca
16715422b2d99be074e1d6ac064b6f791245975da83José Fonsecaif __name__ == '__main__':
16815422b2d99be074e1d6ac064b6f791245975da83José Fonseca    main()
169