From 97c084979e5381bbead922093f0d3b2be6735b35 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Thu, 13 Apr 2017 02:39:19 +0200 Subject: [PATCH] fixed ToVector4SimdAligned() --- src/ImageSharp/Colors/Color.BulkOperations.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Colors/Color.BulkOperations.cs b/src/ImageSharp/Colors/Color.BulkOperations.cs index d5c55ba81..d80941615 100644 --- a/src/ImageSharp/Colors/Color.BulkOperations.cs +++ b/src/ImageSharp/Colors/Color.BulkOperations.cs @@ -64,18 +64,20 @@ namespace ImageSharp ref uint src = ref Unsafe.As(ref sourceColors.DangerousGetPinnableReference()); - using (PinnedBuffer tempBuf = new PinnedBuffer(unpackedRawCount + Vector.Count)) + using (PinnedBuffer tempBuf = new PinnedBuffer( + unpackedRawCount + Vector.Count)) { uint* tPtr = (uint*)tempBuf.Pointer; uint[] temp = tempBuf.Array; float[] fTemp = Unsafe.As(temp); UnpackedRGBA* dst = (UnpackedRGBA*)tPtr; - for (int i = 0; i < count; i++) + for (int i = 0; i < count; i++, dst++) { + uint sVal = Unsafe.Add(ref src, i); + // This call is the bottleneck now: - ref uint sp = ref Unsafe.Add(ref src, i); - dst->Load(sp); + dst->Load(sVal); } for (int i = 0; i < unpackedRawCount; i += vecSize) @@ -90,7 +92,7 @@ namespace ImageSharp vf.CopyTo(fTemp, i); } - BufferSpan.Copy(tempBuf.Span.AsBytes(), destVectors.AsBytes(), unpackedRawCount); + BufferSpan.Copy(tempBuf.Span.AsBytes(), destVectors.AsBytes(), unpackedRawCount * sizeof(uint)); } }