|
|
|
@ -81,7 +81,7 @@ namespace SixLabors.ImageSharp.Benchmarks.ColorSpaces.Bulk |
|
|
|
Span<float> sBytes = MemoryMarshal.Cast<Vector4, float>(this.source.GetSpan()); |
|
|
|
Span<byte> dFloats = MemoryMarshal.Cast<Rgba32, byte>(this.destination.GetSpan()); |
|
|
|
|
|
|
|
SimdUtils.FallbackIntrinsics128.BulkConvertNormalizedFloatToByteClampOverflows(sBytes, dFloats); |
|
|
|
SimdUtils.FallbackIntrinsics128.NormalizedFloatToByteSaturate(sBytes, dFloats); |
|
|
|
} |
|
|
|
|
|
|
|
[Benchmark] |
|
|
|
@ -90,7 +90,7 @@ namespace SixLabors.ImageSharp.Benchmarks.ColorSpaces.Bulk |
|
|
|
Span<float> sBytes = MemoryMarshal.Cast<Vector4, float>(this.source.GetSpan()); |
|
|
|
Span<byte> dFloats = MemoryMarshal.Cast<Rgba32, byte>(this.destination.GetSpan()); |
|
|
|
|
|
|
|
SimdUtils.BasicIntrinsics256.BulkConvertNormalizedFloatToByteClampOverflows(sBytes, dFloats); |
|
|
|
SimdUtils.BasicIntrinsics256.NormalizedFloatToByteSaturate(sBytes, dFloats); |
|
|
|
} |
|
|
|
|
|
|
|
[Benchmark(Baseline = true)] |
|
|
|
@ -99,7 +99,7 @@ namespace SixLabors.ImageSharp.Benchmarks.ColorSpaces.Bulk |
|
|
|
Span<float> sBytes = MemoryMarshal.Cast<Vector4, float>(this.source.GetSpan()); |
|
|
|
Span<byte> dFloats = MemoryMarshal.Cast<Rgba32, byte>(this.destination.GetSpan()); |
|
|
|
|
|
|
|
SimdUtils.ExtendedIntrinsics.BulkConvertNormalizedFloatToByteClampOverflows(sBytes, dFloats); |
|
|
|
SimdUtils.ExtendedIntrinsics.NormalizedFloatToByteSaturate(sBytes, dFloats); |
|
|
|
} |
|
|
|
|
|
|
|
#if SUPPORTS_RUNTIME_INTRINSICS
|
|
|
|
@ -109,7 +109,7 @@ namespace SixLabors.ImageSharp.Benchmarks.ColorSpaces.Bulk |
|
|
|
Span<float> sBytes = MemoryMarshal.Cast<Vector4, float>(this.source.GetSpan()); |
|
|
|
Span<byte> dFloats = MemoryMarshal.Cast<Rgba32, byte>(this.destination.GetSpan()); |
|
|
|
|
|
|
|
SimdUtils.Avx2Intrinsics.BulkConvertNormalizedFloatToByteClampOverflows(sBytes, dFloats); |
|
|
|
SimdUtils.Avx2Intrinsics.NormalizedFloatToByteSaturate(sBytes, dFloats); |
|
|
|
} |
|
|
|
|
|
|
|
private static ReadOnlySpan<byte> PermuteMaskDeinterleave8x32 => new byte[] { 0, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0, 5, 0, 0, 0, 2, 0, 0, 0, 6, 0, 0, 0, 3, 0, 0, 0, 7, 0, 0, 0 }; |
|
|
|
|