There are some inconsistencies in pipe_format, but above all, there simply aren't enough bits in an enum to conveniently store all information about a pixel format we need to be able to dynamically generate pixel packing/unpacking code.tags/mesa_7_6_rc1
| @@ -10,6 +10,8 @@ C_SOURCES = \ | |||
| u_blit.c \ | |||
| u_cache.c \ | |||
| u_draw_quad.c \ | |||
| u_format.c \ | |||
| u_format_table.c \ | |||
| u_gen_mipmap.c \ | |||
| u_handle_table.c \ | |||
| u_hash_table.c \ | |||
| @@ -12,6 +12,8 @@ util = env.ConvenienceLibrary( | |||
| 'u_debug_stack.c', | |||
| 'u_debug_symbol.c', | |||
| 'u_draw_quad.c', | |||
| 'u_format.c', | |||
| 'u_format_table.c', | |||
| 'u_gen_mipmap.c', | |||
| 'u_handle_table.c', | |||
| 'u_hash.c', | |||
| @@ -0,0 +1,46 @@ | |||
| /************************************************************************** | |||
| * | |||
| * Copyright 2009 Vmware, Inc. | |||
| * 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. | |||
| * | |||
| **************************************************************************/ | |||
| #include "u_format.h" | |||
| const struct util_format_description * | |||
| util_format_description(enum pipe_format format) | |||
| { | |||
| const struct util_format_description *desc = util_format_description_table; | |||
| while(TRUE) { | |||
| if(desc->format == format) | |||
| return desc; | |||
| if(desc->format == PIPE_FORMAT_NONE) | |||
| return NULL; | |||
| ++desc; | |||
| }; | |||
| } | |||
| @@ -0,0 +1,99 @@ | |||
| PIPE_FORMAT_A8R8G8B8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , zyxw, | |||
| PIPE_FORMAT_X8R8G8B8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , zyx1, | |||
| PIPE_FORMAT_B8G8R8A8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , xyzw, | |||
| PIPE_FORMAT_B8G8R8X8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , xyz1, | |||
| PIPE_FORMAT_A1R5G5B5_UNORM , rgba, 1, 1, un5 , un5 , un5 , un1 , wxyz, | |||
| PIPE_FORMAT_A4R4G4B4_UNORM , rgba, 1, 1, un4 , un4 , un4 , un4 , wxyz, | |||
| PIPE_FORMAT_R5G6B5_UNORM , rgba, 1, 1, un5 , un6 , un5 , , zyx1, | |||
| PIPE_FORMAT_A2B10G10R10_UNORM , rgba, 1, 1, un10, un10, un10, un2 , wzyx, | |||
| PIPE_FORMAT_L8_UNORM , rgba, 1, 1, un8 , , , , xxx1, | |||
| PIPE_FORMAT_A8_UNORM , rgba, 1, 1, un8 , , , , 000x, | |||
| PIPE_FORMAT_I8_UNORM , rgba, 1, 1, un8 , , , , xxxx, | |||
| PIPE_FORMAT_A8L8_UNORM , rgba, 1, 1, un8 , un8 , , , xxxy, | |||
| PIPE_FORMAT_L16_UNORM , rgba, 1, 1, un16, , , , xxx1, | |||
| PIPE_FORMAT_Z16_UNORM , zs , 1, 1, un16, , , , x0__, | |||
| PIPE_FORMAT_Z32_UNORM , zs , 1, 1, un32, , , , x0__, | |||
| PIPE_FORMAT_Z32_FLOAT , zs , 1, 1, f32 , , , , x0__, | |||
| PIPE_FORMAT_S8Z24_UNORM , zs , 1, 1, un8 , un24, , , yx__, | |||
| PIPE_FORMAT_Z24S8_UNORM , zs , 1, 1, un24, un8 , , , xy__, | |||
| PIPE_FORMAT_X8Z24_UNORM , zs , 1, 1, un8 , un24, , , y0__, | |||
| PIPE_FORMAT_Z24X8_UNORM , zs , 1, 1, un24, un8 , , , x0__, | |||
| PIPE_FORMAT_S8_UNORM , zs , 1, 1, un8 , , , , 0x__, | |||
| PIPE_FORMAT_R64_FLOAT , rgba, 1, 1, f64 , , , , x001, | |||
| PIPE_FORMAT_R64G64_FLOAT , rgba, 1, 1, f64 , f64 , , , xy01, | |||
| PIPE_FORMAT_R64G64B64_FLOAT , rgba, 1, 1, f64 , f64 , f64 , , xyz1, | |||
| PIPE_FORMAT_R64G64B64A64_FLOAT , rgba, 1, 1, f64 , f64 , f64 , f64 , xyzw, | |||
| PIPE_FORMAT_R32_FLOAT , rgba, 1, 1, f32 , , , , x001, | |||
| PIPE_FORMAT_R32G32_FLOAT , rgba, 1, 1, f32 , f32 , , , xy01, | |||
| PIPE_FORMAT_R32G32B32_FLOAT , rgba, 1, 1, f32 , f32 , f32 , , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_FLOAT , rgba, 1, 1, f32 , f32 , f32 , f32 , xyzw, | |||
| PIPE_FORMAT_R32_UNORM , rgba, 1, 1, un32, , , , x001, | |||
| PIPE_FORMAT_R32G32_UNORM , rgba, 1, 1, un32, un32, , , xy01, | |||
| PIPE_FORMAT_R32G32B32_UNORM , rgba, 1, 1, un32, un32, un32, , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_UNORM , rgba, 1, 1, un32, un32, un32, un32, xyzw, | |||
| PIPE_FORMAT_R32_USCALED , rgba, 1, 1, u32 , , , , x001, | |||
| PIPE_FORMAT_R32G32_USCALED , rgba, 1, 1, u32 , u32 , , , xy01, | |||
| PIPE_FORMAT_R32G32B32_USCALED , rgba, 1, 1, u32 , u32 , u32 , , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_USCALED , rgba, 1, 1, u32 , u32 , u32 , u32 , xyzw, | |||
| PIPE_FORMAT_R32_SNORM , rgba, 1, 1, sn32, , , , x001, | |||
| PIPE_FORMAT_R32G32_SNORM , rgba, 1, 1, sn32, sn32, , , xy01, | |||
| PIPE_FORMAT_R32G32B32_SNORM , rgba, 1, 1, sn32, sn32, sn32, , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_SNORM , rgba, 1, 1, sn32, sn32, sn32, sn32, xyzw, | |||
| PIPE_FORMAT_R32_SSCALED , rgba, 1, 1, s32 , , , , x001, | |||
| PIPE_FORMAT_R32G32_SSCALED , rgba, 1, 1, s32 , s32 , , , xy01, | |||
| PIPE_FORMAT_R32G32B32_SSCALED , rgba, 1, 1, s32 , s32 , s32 , , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_SSCALED , rgba, 1, 1, s32 , s32 , s32 , s32 , xyzw, | |||
| PIPE_FORMAT_R16_UNORM , rgba, 1, 1, un16, , , , x001, | |||
| PIPE_FORMAT_R16G16_UNORM , rgba, 1, 1, un16, un16, , , xy01, | |||
| PIPE_FORMAT_R16G16B16_UNORM , rgba, 1, 1, un16, un16, un16, , xyz1, | |||
| PIPE_FORMAT_R16G16B16A16_UNORM , rgba, 1, 1, un16, un16, un16, un16, xyzw, | |||
| PIPE_FORMAT_R16_USCALED , rgba, 1, 1, u16 , , , , x001, | |||
| PIPE_FORMAT_R16G16_USCALED , rgba, 1, 1, u16 , u16 , , , xy01, | |||
| PIPE_FORMAT_R16G16B16_USCALED , rgba, 1, 1, u16 , u16 , u16 , , xyz1, | |||
| PIPE_FORMAT_R16G16B16A16_USCALED , rgba, 1, 1, u16 , u16 , u16 , u16 , xyzw, | |||
| PIPE_FORMAT_R16_SNORM , rgba, 1, 1, sn16, , , , x001, | |||
| PIPE_FORMAT_R16G16_SNORM , rgba, 1, 1, sn16, sn16, , , xy01, | |||
| PIPE_FORMAT_R16G16B16_SNORM , rgba, 1, 1, sn16, sn16, sn16, , xyz1, | |||
| PIPE_FORMAT_R16G16B16A16_SNORM , rgba, 1, 1, sn16, sn16, sn16, sn16, xyzw, | |||
| PIPE_FORMAT_R16_SSCALED , rgba, 1, 1, s16 , , , , x001, | |||
| PIPE_FORMAT_R16G16_SSCALED , rgba, 1, 1, s16 , s16 , , , xy01, | |||
| PIPE_FORMAT_R16G16B16_SSCALED , rgba, 1, 1, s16 , s16 , s16 , , xyz1, | |||
| PIPE_FORMAT_R16G16B16A16_SSCALED , rgba, 1, 1, s16 , s16 , s16 , s16 , xyzw, | |||
| PIPE_FORMAT_R8_UNORM , rgba, 1, 1, un8 , , , , x001, | |||
| PIPE_FORMAT_R8G8_UNORM , rgba, 1, 1, un8 , un8 , , , xy01, | |||
| PIPE_FORMAT_R8G8B8_UNORM , rgba, 1, 1, un8 , un8 , un8 , , xyz1, | |||
| PIPE_FORMAT_R8G8B8A8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , xyzw, | |||
| PIPE_FORMAT_R8G8B8X8_UNORM , rgba, 1, 1, un8 , un8 , un8 , un8 , xyz1, | |||
| PIPE_FORMAT_R8_USCALED , rgba, 1, 1, u8 , , , , x001, | |||
| PIPE_FORMAT_R8G8_USCALED , rgba, 1, 1, u8 , u8 , , , xy01, | |||
| PIPE_FORMAT_R8G8B8_USCALED , rgba, 1, 1, u8 , u8 , u8 , , xyz1, | |||
| PIPE_FORMAT_R8G8B8A8_USCALED , rgba, 1, 1, u8 , u8 , u8 , u8 , xyzw, | |||
| PIPE_FORMAT_R8G8B8X8_USCALED , rgba, 1, 1, u8 , u8 , u8 , u8 , xyz1, | |||
| PIPE_FORMAT_R8_SNORM , rgba, 1, 1, sn8 , , , , x001, | |||
| PIPE_FORMAT_R8G8_SNORM , rgba, 1, 1, sn8 , sn8 , , , xy01, | |||
| PIPE_FORMAT_R8G8B8_SNORM , rgba, 1, 1, sn8 , sn8 , sn8 , , xyz1, | |||
| PIPE_FORMAT_R8G8B8A8_SNORM , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , xyzw, | |||
| PIPE_FORMAT_R8G8B8X8_SNORM , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , xyz1, | |||
| PIPE_FORMAT_B6G5R5_SNORM , rgba, 1, 1, sn5 , sn5 , sn6 , , zyx1, | |||
| PIPE_FORMAT_A8B8G8R8_SNORM , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , zyxw, | |||
| PIPE_FORMAT_X8B8G8R8_SNORM , rgba, 1, 1, sn8 , sn8 , sn8 , sn8 , zyx1, | |||
| PIPE_FORMAT_R8_SSCALED , rgba, 1, 1, s8 , , , , x001, | |||
| PIPE_FORMAT_R8G8_SSCALED , rgba, 1, 1, s8 , s8 , , , xy01, | |||
| PIPE_FORMAT_R8G8B8_SSCALED , rgba, 1, 1, s8 , s8 , s8 , , xyz1, | |||
| PIPE_FORMAT_R8G8B8A8_SSCALED , rgba, 1, 1, s8 , s8 , s8 , s8 , xyzw, | |||
| PIPE_FORMAT_R8G8B8X8_SSCALED , rgba, 1, 1, s8 , s8 , s8 , s8 , xyz1, | |||
| PIPE_FORMAT_R32_FIXED , rgba, 1, 1, h32 , , , , x001, | |||
| PIPE_FORMAT_R32G32_FIXED , rgba, 1, 1, h32 , h32 , , , xy01, | |||
| PIPE_FORMAT_R32G32B32_FIXED , rgba, 1, 1, h32 , h32 , h32 , , xyz1, | |||
| PIPE_FORMAT_R32G32B32A32_FIXED , rgba, 1, 1, h32 , h32 , h32 , h32 , xyzw, | |||
| PIPE_FORMAT_L8_SRGB , rgba, 1, 1, u8 , , , , xxx1, srgb | |||
| PIPE_FORMAT_A8L8_SRGB , rgba, 1, 1, u8 , u8 , , , xxxy, srgb | |||
| PIPE_FORMAT_R8G8B8_SRGB , rgba, 1, 1, u8 , u8 , u8 , , xyz1, srgb | |||
| PIPE_FORMAT_R8G8B8A8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , xyzw, srgb | |||
| PIPE_FORMAT_R8G8B8X8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , xyz1, srgb | |||
| PIPE_FORMAT_A8R8G8B8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , wxyz, srgb | |||
| PIPE_FORMAT_X8R8G8B8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , 1xyz, srgb | |||
| PIPE_FORMAT_B8G8R8A8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , zyxw, srgb | |||
| PIPE_FORMAT_B8G8R8X8_SRGB , rgba, 1, 1, u8 , u8 , u8 , u8 , zyx1, srgb | |||
| PIPE_FORMAT_X8UB8UG8SR8S_NORM , rgba, 1, 1, sn8 , sn8 , un8 , x8 , 1zyx, | |||
| PIPE_FORMAT_B6UG5SR5S_NORM , rgba, 1, 1, sn5 , sn5 , un6 , , xyz1, | |||
| @@ -0,0 +1,111 @@ | |||
| /************************************************************************** | |||
| * | |||
| * Copyright 2009 Vmware, Inc. | |||
| * 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. | |||
| * | |||
| **************************************************************************/ | |||
| #ifndef U_FORMAT_H | |||
| #define U_FORMAT_H | |||
| #include "pipe/p_format.h" | |||
| enum util_format_layout { | |||
| UTIL_FORMAT_LAYOUT_RGBA = 0, | |||
| UTIL_FORMAT_LAYOUT_ZS = 1, | |||
| UTIL_FORMAT_LAYOUT_YUV = 2, | |||
| UTIL_FORMAT_LAYOUT_DXT = 3 | |||
| }; | |||
| struct util_format_block | |||
| { | |||
| /** Block width in pixels */ | |||
| unsigned width; | |||
| /** Block height in pixels */ | |||
| unsigned height; | |||
| /** Block size in bytes */ | |||
| unsigned bits; | |||
| }; | |||
| enum util_format_type { | |||
| UTIL_FORMAT_TYPE_VOID = 0, | |||
| UTIL_FORMAT_TYPE_UNSIGNED = 1, | |||
| UTIL_FORMAT_TYPE_SIGNED = 2, | |||
| UTIL_FORMAT_TYPE_FIXED = 3, | |||
| UTIL_FORMAT_TYPE_FLOAT = 4 | |||
| }; | |||
| enum util_format_swizzle { | |||
| UTIL_FORMAT_SWIZZLE_X = 0, | |||
| UTIL_FORMAT_SWIZZLE_Y = 1, | |||
| UTIL_FORMAT_SWIZZLE_Z = 2, | |||
| UTIL_FORMAT_SWIZZLE_W = 3, | |||
| UTIL_FORMAT_SWIZZLE_0 = 4, | |||
| UTIL_FORMAT_SWIZZLE_1 = 5, | |||
| UTIL_FORMAT_SWIZZLE_NONE = 6 | |||
| }; | |||
| enum util_format_colorspace { | |||
| UTIL_FORMAT_COLORSPACE_RGB = 0, | |||
| UTIL_FORMAT_COLORSPACE_SRGB = 1 | |||
| }; | |||
| struct util_format_channel_description | |||
| { | |||
| unsigned type:6; | |||
| unsigned normalized:1; | |||
| unsigned size:9; | |||
| }; | |||
| struct util_format_description | |||
| { | |||
| enum pipe_format format; | |||
| const char *name; | |||
| struct util_format_block block; | |||
| enum util_format_layout layout; | |||
| struct util_format_channel_description channel[4]; | |||
| unsigned char swizzle[4]; | |||
| enum util_format_colorspace colorspace; | |||
| }; | |||
| extern const struct util_format_description | |||
| util_format_description_table[]; | |||
| const struct util_format_description * | |||
| util_format_description(enum pipe_format format); | |||
| #endif /* ! U_FORMAT_H */ | |||
| @@ -0,0 +1,212 @@ | |||
| #!/usr/bin/env python | |||
| ''' | |||
| /************************************************************************** | |||
| * | |||
| * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. | |||
| * 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 TUNGSTEN GRAPHICS 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 sys | |||
| UNSIGNED, SIGNED, FIXED, FLOAT = 'u', 's', 'h', 'f' | |||
| class Type: | |||
| def __init__(self, kind, norm, size): | |||
| self.kind = kind | |||
| self.norm = norm | |||
| self.size = size | |||
| def __str__(self): | |||
| s = str(self.kind) | |||
| if norm: | |||
| s += 'n' | |||
| s += str(self.size) | |||
| return s | |||
| SCALED, NORM, SRGB = 'scaled', 'norm', 'srgb' | |||
| class Format: | |||
| def __init__(self, name, layout, block_width, block_height, in_types, out_swizzle, colorspace): | |||
| self.name = name | |||
| self.layout = layout | |||
| self.block_width = block_width | |||
| self.block_height = block_height | |||
| self.in_types = in_types | |||
| self.out_swizzle = out_swizzle | |||
| self.name = name | |||
| self.colorspace = colorspace | |||
| def __str__(self): | |||
| return self.name | |||
| def block_size(self): | |||
| size = 0 | |||
| for type in self.in_types: | |||
| size += type.size | |||
| return size | |||
| def parse(filename): | |||
| stream = open(filename) | |||
| formats = [] | |||
| for line in stream: | |||
| line = line.rstrip() | |||
| fields = [field.strip() for field in line.split(',')] | |||
| name = fields[0] | |||
| layout = fields[1] | |||
| block_width, block_height = map(int, fields[2:4]) | |||
| in_types = [] | |||
| for field in fields[4:8]: | |||
| if field: | |||
| kind = field[0] | |||
| if field[1] == 'n': | |||
| norm = True | |||
| size = int(field[2:]) | |||
| else: | |||
| norm = False | |||
| size = int(field[1:]) | |||
| else: | |||
| kind = '' | |||
| norm = False | |||
| size = 0 | |||
| in_type = Type(kind, norm, size) | |||
| in_types.append(in_type) | |||
| out_swizzle = fields[8] | |||
| colorspace = fields[9] | |||
| formats.append(Format(name, layout, block_width, block_height, in_types, out_swizzle, colorspace)) | |||
| return formats | |||
| def layout_map(layout): | |||
| return 'UTIL_FORMAT_LAYOUT_' + str(layout).upper() | |||
| layout_channels_map = { | |||
| 'rgba': 'rgba', | |||
| 'zs': 'zs', | |||
| 'yuv': ['y1', 'y2', 'u', 'v'], | |||
| 'dxt': [] | |||
| } | |||
| kind_map = { | |||
| '': "UTIL_FORMAT_TYPE_VOID", | |||
| 'x': "UTIL_FORMAT_TYPE_VOID", | |||
| UNSIGNED: "UTIL_FORMAT_TYPE_UNSIGNED", | |||
| SIGNED: "UTIL_FORMAT_TYPE_SIGNED", | |||
| FIXED: "UTIL_FORMAT_TYPE_FIXED", | |||
| FLOAT: "UTIL_FORMAT_TYPE_FLOAT", | |||
| } | |||
| def bool_map(value): | |||
| if value: | |||
| return "TRUE" | |||
| else: | |||
| return "FALSE" | |||
| swizzle_map = { | |||
| 'x': "UTIL_FORMAT_SWIZZLE_X", | |||
| 'y': "UTIL_FORMAT_SWIZZLE_Y", | |||
| 'z': "UTIL_FORMAT_SWIZZLE_Z", | |||
| 'w': "UTIL_FORMAT_SWIZZLE_W", | |||
| '0': "UTIL_FORMAT_SWIZZLE_0", | |||
| '1': "UTIL_FORMAT_SWIZZLE_1", | |||
| '_': "UTIL_FORMAT_SWIZZLE_NONE", | |||
| } | |||
| def write_format_table(formats): | |||
| print '/* This file is autogenerated by u_format_table.py from u_format.csv. Do not edit directly. */' | |||
| # This will print the copyright message on the top of this file | |||
| print __doc__.strip() | |||
| print '#include "u_format.h"' | |||
| print 'const struct util_format_description' | |||
| print 'util_format_description_table[] = ' | |||
| print "{" | |||
| for format in formats: | |||
| print " {" | |||
| print " %s," % (format.name,) | |||
| print " \"%s\"," % (format.name,) | |||
| print " {%u, %u, %u}, /* block */" % (format.block_width, format.block_height, format.block_size()) | |||
| print " %s," % (layout_map(format.layout),) | |||
| print " {" | |||
| for i in range(4): | |||
| type = format.in_types[i] | |||
| if i < 3: | |||
| sep = "," | |||
| else: | |||
| sep = "" | |||
| print " {%s, %s, %u}%s /* %s */" % (kind_map[type.kind], bool_map(type.norm), type.size, sep, "xyzw"[i]) | |||
| print " }," | |||
| print " {" | |||
| for i in range(4): | |||
| swizzle = format.out_swizzle[i] | |||
| if i < 3: | |||
| sep = "," | |||
| else: | |||
| sep = "" | |||
| try: | |||
| comment = layout_channels_map[format.layout][i] | |||
| except: | |||
| comment = 'ignored' | |||
| print " %s%s /* %s */" % (swizzle_map[swizzle], sep, comment) | |||
| print " }," | |||
| print " UTIL_FORMAT_COLORSPACE_RGB," | |||
| print " }," | |||
| print " {" | |||
| print " PIPE_FORMAT_NONE," | |||
| print " \"PIPE_FORMAT_NONE\"," | |||
| print " {0, 0, 0}," | |||
| print " 0," | |||
| print " {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}}," | |||
| print " {0, 0, 0, 0}," | |||
| print " 0" | |||
| print " }," | |||
| print "};" | |||
| def main(): | |||
| formats = [] | |||
| for arg in sys.argv[1:]: | |||
| formats.extend(parse(arg)) | |||
| write_format_table(formats) | |||
| if __name__ == '__main__': | |||
| main() | |||