Store the shift value for a bitmask channel in the Channel object, rather than working it out on the fly. This allows the shift to depend on endianness.
There is no change to the generated u_format_table.c. Signed-off-by: Richard Sandiford <rsand...@linux.vnet.ibm.com> --- src/gallium/auxiliary/util/u_format_pack.py | 8 ++------ src/gallium/auxiliary/util/u_format_parse.py | 5 +++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gallium/auxiliary/util/u_format_pack.py b/src/gallium/auxiliary/util/u_format_pack.py index 84eef8c..b4db0d1 100644 --- a/src/gallium/auxiliary/util/u_format_pack.py +++ b/src/gallium/auxiliary/util/u_format_pack.py @@ -428,9 +428,9 @@ def generate_unpack_kernel(format, dst_channel, dst_native_type): print '#endif' # Compute the intermediate unshifted values - shift = 0 for i in range(4): src_channel = channels[i] + shift = src_channel.shift value = 'value' if src_channel.type == UNSIGNED: if shift: @@ -454,8 +454,6 @@ def generate_unpack_kernel(format, dst_channel, dst_native_type): if value is not None: print ' %s = %s;' % (src_channel.name, value) - shift += src_channel.size - # Convert, swizzle, and store final values for i in range(4): swizzle = swizzles[i] @@ -529,9 +527,9 @@ def generate_pack_kernel(format, src_channel, src_native_type): depth = format.block_size() print ' uint%u_t value = 0;' % depth - shift = 0 for i in range(4): dst_channel = channels[i] + shift = dst_channel.shift if inv_swizzle[i] is not None: value ='src[%u]' % inv_swizzle[i] dst_colorspace = format.colorspace @@ -555,8 +553,6 @@ def generate_pack_kernel(format, src_channel, src_native_type): if value is not None: print ' value |= %s;' % (value) - shift += dst_channel.size - if depth > 8: print '#ifdef PIPE_ARCH_BIG_ENDIAN' print ' value = util_bswap%u(value);' % depth diff --git a/src/gallium/auxiliary/util/u_format_parse.py b/src/gallium/auxiliary/util/u_format_parse.py index 2553a5b..d60a0a2 100755 --- a/src/gallium/auxiliary/util/u_format_parse.py +++ b/src/gallium/auxiliary/util/u_format_parse.py @@ -337,6 +337,11 @@ def parse(filename): swizzles = [_swizzle_parse_map[swizzle] for swizzle in fields[8]] channels = _parse_channels(fields[4:8], layout, colorspace, swizzles) + shift = 0 + for channel in channels: + channel.shift = shift + shift += channel.size + format = Format(name, layout, block_width, block_height, channels, swizzles, colorspace) formats.append(format) return formats -- 1.7.11.7 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev