else:
integer_types = (int, )
-
def inv_swizzles(swizzles):
'''Return an array[4] of inverse swizzle terms'''
'''Only pick the first matching value to avoid l8 getting blue and i8 getting alpha'''
def pack_into_struct(channels, swizzles):
inv_swizzle = inv_swizzles(swizzles)
- print(' struct util_format_%s pixel;' % format.short_name())
+ print(' struct util_format_%s pixel = {0};' % format.short_name())
for i in range(4):
dst_channel = channels[i]
name = format.short_name()
- print('static inline void')
- print('util_format_%s_unpack_%s(%s *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)' % (name, dst_suffix, dst_native_type))
+ if "8unorm" in dst_suffix:
+ dst_proto_type = dst_native_type
+ else:
+ dst_proto_type = 'void'
+
+ proto = 'util_format_%s_unpack_%s(%s *dst_row, unsigned dst_stride, const uint8_t *src_row, unsigned src_stride, unsigned width, unsigned height)' % (name, dst_suffix, dst_proto_type)
+ print('void %s;' % proto, file=sys.stdout2)
+
+ print('void')
+ print(proto)
print('{')
if is_format_supported(format):
print(' dst += 4;')
print(' }')
print(' src_row += src_stride;')
- print(' dst_row += dst_stride/sizeof(*dst_row);')
+ print(' dst_row = (uint8_t *)dst_row + dst_stride;')
print(' }')
print('}')
name = format.short_name()
- print('static inline void')
+ print('void')
print('util_format_%s_pack_%s(uint8_t *dst_row, unsigned dst_stride, const %s *src_row, unsigned src_stride, unsigned width, unsigned height)' % (name, src_suffix, src_native_type))
print('{')
+
+ print('void util_format_%s_pack_%s(uint8_t *dst_row, unsigned dst_stride, const %s *src_row, unsigned src_stride, unsigned width, unsigned height);' % (name, src_suffix, src_native_type), file=sys.stdout2)
if is_format_supported(format):
print(' unsigned x, y;')
print()
-def generate_format_fetch(format, dst_channel, dst_native_type, dst_suffix):
+def generate_format_fetch(format, dst_channel, dst_native_type):
'''Generate the function to unpack pixels from a particular format'''
name = format.short_name()
- print('static inline void')
- print('util_format_%s_fetch_%s(%s *dst, const uint8_t *src, UNUSED unsigned i, UNUSED unsigned j)' % (name, dst_suffix, dst_native_type))
+ proto = 'util_format_%s_fetch_rgba(void *in_dst, const uint8_t *src, UNUSED unsigned i, UNUSED unsigned j)' % (name)
+ print('void %s;' % proto, file=sys.stdout2)
+
+ print('void')
+ print(proto)
+
print('{')
+ print(' %s *dst = in_dst;' % dst_native_type)
if is_format_supported(format):
generate_unpack_kernel(format, dst_channel, dst_native_type)
print('#include "util/format_srgb.h"')
print('#include "u_format_yuv.h"')
print('#include "u_format_zs.h"')
+ print('#include "u_format_pack.h"')
print()
for format in formats:
generate_format_unpack(format, channel, native_type, suffix)
generate_format_pack(format, channel, native_type, suffix)
- generate_format_fetch(format, channel, native_type, suffix)
+ generate_format_fetch(format, channel, native_type)
channel = Channel(SIGNED, False, True, 32)
native_type = 'int'
generate_format_unpack(format, channel, native_type, suffix)
generate_format_pack(format, channel, native_type, suffix)
- generate_format_fetch(format, channel, native_type, suffix)
+ generate_format_fetch(format, channel, native_type)
native_type = 'unsigned'
suffix = 'unsigned'
generate_format_unpack(format, channel, native_type, suffix)
generate_format_pack(format, channel, native_type, suffix)
- generate_format_fetch(format, channel, native_type, suffix)
+ generate_format_fetch(format, channel, native_type)
channel = Channel(UNSIGNED, True, False, 8)
native_type = 'uint8_t'
generate_format_unpack(format, channel, native_type, suffix)
generate_format_pack(format, channel, native_type, suffix)
-