summaryrefslogtreecommitdiff
path: root/media-libs/mesa/files/23.3.3-big-endian.patch
diff options
context:
space:
mode:
Diffstat (limited to 'media-libs/mesa/files/23.3.3-big-endian.patch')
-rw-r--r--media-libs/mesa/files/23.3.3-big-endian.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/media-libs/mesa/files/23.3.3-big-endian.patch b/media-libs/mesa/files/23.3.3-big-endian.patch
new file mode 100644
index 000000000000..6d20fcb77f5c
--- /dev/null
+++ b/media-libs/mesa/files/23.3.3-big-endian.patch
@@ -0,0 +1,84 @@
+From 5997cf7587ce56aedac9114c0db9b250f1b54461 Mon Sep 17 00:00:00 2001
+From: Matt Turner <mattst88@gmail.com>
+Date: Tue, 9 Jan 2024 23:45:27 -0500
+Subject: [PATCH 1/2] nir: Fix cast
+
+We were wrongly telling `nir_const_value_as_uint()` that `iter` had
+`bit_size` bits, but in one case it is explicitly i64. This works on
+little endian platforms, but caused the nir_loop_unroll_test.fadd{,_rev}
+tests to fail on big endian platforms.
+
+Bug: https://bugs.gentoo.org/921297
+Fixes: 268ad47c111 ("nir/loop_analyze: Handle bit sizes correctly in calculate_iterations")
+Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
+Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26964>
+---
+ src/compiler/nir/nir_loop_analyze.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/compiler/nir/nir_loop_analyze.c b/src/compiler/nir/nir_loop_analyze.c
+index b55da00b962..2b2ebfdd60f 100644
+--- a/src/compiler/nir/nir_loop_analyze.c
++++ b/src/compiler/nir/nir_loop_analyze.c
+@@ -827,6 +827,7 @@ get_iteration(nir_op cond_op, nir_const_value initial, nir_const_value step,
+ unsigned execution_mode)
+ {
+ nir_const_value span, iter;
++ unsigned iter_bit_size = bit_size;
+
+ switch (invert_comparison_if_needed(cond_op, invert_cond)) {
+ case nir_op_ine:
+@@ -880,13 +881,14 @@ get_iteration(nir_op cond_op, nir_const_value initial, nir_const_value step,
+ iter = eval_const_binop(nir_op_fdiv, bit_size, span,
+ step, execution_mode);
+ iter = eval_const_unop(nir_op_f2i64, bit_size, iter, execution_mode);
++ iter_bit_size = 64;
+ break;
+
+ default:
+ return -1;
+ }
+
+- uint64_t iter_u64 = nir_const_value_as_uint(iter, bit_size);
++ uint64_t iter_u64 = nir_const_value_as_uint(iter, iter_bit_size);
+ return iter_u64 > INT_MAX ? -1 : (int)iter_u64;
+ }
+
+--
+2.41.0
+
+From 4ed0957ce75878f8a2ce769e933c5ea3a1aa2510 Mon Sep 17 00:00:00 2001
+From: Matt Turner <mattst88@gmail.com>
+Date: Tue, 9 Jan 2024 23:47:56 -0500
+Subject: [PATCH 2/2] nir/tests: Reenable tests that failed on big-endian
+
+These tests were disabled due to the bug fixed in the previous commit.
+
+Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
+Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
+Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26964>
+---
+ src/compiler/nir/tests/loop_unroll_tests.cpp | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/src/compiler/nir/tests/loop_unroll_tests.cpp b/src/compiler/nir/tests/loop_unroll_tests.cpp
+index f9ffb1f7a1c..af9b8f87549 100644
+--- a/src/compiler/nir/tests/loop_unroll_tests.cpp
++++ b/src/compiler/nir/tests/loop_unroll_tests.cpp
+@@ -144,12 +144,10 @@ UNROLL_TEST_INSERT(iadd, int, 0, 24, 4,
+ ige, iadd, false, TRUE, 6, 0)
+ UNROLL_TEST_INSERT(iadd_rev, int, 0, 24, 4,
+ ilt, iadd, true, TRUE, 7, 0)
+-#ifndef __s390x__
+ UNROLL_TEST_INSERT(fadd, float, 0.0, 24.0, 4.0,
+ fge, fadd, false, TRUE, 6, 0)
+ UNROLL_TEST_INSERT(fadd_rev, float, 0.0, 24.0, 4.0,
+ flt, fadd, true, TRUE, 7, 0)
+-#endif
+ UNROLL_TEST_INSERT(imul, int, 1, 81, 3,
+ ige, imul, false, TRUE, 4, 0)
+ UNROLL_TEST_INSERT(imul_rev, int, 1, 81, 3,
+--
+2.41.0
+