From 5b57e98563bc44c4ea44acb1b6daba243b0d4962 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Thu, 2 Dec 2021 19:47:50 +0100 Subject: [PATCH] Fix some issues with the SSE versions of the filters --- src/ImageSharp/Formats/Webp/Lossy/LossyUtils.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Formats/Webp/Lossy/LossyUtils.cs b/src/ImageSharp/Formats/Webp/Lossy/LossyUtils.cs index 9f10be3b8e..71522d66f7 100644 --- a/src/ImageSharp/Formats/Webp/Lossy/LossyUtils.cs +++ b/src/ImageSharp/Formats/Webp/Lossy/LossyUtils.cs @@ -26,7 +26,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy private static readonly Vector128 Nine = Vector128.Create((short)0x0900).AsSByte(); - private static readonly Vector128 SixtyThree = Vector128.Create((byte)63).AsSByte(); + private static readonly Vector128 SixtyThree = Vector128.Create((short)63).AsSByte(); private static readonly Vector128 SixtyFour = Vector128.Create((byte)64).AsSByte(); #endif @@ -1080,7 +1080,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy mask = Sse2.Max(mask, Abs(p3, p2)); mask = Sse2.Max(mask, Abs(p2, p1)); - Load16x4(p.Slice(offset), p.Slice(offset + 8), stride, out Vector128 q0, out Vector128 q1, out Vector128 q2, out Vector128 q3); + Load16x4(p.Slice(offset), p.Slice(offset + (8 * stride)), stride, out Vector128 q0, out Vector128 q1, out Vector128 q2, out Vector128 q3); mask = Sse2.Max(mask, Abs(q1, q0)); mask = Sse2.Max(mask, Abs(q3, q2)); @@ -1614,8 +1614,8 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy p0 = Sse2.Xor(p0, SignBit); q0 = Sse2.Xor(q0, SignBit); q1 = Sse2.Xor(q1, SignBit); - q0 = Sse2.Xor(p2, SignBit); - q1 = Sse2.Xor(q2, SignBit); + p2 = Sse2.Xor(p2, SignBit); + q2 = Sse2.Xor(q2, SignBit); Vector128 a = GetBaseDelta(p1.AsSByte(), p0.AsSByte(), q0.AsSByte(), q1.AsSByte()); @@ -1818,8 +1818,8 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy // B0 = 53 43 52 42 51 41 50 40 13 03 12 02 11 01 10 00 // B1 = 73 63 72 62 71 61 70 60 33 23 32 22 31 21 30 20 - Vector128 b0 = Sse2.UnpackLow(a0, a1); - Vector128 b1 = Sse2.UnpackHigh(a0, a1); + Vector128 b0 = Sse2.UnpackLow(a0.AsSByte(), a1.AsSByte()); + Vector128 b1 = Sse2.UnpackHigh(a0.AsSByte(), a1.AsSByte()); // C0 = 33 23 13 03 32 22 12 02 31 21 11 01 30 20 10 00 // C1 = 73 63 53 43 72 62 52 42 71 61 51 41 70 60 50 40 @@ -1923,7 +1923,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy Vector128 delta = Sse2.PackSignedSaturate(a1Low, a1High); pi = Sse2.AddSaturate(pi.AsSByte(), delta).AsByte(); qi = Sse2.SubtractSaturate(qi.AsSByte(), delta).AsByte(); - pi = Sse2.Xor(pi, SixtyFour.AsByte()); + pi = Sse2.Xor(pi, SignBit.AsByte()); qi = Sse2.Xor(qi, SignBit.AsByte()); }