Browse Source

Relax criteria for Shuffle3

af/UniformUnmanagedMemoryPoolMemoryAllocator-02-MemoryGuards
Anton Firszov 4 years ago
parent
commit
c7c0561ba5
  1. 4
      src/ImageSharp/Common/Helpers/Shuffle/IComponentShuffle.cs
  2. 5
      src/ImageSharp/Common/Helpers/SimdUtils.Shuffle.cs

4
src/ImageSharp/Common/Helpers/Shuffle/IComponentShuffle.cs

@ -28,6 +28,10 @@ namespace SixLabors.ImageSharp
/// </summary> /// </summary>
/// <param name="source">The source span of bytes.</param> /// <param name="source">The source span of bytes.</param>
/// <param name="dest">The destination span of bytes.</param> /// <param name="dest">The destination span of bytes.</param>
/// <remarks>
/// Implementation can assume that source.Length is less or equal than dest.Length.
/// Loops should iterate using source.Length.
/// </remarks>
void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest); void RunFallbackShuffle(ReadOnlySpan<byte> source, Span<byte> dest);
} }

5
src/ImageSharp/Common/Helpers/SimdUtils.Shuffle.cs

@ -77,6 +77,7 @@ namespace SixLabors.ImageSharp
TShuffle shuffle) TShuffle shuffle)
where TShuffle : struct, IShuffle3 where TShuffle : struct, IShuffle3
{ {
// Source length should be smaller than dest length, and divisible by 3.
VerifyShuffle3SpanInput(source, dest); VerifyShuffle3SpanInput(source, dest);
#if SUPPORTS_RUNTIME_INTRINSICS #if SUPPORTS_RUNTIME_INTRINSICS
@ -182,9 +183,9 @@ namespace SixLabors.ImageSharp
where T : struct where T : struct
{ {
DebugGuard.IsTrue( DebugGuard.IsTrue(
source.Length == dest.Length, source.Length <= dest.Length,
nameof(source), nameof(source),
"Input spans must be of same length!"); "Source should fit into dest!");
DebugGuard.IsTrue( DebugGuard.IsTrue(
source.Length % 3 == 0, source.Length % 3 == 0,

Loading…
Cancel
Save