diff options
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_format_soa.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c index 98eb694c1f6..22c19b10dbd 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c @@ -650,7 +650,13 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm, for (i = 0; i < format_desc->nr_channels; i++) { struct util_format_channel_description chan_desc = format_desc->channel[i]; unsigned blockbits = type.width; - unsigned vec_nr = chan_desc.shift / type.width; + unsigned vec_nr; + +#ifdef PIPE_ARCH_BIG_ENDIAN + vec_nr = (format_desc->block.bits - (chan_desc.shift + chan_desc.size)) / type.width; +#else + vec_nr = chan_desc.shift / type.width; +#endif chan_desc.shift %= type.width; output[i] = lp_build_extract_soa_chan(&bld, |