diff --git a/src/ImageSharp/PixelFormats/Rgba32.PixelOperations.cs b/src/ImageSharp/PixelFormats/Rgba32.PixelOperations.cs index 63fbdcae55..fd94a3592f 100644 --- a/src/ImageSharp/PixelFormats/Rgba32.PixelOperations.cs +++ b/src/ImageSharp/PixelFormats/Rgba32.PixelOperations.cs @@ -44,13 +44,11 @@ namespace ImageSharp if (!Vector.IsHardwareAccelerated) { throw new InvalidOperationException( - "Rgba32.BulkOperations.ToVector4SimdAligned() should not be called when Vector.IsHardwareAccelerated == false!"); + "Rgba32.PixelOperations.ToVector4SimdAligned() should not be called when Vector.IsHardwareAccelerated == false!"); } - int vecSize = Vector.Count; - DebugGuard.IsTrue( - count % vecSize == 0, + count % Vector.Count == 0, nameof(count), "Argument 'count' should divisible by Vector.Count!"); @@ -61,25 +59,25 @@ namespace ImageSharp int unpackedRawCount = count * 4; - ref uint bSource = ref Unsafe.As(ref sourceColors.DangerousGetPinnableReference()); - ref UnpackedRGBA bDestUnpacked = ref Unsafe.As(ref destVectors.DangerousGetPinnableReference()); - ref Vector bDestUint = ref Unsafe.As>(ref bDestUnpacked); - ref Vector bDestFloat = ref Unsafe.As>(ref bDestUnpacked); + ref uint sourceBase = ref Unsafe.As(ref sourceColors.DangerousGetPinnableReference()); + ref UnpackedRGBA destBaseAsUnpacked = ref Unsafe.As(ref destVectors.DangerousGetPinnableReference()); + ref Vector destBaseAsUInt = ref Unsafe.As>(ref destBaseAsUnpacked); + ref Vector destBaseAsFloat = ref Unsafe.As>(ref destBaseAsUnpacked); for (int i = 0; i < count; i++) { - uint sVal = Unsafe.Add(ref bSource, i); - ref UnpackedRGBA dst = ref Unsafe.Add(ref bDestUnpacked, i); + uint sVal = Unsafe.Add(ref sourceBase, i); + ref UnpackedRGBA dst = ref Unsafe.Add(ref destBaseAsUnpacked, i); // This call is the bottleneck now: dst.Load(sVal); } - int n = unpackedRawCount / vecSize; + int numOfVectors = unpackedRawCount / Vector.Count; - for (int i = 0; i < n; i++) + for (int i = 0; i < numOfVectors; i++) { - Vector vi = Unsafe.Add(ref bDestUint, i); + Vector vi = Unsafe.Add(ref destBaseAsUInt, i); vi &= mask; vi |= magicInt; @@ -87,7 +85,7 @@ namespace ImageSharp Vector vf = Vector.AsVectorSingle(vi); vf = (vf - magicFloat) * bVec; - Unsafe.Add(ref bDestFloat, i) = vf; + Unsafe.Add(ref destBaseAsFloat, i) = vf; } }