def write_format_table(formats): print '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */' print # This will print the copyright message on the top of this file print CopyRight.strip() print print '#include "u_format.h"' print '#include "u_format_s3tc.h"' print '#include "u_format_rgtc.h"' print '#include "u_format_latc.h"' print '#include "u_format_etc.h"' print '#include "u_format_fake.h"' print u_format_pack.generate(formats) def do_channel_array(channels, swizzles): print " {" for i in range(4): channel = channels[i] if i < 3: sep = "," else: sep = "" if channel.size: print " {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % ( type_map[channel.type], bool_map( channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name) else: print " {0, 0, 0, 0, 0}%s" % (sep, ) print " }," def do_swizzle_array(channels, swizzles): print " {" for i in range(4): swizzle = swizzles[i] if i < 3: sep = "," else: sep = "" try: comment = colorspace_channels_map[format.colorspace][i] except (KeyError, IndexError): comment = 'ignored' print " %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment) print " }," for format in formats: print 'const struct util_format_description' print 'util_format_%s_description = {' % (format.short_name(), ) print " %s," % (format.name, ) print " \"%s\"," % (format.name, ) print " \"%s\"," % (format.short_name(), ) print " {%u, %u, %u},\t/* block */" % ( format.block_width, format.block_height, format.block_size()) print " %s," % (layout_map(format.layout), ) print " %u,\t/* nr_channels */" % (format.nr_channels(), ) print " %s,\t/* is_array */" % (bool_map(format.is_array()), ) print " %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()), ) print " %s,\t/* is_mixed */" % (bool_map(format.is_mixed()), ) u_format_pack.print_channels(format, do_channel_array) u_format_pack.print_channels(format, do_swizzle_array) print " %s," % (colorspace_map(format.colorspace), ) if format.colorspace != ZS and not format.is_pure_color(): print " &util_format_%s_unpack_rgba_8unorm," % format.short_name( ) print " &util_format_%s_pack_rgba_8unorm," % format.short_name() if format.layout == 's3tc' or format.layout == 'rgtc' or format.layout == 'bptc': print " &util_format_%s_fetch_rgba_8unorm," % format.short_name( ) else: print " NULL, /* fetch_rgba_8unorm */" print " &util_format_%s_unpack_rgba_float," % format.short_name() print " &util_format_%s_pack_rgba_float," % format.short_name() print " &util_format_%s_fetch_rgba_float," % format.short_name() else: print " NULL, /* unpack_rgba_8unorm */" print " NULL, /* pack_rgba_8unorm */" print " NULL, /* fetch_rgba_8unorm */" print " NULL, /* unpack_rgba_float */" print " NULL, /* pack_rgba_float */" print " NULL, /* fetch_rgba_float */" if format.has_depth(): print " &util_format_%s_unpack_z_32unorm," % format.short_name() print " &util_format_%s_pack_z_32unorm," % format.short_name() print " &util_format_%s_unpack_z_float," % format.short_name() print " &util_format_%s_pack_z_float," % format.short_name() else: print " NULL, /* unpack_z_32unorm */" print " NULL, /* pack_z_32unorm */" print " NULL, /* unpack_z_float */" print " NULL, /* pack_z_float */" if format.has_stencil(): print " &util_format_%s_unpack_s_8uint," % format.short_name() print " &util_format_%s_pack_s_8uint," % format.short_name() else: print " NULL, /* unpack_s_8uint */" print " NULL, /* pack_s_8uint */" if format.is_pure_unsigned(): print " &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name( ) print " &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name( ) print " &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name( ) print " &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name( ) print " &util_format_%s_fetch_unsigned, /* fetch_rgba_uint */" % format.short_name( ) print " NULL /* fetch_rgba_sint */" elif format.is_pure_signed(): print " &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name( ) print " &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name( ) print " &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name( ) print " &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name( ) print " NULL, /* fetch_rgba_uint */" print " &util_format_%s_fetch_signed /* fetch_rgba_sint */" % format.short_name( ) else: print " NULL, /* unpack_rgba_uint */" print " NULL, /* pack_rgba_uint */" print " NULL, /* unpack_rgba_sint */" print " NULL, /* pack_rgba_sint */" print " NULL, /* fetch_rgba_uint */" print " NULL /* fetch_rgba_sint */" print "};" print print "const struct util_format_description *" print "util_format_description(enum pipe_format format)" print "{" print " if (format >= PIPE_FORMAT_COUNT) {" print " return NULL;" print " }" print print " switch (format) {" for format in formats: print " case %s:" % format.name print " return &util_format_%s_description;" % ( format.short_name(), ) print " default:" print " return NULL;" print " }" print "}" print
def write_format_table(formats): print('/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */') print() # This will print the copyright message on the top of this file print(CopyRight.strip()) print() print('#include "u_format.h"') print('#include "u_format_bptc.h"') print('#include "u_format_s3tc.h"') print('#include "u_format_rgtc.h"') print('#include "u_format_latc.h"') print('#include "u_format_etc.h"') print() u_format_pack.generate(formats) def do_channel_array(channels, swizzles): print(" {") for i in range(4): channel = channels[i] if i < 3: sep = "," else: sep = "" if channel.size: print(" {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % (type_map[channel.type], bool_map(channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name)) else: print(" {0, 0, 0, 0, 0}%s" % (sep,)) print(" },") def do_swizzle_array(channels, swizzles): print(" {") for i in range(4): swizzle = swizzles[i] if i < 3: sep = "," else: sep = "" try: comment = colorspace_channels_map[format.colorspace][i] except (KeyError, IndexError): comment = 'ignored' print(" %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)) print(" },") for format in formats: print('const struct util_format_description') print('util_format_%s_description = {' % (format.short_name(),)) print(" %s," % (format.name,)) print(" \"%s\"," % (format.name,)) print(" \"%s\"," % (format.short_name(),)) print(" {%u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_size())) print(" %s," % (layout_map(format.layout),)) print(" %u,\t/* nr_channels */" % (format.nr_channels(),)) print(" %s,\t/* is_array */" % (bool_map(format.is_array()),)) print(" %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()),)) print(" %s,\t/* is_mixed */" % (bool_map(format.is_mixed()),)) print(" %s,\t/* is_unorm */" % (bool_map(format.is_unorm()),)) print(" %s,\t/* is_snorm */" % (bool_map(format.is_snorm()),)) u_format_pack.print_channels(format, do_channel_array) u_format_pack.print_channels(format, do_swizzle_array) print(" %s," % (colorspace_map(format.colorspace),)) access = True if format.layout == 'astc' or format.layout == 'atc': access = False if format.layout == 'etc' and format.short_name() != 'etc1_rgb8': access = False if format.colorspace != ZS and not format.is_pure_color() and access: print(" &util_format_%s_unpack_rgba_8unorm," % format.short_name()) print(" &util_format_%s_pack_rgba_8unorm," % format.short_name()) if format.layout == 's3tc' or format.layout == 'rgtc': print(" &util_format_%s_fetch_rgba_8unorm," % format.short_name()) else: print(" NULL, /* fetch_rgba_8unorm */") print(" &util_format_%s_unpack_rgba_float," % format.short_name()) print(" &util_format_%s_pack_rgba_float," % format.short_name()) print(" &util_format_%s_fetch_rgba_float," % format.short_name()) else: print(" NULL, /* unpack_rgba_8unorm */") print(" NULL, /* pack_rgba_8unorm */") print(" NULL, /* fetch_rgba_8unorm */") print(" NULL, /* unpack_rgba_float */") print(" NULL, /* pack_rgba_float */") print(" NULL, /* fetch_rgba_float */") if format.has_depth(): print(" &util_format_%s_unpack_z_32unorm," % format.short_name()) print(" &util_format_%s_pack_z_32unorm," % format.short_name()) print(" &util_format_%s_unpack_z_float," % format.short_name()) print(" &util_format_%s_pack_z_float," % format.short_name()) else: print(" NULL, /* unpack_z_32unorm */") print(" NULL, /* pack_z_32unorm */") print(" NULL, /* unpack_z_float */") print(" NULL, /* pack_z_float */") if format.has_stencil(): print(" &util_format_%s_unpack_s_8uint," % format.short_name()) print(" &util_format_%s_pack_s_8uint," % format.short_name()) else: print(" NULL, /* unpack_s_8uint */") print(" NULL, /* pack_s_8uint */") if format.is_pure_unsigned(): print(" &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name()) print(" &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name()) print(" &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name()) print(" &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name()) print(" &util_format_%s_fetch_unsigned, /* fetch_rgba_uint */" % format.short_name()) print(" NULL /* fetch_rgba_sint */") elif format.is_pure_signed(): print(" &util_format_%s_unpack_unsigned, /* unpack_rgba_uint */" % format.short_name()) print(" &util_format_%s_pack_unsigned, /* pack_rgba_uint */" % format.short_name()) print(" &util_format_%s_unpack_signed, /* unpack_rgba_sint */" % format.short_name()) print(" &util_format_%s_pack_signed, /* pack_rgba_sint */" % format.short_name()) print(" NULL, /* fetch_rgba_uint */") print(" &util_format_%s_fetch_signed /* fetch_rgba_sint */" % format.short_name()) else: print(" NULL, /* unpack_rgba_uint */") print(" NULL, /* pack_rgba_uint */") print(" NULL, /* unpack_rgba_sint */") print(" NULL, /* pack_rgba_sint */") print(" NULL, /* fetch_rgba_uint */") print(" NULL /* fetch_rgba_sint */") print("};") print() print("const struct util_format_description *") print("util_format_description(enum pipe_format format)") print("{") print(" if (format >= PIPE_FORMAT_COUNT) {") print(" return NULL;") print(" }") print() print(" switch (format) {") for format in formats: print(" case %s:" % format.name) print(" return &util_format_%s_description;" % (format.short_name(),)) print(" default:") print(" return NULL;") print(" }") print("}") print()
def write_format_table(formats): write_format_table_header(sys.stdout) print('#include "u_format_bptc.h"') print('#include "u_format_s3tc.h"') print('#include "u_format_rgtc.h"') print('#include "u_format_latc.h"') print('#include "u_format_etc.h"') print() write_format_table_header(sys.stdout2) u_format_pack.generate(formats) def do_channel_array(channels, swizzles): print(" {") for i in range(4): channel = channels[i] if i < 3: sep = "," else: sep = "" if channel.size: print(" {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % (type_map[channel.type], bool_map( channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name)) else: print(" {0, 0, 0, 0, 0}%s" % (sep, )) print(" },") def do_swizzle_array(channels, swizzles): print(" {") for i in range(4): swizzle = swizzles[i] if i < 3: sep = "," else: sep = "" try: comment = colorspace_channels_map[format.colorspace][i] except (KeyError, IndexError): comment = 'ignored' print(" %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)) print(" },") def generate_table_getter(type): print("const struct util_format_%sdescription *" % type) print("util_format_%sdescription(enum pipe_format format)" % type) print("{") print(" if (format >= ARRAY_SIZE(util_format_%sdescriptions))" % (type)) print(" return NULL;") print() print(" return &util_format_%sdescriptions[format];" % (type)) print("}") print() print('static const struct util_format_description') print('util_format_descriptions[] = {') for format in formats: sn = format.short_name() print(" [%s] = {" % (format.name, )) print(" %s," % (format.name, )) print(" \"%s\"," % (format.name, )) print(" \"%s\"," % (sn, )) print(" {%u, %u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_depth, format.block_size())) print(" %s," % (layout_map(format.layout), )) print(" %u,\t/* nr_channels */" % (format.nr_channels(), )) print(" %s,\t/* is_array */" % (bool_map(format.is_array()), )) print(" %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()), )) print(" %s,\t/* is_mixed */" % (bool_map(format.is_mixed()), )) print(" %s,\t/* is_unorm */" % (bool_map(format.is_unorm()), )) print(" %s,\t/* is_snorm */" % (bool_map(format.is_snorm()), )) u_format_pack.print_channels(format, do_channel_array) u_format_pack.print_channels(format, do_swizzle_array) print(" %s," % (colorspace_map(format.colorspace), )) print(" },") print() print("};") print() generate_table_getter("") print('static const struct util_format_pack_description') print('util_format_pack_descriptions[] = {') for format in formats: sn = format.short_name() if not has_access(format): print(" [%s] = { 0 }," % (format.name, )) continue print(" [%s] = {" % (format.name, )) if format.colorspace != ZS and not format.is_pure_color(): print( " .pack_rgba_8unorm = &util_format_%s_pack_rgba_8unorm," % sn) print(" .pack_rgba_float = &util_format_%s_pack_rgba_float," % sn) if format.has_depth(): print(" .pack_z_32unorm = &util_format_%s_pack_z_32unorm," % sn) print(" .pack_z_float = &util_format_%s_pack_z_float," % sn) if format.has_stencil(): print(" .pack_s_8uint = &util_format_%s_pack_s_8uint," % sn) if format.is_pure_unsigned() or format.is_pure_signed(): print(" .pack_rgba_uint = &util_format_%s_pack_unsigned," % sn) print(" .pack_rgba_sint = &util_format_%s_pack_signed," % sn) print(" },") print() print("};") print() generate_table_getter("pack_") print('static const struct util_format_unpack_description') print('util_format_unpack_descriptions[] = {') for format in formats: sn = format.short_name() if not has_access(format): print(" [%s] = { 0 }," % (format.name, )) continue print(" [%s] = {" % (format.name, )) if format.colorspace != ZS and not format.is_pure_color(): print( " .unpack_rgba_8unorm = &util_format_%s_unpack_rgba_8unorm," % sn) if format.layout == 's3tc' or format.layout == 'rgtc': print( " .fetch_rgba_8unorm = &util_format_%s_fetch_rgba_8unorm," % sn) print(" .unpack_rgba = &util_format_%s_unpack_rgba_float," % sn) print( " .fetch_rgba_float = &util_format_%s_fetch_rgba_float," % sn) if format.has_depth(): print( " .unpack_z_32unorm = &util_format_%s_unpack_z_32unorm," % sn) print(" .unpack_z_float = &util_format_%s_unpack_z_float," % sn) if format.has_stencil(): print(" .unpack_s_8uint = &util_format_%s_unpack_s_8uint," % sn) if format.is_pure_unsigned(): print(" .unpack_rgba = &util_format_%s_unpack_unsigned," % sn) print(" .fetch_rgba_uint = &util_format_%s_fetch_unsigned," % sn) elif format.is_pure_signed(): print(" .unpack_rgba = &util_format_%s_unpack_signed," % sn) print(" .fetch_rgba_sint = &util_format_%s_fetch_signed," % sn) print(" },") print("};") print() generate_table_getter("unpack_")
def write_format_table(formats): print('/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */') print() # This will print the copyright message on the top of this file print(CopyRight.strip()) print() print('#include "u_format.h"') print('#include "u_format_bptc.h"') print('#include "u_format_s3tc.h"') print('#include "u_format_rgtc.h"') print('#include "u_format_latc.h"') print('#include "u_format_etc.h"') print() u_format_pack.generate(formats) def do_channel_array(channels, swizzles): print(" {") for i in range(4): channel = channels[i] if i < 3: sep = "," else: sep = "" if channel.size: print(" {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % (type_map[channel.type], bool_map(channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name)) else: print(" {0, 0, 0, 0, 0}%s" % (sep,)) print(" },") def do_swizzle_array(channels, swizzles): print(" {") for i in range(4): swizzle = swizzles[i] if i < 3: sep = "," else: sep = "" try: comment = colorspace_channels_map[format.colorspace][i] except (KeyError, IndexError): comment = 'ignored' print(" %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)) print(" },") for format in formats: sn = format.short_name() print('const struct util_format_description') print('util_format_%s_description = {' % (sn,)) print(" %s," % (format.name,)) print(" \"%s\"," % (format.name,)) print(" \"%s\"," % (sn,)) print(" {%u, %u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_depth, format.block_size())) print(" %s," % (layout_map(format.layout),)) print(" %u,\t/* nr_channels */" % (format.nr_channels(),)) print(" %s,\t/* is_array */" % (bool_map(format.is_array()),)) print(" %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()),)) print(" %s,\t/* is_mixed */" % (bool_map(format.is_mixed()),)) print(" %s,\t/* is_unorm */" % (bool_map(format.is_unorm()),)) print(" %s,\t/* is_snorm */" % (bool_map(format.is_snorm()),)) u_format_pack.print_channels(format, do_channel_array) u_format_pack.print_channels(format, do_swizzle_array) print(" %s," % (colorspace_map(format.colorspace),)) # We don't generate code for YUV formats, and many of the new ones lack pack/unpack # functions for softpipe/llvmpipe. noaccess_formats = [ 'yv12', 'yv16', 'iyuv', 'nv12', 'nv16', 'nv21', 'p010', 'p012', 'p016', 'xyuv', 'ayuv', 'r8g8_r8b8_unorm', 'g8r8_b8r8_unorm', 'g8r8_g8b8_unorm', 'y8_u8_v8_422_unorm', 'y8_u8v8_422_unorm', 'y8_u8_v8_444_unorm', 'y16_u16_v16_420_unorm', 'y16_u16_v16_422_unorm', 'y16_u16v16_422_unorm', 'y16_u16_v16_444_unorm', ] access = sn not in noaccess_formats if format.layout in ('astc', 'atc', 'fxt1'): access = False if format.layout == 'etc' and sn != 'etc1_rgb8': access = False if format.colorspace != ZS and not format.is_pure_color() and access: print(" .unpack_rgba_8unorm = &util_format_%s_unpack_rgba_8unorm," % sn) print(" .pack_rgba_8unorm = &util_format_%s_pack_rgba_8unorm," % sn) if format.layout == 's3tc' or format.layout == 'rgtc': print(" .fetch_rgba_8unorm = &util_format_%s_fetch_rgba_8unorm," % sn) print(" .unpack_rgba = &util_format_%s_unpack_rgba_float," % sn) print(" .pack_rgba_float = &util_format_%s_pack_rgba_float," % sn) print(" .fetch_rgba_float = &util_format_%s_fetch_rgba_float," % sn) if format.has_depth(): print(" .unpack_z_32unorm = &util_format_%s_unpack_z_32unorm," % sn) print(" .pack_z_32unorm = &util_format_%s_pack_z_32unorm," % sn) print(" .unpack_z_float = &util_format_%s_unpack_z_float," % sn) print(" .pack_z_float = &util_format_%s_pack_z_float," % sn) if format.has_stencil(): print(" .unpack_s_8uint = &util_format_%s_unpack_s_8uint," % sn) print(" .pack_s_8uint = &util_format_%s_pack_s_8uint," % sn) if format.is_pure_unsigned(): print(" .unpack_rgba = &util_format_%s_unpack_unsigned," % sn) print(" .pack_rgba_uint = &util_format_%s_pack_unsigned," % sn) print(" .pack_rgba_sint = &util_format_%s_pack_signed," % sn) print(" .fetch_rgba_uint = &util_format_%s_fetch_unsigned," % sn) elif format.is_pure_signed(): print(" .pack_rgba_uint = &util_format_%s_pack_unsigned," % sn) print(" .unpack_rgba = &util_format_%s_unpack_signed," % sn) print(" .pack_rgba_sint = &util_format_%s_pack_signed," % sn) print(" .fetch_rgba_sint = &util_format_%s_fetch_signed," % sn) print("};") print() print("const struct util_format_description *") print("util_format_description(enum pipe_format format)") print("{") print(" if (format >= PIPE_FORMAT_COUNT) {") print(" return NULL;") print(" }") print() print(" switch (format) {") for format in formats: print(" case %s:" % format.name) print(" return &util_format_%s_description;" % (format.short_name(),)) print(" default:") print(" return NULL;") print(" }") print("}") print()
def write_format_table(formats): print( '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */' ) print() # This will print the copyright message on the top of this file print(CopyRight.strip()) print() print('#include "u_format.h"') print() u_format_pack.generate(formats) def do_channel_array(channels, swizzles): print(" {") for i in range(4): channel = channels[i] if i < 3: sep = "," else: sep = "" if channel.size: print(" {%s, %s, %s, %u, %u}%s\t/* %s = %s */" % (type_map[channel.type], bool_map( channel.norm), bool_map(channel.pure), channel.size, channel.shift, sep, "xyzw"[i], channel.name)) else: print(" {0, 0, 0, 0, 0}%s" % (sep, )) print(" },") def do_swizzle_array(channels, swizzles): print(" {") for i in range(4): swizzle = swizzles[i] if i < 3: sep = "," else: sep = "" try: comment = colorspace_channels_map[format.colorspace][i] except (KeyError, IndexError): comment = 'ignored' print(" %s%s\t/* %s */" % (swizzle_map[swizzle], sep, comment)) print(" },") for format in formats: print('const struct util_format_description') print('util_format_%s_description = {' % (format.short_name(), )) print(" %s," % (format.name, )) print(" \"%s\"," % (format.name, )) print(" \"%s\"," % (format.short_name(), )) print(" {%u, %u, %u},\t/* block */" % (format.block_width, format.block_height, format.block_size())) print(" %s," % (layout_map(format.layout), )) print(" %u,\t/* nr_channels */" % (format.nr_channels(), )) print(" %s,\t/* is_array */" % (bool_map(format.is_array()), )) print(" %s,\t/* is_bitmask */" % (bool_map(format.is_bitmask()), )) print(" %s,\t/* is_mixed */" % (bool_map(format.is_mixed()), )) u_format_pack.print_channels(format, do_channel_array) u_format_pack.print_channels(format, do_swizzle_array) print(" %s," % (colorspace_map(format.colorspace), )) print("};") print() print("const struct util_format_description *") print("util_format_description(enum pipe_format format)") print("{") print(" if (format >= PIPE_FORMAT_COUNT) {") print(" return NULL;") print(" }") print() print(" switch (format) {") for format in formats: print(" case %s:" % format.name) print(" return &util_format_%s_description;" % (format.short_name(), )) print(" default:") print(" return NULL;") print(" }") print("}") print()