Stefan Dirsch
a77ad11291
* instead of reverse applying a change on s390x ("U_draw-use-SoA-fetch-not-AoS-one.patch") address the issue by a real fix (bsc#1032272, fdo#100613) OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/Mesa?expand=0&rev=607
43 lines
1.7 KiB
Diff
43 lines
1.7 KiB
Diff
From ab0e1e38ab9e8b23602af21d1b43e98afbf80e45 Mon Sep 17 00:00:00 2001
|
|
From: Ray Strode <rstrode@redhat.com>
|
|
Date: Fri, 21 Apr 2017 15:22:14 -0400
|
|
Subject: [PATCH] gallivm: correct channel shift logic on big endian
|
|
|
|
lp_build_fetch_rgba_soa fetches a texel from a texture.
|
|
Part of that process involves first gathering the element
|
|
together from memory into a packed format, and then breaking
|
|
out the individual color channels into separate, parallel
|
|
arrays.
|
|
|
|
The code fails to account for endianess when reading the packed
|
|
values.
|
|
|
|
This commit attempts to correct the problem by reversing the order
|
|
the packed values are read on big endian systems.
|
|
---
|
|
src/gallium/auxiliary/gallivm/lp_bld_format_soa.c | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c
|
|
index 98eb694..22c19b1 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,
|
|
--
|
|
1.8.3.1
|
|
|