pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/x11/xscreensaver xscreensaver: add upstream patch from...
details: https://anonhg.NetBSD.org/pkgsrc/rev/b5aae5fafb13
branches: trunk
changeset: 374329:b5aae5fafb13
user: wiz <wiz%pkgsrc.org@localhost>
date: Sat Feb 19 17:58:21 2022 +0000
description:
xscreensaver: add upstream patch from jwz to fix compilation with gcc 7.5
Addresses PR 56723 by David H. Gutteridge
diffstat:
x11/xscreensaver/distinfo | 3 +-
x11/xscreensaver/patches/patch-hacks_marbling.c | 153 ++++++++++++++++++++++++
2 files changed, 155 insertions(+), 1 deletions(-)
diffs (168 lines):
diff -r 2f714ef24b55 -r b5aae5fafb13 x11/xscreensaver/distinfo
--- a/x11/xscreensaver/distinfo Sat Feb 19 17:53:51 2022 +0000
+++ b/x11/xscreensaver/distinfo Sat Feb 19 17:58:21 2022 +0000
@@ -1,5 +1,6 @@
-$NetBSD: distinfo,v 1.86 2022/02/17 15:46:52 wiz Exp $
+$NetBSD: distinfo,v 1.87 2022/02/19 17:58:21 wiz Exp $
BLAKE2s (xscreensaver/xscreensaver-6.02.tar.gz) = 080ff4236605bd59b82c6dc1f3da8120848d66468e5218c00e4230d29cb51d27
SHA512 (xscreensaver/xscreensaver-6.02.tar.gz) = 2291ec6ca2d2a24dae975f7f3a8e1733c06f289eb74955db5b3344c7ddcc1d72f82d380df984ef9199f2ed7ab8a7bc920da57d98f589ae5fd1cee082755ba1ff
Size (xscreensaver/xscreensaver-6.02.tar.gz) = 22672643 bytes
+SHA1 (patch-hacks_marbling.c) = 55be2ea8e788094bf4b15e7bfe0b6858b6a33a79
diff -r 2f714ef24b55 -r b5aae5fafb13 x11/xscreensaver/patches/patch-hacks_marbling.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/xscreensaver/patches/patch-hacks_marbling.c Sat Feb 19 17:58:21 2022 +0000
@@ -0,0 +1,153 @@
+$NetBSD: patch-hacks_marbling.c,v 1.1 2022/02/19 17:58:22 wiz Exp $
+
+Upstream patch from jwz to fix compilation with gcc 7.5.
+
+--- hacks/marbling.c.orig 2021-10-04 23:20:23.052312294 +0000
++++ hacks/marbling.c
+@@ -44,6 +44,13 @@
+ #include "thread_util.h"
+ #include "xshm.h"
+
++#if defined __GNUC__ || defined __clang__ || \
++ defined __STDC_VERSION__ && __STDC_VERSION__ > 199901L
++# define INLINE inline
++#else
++# define INLINE
++#endif
++
+ /* Use GCC/Clang's vector SIMD extensions, when possible.
+ https://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html
+ */
+@@ -59,17 +66,21 @@
+ */
+ # if defined __AVX2__
+ # define VSIZE 16
+-# define IMUL_HI __builtin_ia32_pmulhw256
+-# define MUL_HI __builtin_ia32_pmulhuw256
++# define IMUL_HI_OP __builtin_ia32_pmulhw256
++# define MUL_HI_OP __builtin_ia32_pmulhuw256
+ # elif defined __SSE2__
+ # define VSIZE 8
+-# define IMUL_HI __builtin_ia32_pmulhw128
+-# define MUL_HI __builtin_ia32_pmulhuw128
++# define IMUL_HI_OP __builtin_ia32_pmulhw128
++# define MUL_HI_OP __builtin_ia32_pmulhuw128
+ # endif
+
+ # ifdef VSIZE
+-typedef int16_t v_uhi __attribute__((vector_size(VSIZE * 2)));
++typedef uint16_t v_uhi __attribute__((vector_size(VSIZE * 2)));
+ typedef int16_t v_hi __attribute__((vector_size(VSIZE * 2)));
++
++static INLINE v_hi IMUL_HI(v_hi a, v_hi b) { return IMUL_HI_OP(a, b); }
++static INLINE v_uhi MUL_HI(v_uhi a, v_uhi b) { return (v_uhi)MUL_HI_OP((v_hi)a, (v_hi)b); }
++
+ # endif
+ # endif
+
+@@ -114,13 +125,6 @@ typedef int16_t v_hi;
+ # define VEC_INDEX(v, i) ((v)[i])
+ #endif
+
+-#if defined __GNUC__ || defined __clang__ || \
+- defined __STDC_VERSION__ && __STDC_VERSION__ > 199901L
+-# define INLINE inline
+-#else
+-# define INLINE
+-#endif
+-
+ struct state {
+ Display *dpy;
+ Window window;
+@@ -156,18 +160,20 @@ const unsigned lerp_loss = 2; /* Min: 2
+ #endif
+
+ /* == 8 for x86 and scalar. (Nice.) */
+-const unsigned noise_out_bits = noise_work_bits - 3 * lerp_loss + 1;
++/* const unsigned noise_out_bits = noise_work_bits - 3 * lerp_loss + 1; */
++#define noise_out_bits ((noise_work_bits - 3) * (lerp_loss + 1))
+ const unsigned noise_in_bits = 8;
+
+-static INLINE v_hi
++static INLINE v_uhi
+ broadcast (int16_t x)
+ {
+ #if VSIZE == 1
+- return x;
++ v_hi r = x;
+ #else
+ v_hi r = {0};
+- return r + x;
++ r = r + x;
+ #endif
++ return (v_uhi)r;
+ }
+
+ static INLINE v_uhi
+@@ -175,11 +181,22 @@ fade (v_uhi t)
+ {
+ const uint16_t F = 256;
+
++ /* This whole thing is playing fast and loose with signdedness, mostly
++ because __builtin_ia32_pmulhuw256 is an unsigned op that requires signed
++ params, and Android's clang doesn't seem to care about signed vs.
++ unsigned vector variables.
++
++ The multiplications below should be unsigned, but the result is the same
++ either way, because it's getting the low 16 bits (not the high 16).
++ */
+ #if __ARM_NEON
+- v_uhi t2 = (t * t) >> 1;
+- return
+- vqdmulhq_s16(t2, 10 * t - vqdmulhq_s16(t2, (uint16_t)(15 * F) - t * 6)) <<
++ v_uhi ut2 = (t * t) >> 1;
++ v_hi it2 = (v_hi)ut2;
++ v_hi it = (v_hi)t;
++ v_hi iret =
++ vqdmulhq_s16(it2, 10 * it - vqdmulhq_s16(it2, (int16_t)(15 * F) - it * 6)) <<
+ (noise_work_bits - noise_in_bits + 1);
++ return (v_uhi)iret;
+ #else
+ v_uhi t2 = t * t;
+ return
+@@ -239,7 +256,7 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ {
+ const v_uhi one = broadcast(1 << noise_work_bits);
+ v_uhi X, Y, Z, A, B, AA, AB, BA, BB;
+- v_uhi u, v, w;
++ v_hi u, v, w;
+ v_hi c0, c1, c2, c3, c4, c5, c6, c7;
+ X = x >> noise_in_bits; /* FIND UNIT CUBE THAT */
+ Y = y >> noise_in_bits; /* CONTAINS POINT. */
+@@ -247,9 +264,9 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ x &= (uint16_t)((1 << noise_in_bits) - 1); /* FIND RELATIVE X,Y,Z */
+ y &= (uint16_t)((1 << noise_in_bits) - 1); /* OF POINT IN CUBE. */
+ z &= (uint16_t)((1 << noise_in_bits) - 1);
+- u = fade(x); /* COMPUTE FADE CURVES */
+- v = fade(y); /* FOR EACH OF X,Y,Z. */
+- w = fade(z);
++ u = (v_hi)fade(x); /* COMPUTE FADE CURVES */
++ v = (v_hi)fade(y); /* FOR EACH OF X,Y,Z. */
++ w = (v_hi)fade(z);
+
+ A = noise_rand(X)+Y, AA = P(A)+Z, AB = P(A+1)+Z; /* HASH COORDINATES OF */
+ B = P(X+1)+Y, BA = P(B)+Z, BB = P(B+1)+Z; /* THE 8 CUBE CORNERS, */
+@@ -265,7 +282,8 @@ noise (v_uhi x, v_uhi y, v_uhi z)
+ c6 = grad(P(AB+1), x, y-one, z-one );
+ c7 = grad(P(BB+1), x-one, y-one, z-one );
+
+- return SCALE(LERP(w, LERP(v, LERP(u, c0, c1), /* AND ADD BLENDED */
++ return
++ (v_uhi)SCALE(LERP(w, LERP(v, LERP(u, c0, c1), /* AND ADD BLENDED */
+ LERP(u, c2, c3)), /* RESULTS FROM 8 */
+ LERP(v, LERP(u, c4, c5), /* CORNERS OF CUBE */
+ LERP(u, c6, c7))));
+@@ -292,7 +310,7 @@ fbm (v_uhi x, v_uhi y, v_uhi z)
+ for (i = 0; i < octaves; i++)
+ {
+ #if __ARM_NEON
+- t += vqdmulhq_n_s16(noise (f*x, f*y, f*z), a);
++ t += (v_uhi)vqdmulhq_n_s16((v_hi)noise (f*x, f*y, f*z), a);
+ a = ((uint32_t)a * iG) >> 16;
+ #else
+ t += MUL_HI(noise (f*x, f*y, f*z), a);
Home |
Main Index |
Thread Index |
Old Index