From 3b66fe3078500b144750a2cf17a714105abf75d3 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Tue, 7 Feb 2017 12:11:22 +1100 Subject: [PATCH] Inline ToVector4() 10ms faster resize benchmark on my machine. --- src/ImageSharp/Colors/Color.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Alpha8.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Argb.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Bgr565.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Bgra4444.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Bgra5551.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/Byte4.cs | 12 ++++-------- src/ImageSharp/Colors/PackedPixel/HalfSingle.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/HalfVector2.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/HalfVector4.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/NormalizedByte2.cs | 2 ++ src/ImageSharp/Colors/PackedPixel/NormalizedByte4.cs | 2 ++ .../Colors/PackedPixel/NormalizedShort2.cs | 2 ++ .../Colors/PackedPixel/NormalizedShort4.cs | 2 ++ 14 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ImageSharp/Colors/Color.cs b/src/ImageSharp/Colors/Color.cs index 036ee14c1..139a68292 100644 --- a/src/ImageSharp/Colors/Color.cs +++ b/src/ImageSharp/Colors/Color.cs @@ -8,6 +8,7 @@ namespace ImageSharp using System; using System.Globalization; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255. @@ -313,6 +314,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.R, this.G, this.B, this.A) / MaxBytes; diff --git a/src/ImageSharp/Colors/PackedPixel/Alpha8.cs b/src/ImageSharp/Colors/PackedPixel/Alpha8.cs index 361fe5b9e..a8e962ac2 100644 --- a/src/ImageSharp/Colors/PackedPixel/Alpha8.cs +++ b/src/ImageSharp/Colors/PackedPixel/Alpha8.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing a single 8 bit normalized W values that is ranging from 0 to 1. @@ -62,6 +63,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(0, 0, 0, this.PackedValue / 255F); diff --git a/src/ImageSharp/Colors/PackedPixel/Argb.cs b/src/ImageSharp/Colors/PackedPixel/Argb.cs index 8ab8e3f43..5478dd9ef 100644 --- a/src/ImageSharp/Colors/PackedPixel/Argb.cs +++ b/src/ImageSharp/Colors/PackedPixel/Argb.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255. @@ -209,6 +210,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.R, this.G, this.B, this.A) / MaxBytes; diff --git a/src/ImageSharp/Colors/PackedPixel/Bgr565.cs b/src/ImageSharp/Colors/PackedPixel/Bgr565.cs index 1f1ce0a17..0bce70363 100644 --- a/src/ImageSharp/Colors/PackedPixel/Bgr565.cs +++ b/src/ImageSharp/Colors/PackedPixel/Bgr565.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing unsigned normalized values ranging from 0 to 1. The x and z components use 5 bits, and the y component uses 6 bits. @@ -84,6 +85,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.ToVector3(), 1F); diff --git a/src/ImageSharp/Colors/PackedPixel/Bgra4444.cs b/src/ImageSharp/Colors/PackedPixel/Bgra4444.cs index 1f33cb791..892a3d4b6 100644 --- a/src/ImageSharp/Colors/PackedPixel/Bgra4444.cs +++ b/src/ImageSharp/Colors/PackedPixel/Bgra4444.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing unsigned normalized values, ranging from 0 to 1, using 4 bits each for x, y, z, and w. @@ -64,6 +65,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { const float Max = 1 / 15F; diff --git a/src/ImageSharp/Colors/PackedPixel/Bgra5551.cs b/src/ImageSharp/Colors/PackedPixel/Bgra5551.cs index d0c52068d..64b506f7b 100644 --- a/src/ImageSharp/Colors/PackedPixel/Bgra5551.cs +++ b/src/ImageSharp/Colors/PackedPixel/Bgra5551.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing unsigned normalized values ranging from 0 to 1. The x , y and z components use 5 bits, and the w component uses 1 bit. @@ -66,6 +67,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4( diff --git a/src/ImageSharp/Colors/PackedPixel/Byte4.cs b/src/ImageSharp/Colors/PackedPixel/Byte4.cs index 69c69ecaf..f15bbd711 100644 --- a/src/ImageSharp/Colors/PackedPixel/Byte4.cs +++ b/src/ImageSharp/Colors/PackedPixel/Byte4.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 8-bit unsigned integer values, ranging from 0 to 255. @@ -66,19 +67,14 @@ namespace ImageSharp return left.PackedValue != right.PackedValue; } - /// - /// Sets the packed representation from a Vector4. - /// - /// The vector to create the packed representation from. + /// public void PackFromVector4(Vector4 vector) { this.PackedValue = Pack(ref vector); } - /// - /// Expands the packed representation into a Vector4. - /// - /// The expanded vector. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4( diff --git a/src/ImageSharp/Colors/PackedPixel/HalfSingle.cs b/src/ImageSharp/Colors/PackedPixel/HalfSingle.cs index 22e32aa56..babb0ab71 100644 --- a/src/ImageSharp/Colors/PackedPixel/HalfSingle.cs +++ b/src/ImageSharp/Colors/PackedPixel/HalfSingle.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing a single 16 bit floating point value. @@ -85,6 +86,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.ToSingle(), 0, 0, 1); diff --git a/src/ImageSharp/Colors/PackedPixel/HalfVector2.cs b/src/ImageSharp/Colors/PackedPixel/HalfVector2.cs index 7c17dcea8..427779700 100644 --- a/src/ImageSharp/Colors/PackedPixel/HalfVector2.cs +++ b/src/ImageSharp/Colors/PackedPixel/HalfVector2.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing two 16-bit floating-point values. @@ -98,6 +99,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { Vector2 vector = this.ToVector2(); diff --git a/src/ImageSharp/Colors/PackedPixel/HalfVector4.cs b/src/ImageSharp/Colors/PackedPixel/HalfVector4.cs index a7f10fc71..227618331 100644 --- a/src/ImageSharp/Colors/PackedPixel/HalfVector4.cs +++ b/src/ImageSharp/Colors/PackedPixel/HalfVector4.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 16-bit floating-point values. @@ -89,6 +90,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4( diff --git a/src/ImageSharp/Colors/PackedPixel/NormalizedByte2.cs b/src/ImageSharp/Colors/PackedPixel/NormalizedByte2.cs index f1dae1066..a6448512b 100644 --- a/src/ImageSharp/Colors/PackedPixel/NormalizedByte2.cs +++ b/src/ImageSharp/Colors/PackedPixel/NormalizedByte2.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed packed pixel type containing two 8-bit signed normalized values, ranging from −1 to 1. @@ -103,6 +104,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.ToVector2(), 0F, 1F); diff --git a/src/ImageSharp/Colors/PackedPixel/NormalizedByte4.cs b/src/ImageSharp/Colors/PackedPixel/NormalizedByte4.cs index 22eba5182..9a42df1a9 100644 --- a/src/ImageSharp/Colors/PackedPixel/NormalizedByte4.cs +++ b/src/ImageSharp/Colors/PackedPixel/NormalizedByte4.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 8-bit signed normalized values, ranging from −1 to 1. @@ -93,6 +94,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4( diff --git a/src/ImageSharp/Colors/PackedPixel/NormalizedShort2.cs b/src/ImageSharp/Colors/PackedPixel/NormalizedShort2.cs index 34b2fc320..7422bb598 100644 --- a/src/ImageSharp/Colors/PackedPixel/NormalizedShort2.cs +++ b/src/ImageSharp/Colors/PackedPixel/NormalizedShort2.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing two 16-bit signed normalized values, ranging from −1 to 1. @@ -91,6 +92,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { return new Vector4(this.ToVector2(), 0, 1); diff --git a/src/ImageSharp/Colors/PackedPixel/NormalizedShort4.cs b/src/ImageSharp/Colors/PackedPixel/NormalizedShort4.cs index 9742a5f34..f3fb0c506 100644 --- a/src/ImageSharp/Colors/PackedPixel/NormalizedShort4.cs +++ b/src/ImageSharp/Colors/PackedPixel/NormalizedShort4.cs @@ -7,6 +7,7 @@ namespace ImageSharp { using System; using System.Numerics; + using System.Runtime.CompilerServices; /// /// Packed pixel type containing four 16-bit signed normalized values, ranging from −1 to 1. @@ -93,6 +94,7 @@ namespace ImageSharp } /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] public Vector4 ToVector4() { const float MaxVal = 0x7FFF;