Browse Source

Drop FromGrayscaleVector8

js/color-alpha-handling
Nicolas Portmann 5 years ago
parent
commit
680459ca54
  1. 53
      src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleVector8.cs
  2. 1
      src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs
  3. 8
      tests/ImageSharp.Benchmarks/Codecs/Jpeg/GrayscaleColorConversion.cs
  4. 18
      tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

53
src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.FromGrayScaleVector8.cs

@ -1,53 +0,0 @@
// Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0.
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using SixLabors.ImageSharp.Tuples;
namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters
{
internal abstract partial class JpegColorConverter
{
internal sealed class FromGrayscaleVector8 : Vector8JpegColorConverter
{
public FromGrayscaleVector8(int precision)
: base(JpegColorSpace.Grayscale, precision)
{
}
protected override void ConvertCoreVectorized(in ComponentValues values, Span<Vector4> result)
{
ref Vector<float> gBase =
ref Unsafe.As<float, Vector<float>>(ref MemoryMarshal.GetReference(values.Component0));
ref Vector4Octet resultBase =
ref Unsafe.As<Vector4, Vector4Octet>(ref MemoryMarshal.GetReference(result));
Vector4Pair gg = default;
ref Vector<float> ggRefAsVector = ref Unsafe.As<Vector4Pair, Vector<float>>(ref gg);
var scale = new Vector<float>(1 / this.MaximumValue);
// Walking 8 elements at one step:
int n = result.Length / 8;
for (int i = 0; i < n; i++)
{
Vector<float> g = Unsafe.Add(ref gBase, i);
g *= scale;
ggRefAsVector = g;
// Collect (g0,g1...g7) vector values in the expected (g0,g0,g0,1), (g1,g1,g1,1) ... order:
ref Vector4Octet destination = ref Unsafe.Add(ref resultBase, i);
destination.Pack(ref gg);
}
}
protected override void ConvertCore(in ComponentValues values, Span<Vector4> result) =>
FromGrayscaleBasic.ConvertCore(values, result, this.MaximumValue);
}
}
}

1
src/ImageSharp/Formats/Jpeg/Components/Decoder/ColorConverters/JpegColorConverter.cs

@ -141,7 +141,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder.ColorConverters
private static IEnumerable<JpegColorConverter> GetGrayScaleConverters(int precision)
{
yield return new FromGrayscaleAvx2(precision);
yield return new FromGrayscaleVector8(precision);
yield return new FromGrayscaleBasic(precision);
}

8
tests/ImageSharp.Benchmarks/Codecs/Jpeg/GrayscaleColorConversion.cs

@ -19,14 +19,6 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
new JpegColorConverter.FromGrayscaleBasic(8).ConvertToRgba(values, this.output);
}
[Benchmark]
public void SimdVector8()
{
var values = new JpegColorConverter.ComponentValues(this.input, 0);
new JpegColorConverter.FromGrayscaleVector8(8).ConvertToRgba(values, this.output);
}
[Benchmark]
public void SimdVectorAvx2()
{

18
tests/ImageSharp.Tests/Formats/Jpg/JpegColorConverterTests.cs

@ -184,24 +184,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
seed);
}
[Theory]
[MemberData(nameof(CommonConversionData))]
public void FromGrayscaleVector8(int inputBufferLength, int resultBufferLength, int seed)
{
if (!SimdUtils.HasVector8)
{
this.Output.WriteLine("No AVX2 present, skipping test!");
return;
}
ValidateConversion(
new JpegColorConverter.FromGrayscaleVector8(8),
1,
inputBufferLength,
resultBufferLength,
seed);
}
[Theory]
[MemberData(nameof(CommonConversionData))]
public void FromGrayscaleAvx2(int inputBufferLength, int resultBufferLength, int seed)

Loading…
Cancel
Save