Skip to content

Commit e5da673

Browse files
committed
Aggressive Optimization
1 parent 750dae9 commit e5da673

13 files changed

Lines changed: 98 additions & 117 deletions

File tree

AssetRipper.TextureDecoder/Astc/AstcDecoder.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -855,19 +855,19 @@ private unsafe static void DecodeIntseq(byte* input, int offset, int a, int b, i
855855
}
856856
}
857857

858-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
858+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
859859
private static uint Color(uint r, uint g, uint b, uint a)
860860
{
861861
return r << 16 | g << 8 | b | a << 24;
862862
}
863863

864-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
864+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
865865
private static byte BitReverseU8(byte c, int bits)
866866
{
867867
return (byte)(BitReverseTable[c] >> (8 - bits));
868868
}
869869

870-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
870+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
871871
private static ulong BitReverseU64(ulong d, int bits)
872872
{
873873
ulong ret;
@@ -886,13 +886,13 @@ private static ulong BitReverseU64(ulong d, int bits)
886886
return ret >> (64 - bits);
887887
}
888888

889-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
889+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
890890
private unsafe static int GetBits(byte* input, int bit, int len)
891891
{
892892
return (*((int*)(input + bit / 8)) >> (bit % 8)) & ((1 << len) - 1);
893893
}
894894

895-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
895+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
896896
private unsafe static ulong GetBits64(byte* input, int bit, int len)
897897
{
898898
ulong mask = len == 64 ? 0xffffffffffffffff : (1UL << len) - 1;
@@ -918,13 +918,13 @@ private unsafe static ulong GetBits64(byte* input, int bit, int len)
918918
}
919919
}
920920

921-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
921+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
922922
private static byte Clamp(int n)
923923
{
924924
return n < 0 ? byte.MinValue : n > 255 ? byte.MaxValue : (byte)n;
925925
}
926926

927-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
927+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
928928
private static unsafe void BitTransferSigned(int* a, int* b)
929929
{
930930
*b = (*b >> 1) | (*a & 0x80);
@@ -935,7 +935,7 @@ private static unsafe void BitTransferSigned(int* a, int* b)
935935
}
936936
}
937937

938-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
938+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
939939
private unsafe static void SetEndpoint(int* endpoint, int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2)
940940
{
941941
endpoint[0] = r1;
@@ -948,7 +948,7 @@ private unsafe static void SetEndpoint(int* endpoint, int r1, int g1, int b1, in
948948
endpoint[7] = a2;
949949
}
950950

951-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
951+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
952952
private unsafe static void SetEndpointClamp(int* endpoint, int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2)
953953
{
954954
endpoint[0] = Clamp(r1);
@@ -961,7 +961,7 @@ private unsafe static void SetEndpointClamp(int* endpoint, int r1, int g1, int b
961961
endpoint[7] = Clamp(a2);
962962
}
963963

964-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
964+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
965965
private unsafe static void SetEndpointBlue(int* endpoint, int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2)
966966
{
967967
endpoint[0] = (r1 + b1) >> 1;
@@ -974,7 +974,7 @@ private unsafe static void SetEndpointBlue(int* endpoint, int r1, int g1, int b1
974974
endpoint[7] = a2;
975975
}
976976

977-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
977+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
978978
private unsafe static void SetEndpointBlueClamp(int* endpoint, int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2)
979979
{
980980
endpoint[0] = Clamp((r1 + b1) >> 1);
@@ -987,7 +987,7 @@ private unsafe static void SetEndpointBlueClamp(int* endpoint, int r1, int g1, i
987987
endpoint[7] = Clamp(a2);
988988
}
989989

990-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
990+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
991991
private static byte SelectColor(int v0, int v1, int weight)
992992
{
993993
return (byte)(((((v0 << 8 | v0) * (64 - weight) + (v1 << 8 | v1) * weight + 32) >> 6) * 255 + 32768) / 65536);

AssetRipper.TextureDecoder/Atc/AtcDecoder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,13 @@ private static void DecodeAtcRgba8Block(ReadOnlySpan<byte> input, Span<uint> out
143143
}
144144
}
145145

146-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
146+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
147147
private static T ReadAtOffset<T>(this ReadOnlySpan<byte> input, int offset) where T : unmanaged
148148
{
149149
return MemoryMarshal.Read<T>(input.Slice(offset));
150150
}
151151

152-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
152+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
153153
private static void DecodeColors(Span<int> colors, int c0, int c1)
154154
{
155155
if ((c0 & 0x8000) == 0)
@@ -190,7 +190,7 @@ private static void DecodeColors(Span<int> colors, int c0, int c1)
190190
}
191191
}
192192

193-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
193+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
194194
private static void DecodeAlphas(Span<int> alphas, int a0, int a1)
195195
{
196196
alphas[0] = a0;
@@ -215,14 +215,14 @@ private static void DecodeAlphas(Span<int> alphas, int a0, int a1)
215215
}
216216
}
217217

218-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
218+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
219219
private static int Extend(int value, int from, int to)
220220
{
221221
// bit-pattern replicating scaling (can at most double the bits)
222222
return (value << (to - from)) | (value >> (from * 2 - to));
223223
}
224224

225-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
225+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
226226
private static uint Color(int r, int g, int b, int a)
227227
{
228228
return unchecked((uint)(r << 16 | g << 8 | b | a << 24));

AssetRipper.TextureDecoder/Dxt/DxtDecoder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public static int DecompressDXT5(ReadOnlySpan<byte> input, int width, int height
251251
return offset;
252252
}
253253

254-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
254+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
255255
private static void Rgb565(int c, out int r, out int g, out int b)
256256
{
257257
r = (c & 0xf800) >> 8;
@@ -262,7 +262,7 @@ private static void Rgb565(int c, out int r, out int g, out int b)
262262
b |= b >> 5;
263263
}
264264

265-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
265+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
266266
private static int Color(int r, int g, int b, int a)
267267
{
268268
return r << 16 | g << 8 | b | a << 24;
@@ -276,19 +276,19 @@ private static int Color(int r, int g, int b, int a)
276276
/// <param name="destination">The destination buffer.</param>
277277
/// <param name="destinationOffset">The zero-based byte offset into destination.</param>
278278
/// <param name="count">The number of bytes to copy.</param>
279-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
279+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
280280
private static void BlockCopy(ReadOnlySpan<byte> source, int sourceOffset, Span<byte> destination, int destinationOffset, int count)
281281
{
282282
source.Slice(sourceOffset, count).CopyTo(destination.Slice(destinationOffset));
283283
}
284284

285-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
285+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
286286
private static uint ToUInt32(ReadOnlySpan<byte> input, int offset)
287287
{
288288
return BinaryPrimitives.ReadUInt32LittleEndian(input.Slice(offset));
289289
}
290290

291-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
291+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
292292
private static ulong ToUInt64(ReadOnlySpan<byte> input, int offset)
293293
{
294294
return BinaryPrimitives.ReadUInt64LittleEndian(input.Slice(offset));

AssetRipper.TextureDecoder/Etc/EtcDecoder.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -640,7 +640,7 @@ private static void DecodeEtc2Block(ReadOnlySpan<byte> input, Span<uint> output)
640640
}
641641
}
642642

643-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
643+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
644644
private static void DecodeEtc2a1Block(ReadOnlySpan<byte> input, Span<uint> output)
645645
{
646646
if ((input[3] & 2) != 0)
@@ -856,7 +856,7 @@ private static void DecodeEacSignedBlock(ReadOnlySpan<byte> input, Span<uint> ou
856856
}
857857
}
858858

859-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
859+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
860860
private static void DecodeEac11Block(Span<byte> output, int @base)
861861
{
862862
for (int i = 0; i < 16; i++)
@@ -865,7 +865,7 @@ private static void DecodeEac11Block(Span<byte> output, int @base)
865865
}
866866
}
867867

868-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
868+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
869869
private static void DecodeEac11Block(Span<byte> output, int @base, int ti, int mul, ulong l)
870870
{
871871
ReadOnlySpan<sbyte> table = Etc2AlphaModTable.AsSpan(ti * 8, 8);
@@ -876,37 +876,37 @@ private static void DecodeEac11Block(Span<byte> output, int @base, int ti, int m
876876
}
877877
}
878878

879-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
879+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
880880
private static uint Color(int r, int g, int b, int a)
881881
{
882882
return unchecked((uint)(r << 16 | g << 8 | b | a << 24));
883883
}
884884

885-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
885+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
886886
private static byte Clamp255(int n)
887887
{
888888
return n < 0 ? (byte)0 : n > 255 ? (byte)255 : unchecked((byte)n);
889889
}
890890

891-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
891+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
892892
private static uint ApplicateColor(ReadOnlySpan<byte> c, int o, int m)
893893
{
894894
return Color(Clamp255(c[o * 3 + 0] + m), Clamp255(c[o * 3 + 1] + m), Clamp255(c[o * 3 + 2] + m), 255);
895895
}
896896

897-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
897+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
898898
private static uint ApplicateColor(ReadOnlySpan<int> c, int o, int m)
899899
{
900900
return Color(Clamp255(c[o * 3 + 0] + m), Clamp255(c[o * 3 + 1] + m), Clamp255(c[o * 3 + 2] + m), 255);
901901
}
902902

903-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
903+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
904904
private static uint ApplicateColorRaw(ReadOnlySpan<byte> c, int o)
905905
{
906906
return Color(c[o * 3 + 0], c[o * 3 + 1], c[o * 3 + 2], 255);
907907
}
908908

909-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
909+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
910910
private static ulong Get6SwapedBytes(ReadOnlySpan<byte> data)
911911
{
912912
return data[7] | (uint)data[6] << 8 | (uint)data[5] << 16 | (uint)data[4] << 24 | (ulong)data[3] << 32 | (ulong)data[2] << 40;

AssetRipper.TextureDecoder/OptimizationConstants.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

AssetRipper.TextureDecoder/Pvrtc/PvrtcDecoder.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public static partial class PvrtcDecoder
1616
/// <param name="output">The decompressed texture data</param>
1717
/// <param name="do2bitMode">Signifies whether the data is PVRTC2 or PVRTC4</param>
1818
/// <returns>The number of bytes read from <paramref name="input"/></returns>
19-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
19+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
2020
public static int DecompressPVRTC(ReadOnlySpan<byte> input, int xDim, int yDim, bool do2bitMode, out byte[] output)
2121
{
2222
output = new byte[xDim * yDim * sizeof(uint)];
@@ -32,7 +32,7 @@ public static int DecompressPVRTC(ReadOnlySpan<byte> input, int xDim, int yDim,
3232
/// <param name="output">The decompressed texture data</param>
3333
/// <param name="do2bitMode">Signifies whether the data is PVRTC2 or PVRTC4</param>
3434
/// <returns>The number of bytes read from <paramref name="input"/></returns>
35-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
35+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
3636
public static int DecompressPVRTC(ReadOnlySpan<byte> input, int xDim, int yDim, bool do2bitMode, Span<byte> output)
3737
{
3838
int xBlockSize = do2bitMode ? BlockX2bpp : BlockX4bpp;
@@ -455,7 +455,7 @@ private static void Unpack5554Colour(AmtcBlock block, Span<int> abColors)
455455
}
456456
}
457457

458-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
458+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
459459
private static Span<int> GetIntSpanForColor(this Span<Colours5554> colorSpan, int index)
460460
{
461461
return MemoryMarshal.Cast<Colours5554, int>(colorSpan.Slice(index, 1));
@@ -466,7 +466,7 @@ private static Span<int> GetIntSpanForColor(this Span<Colours5554> colorSpan, in
466466
/// </summary>
467467
/// <param name="input">A number</param>
468468
/// <returns>True if the number is an integer power of two, else false</returns>
469-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
469+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
470470
private static bool IsPowerOf2(uint input)
471471
{
472472
if (input == 0)
@@ -481,7 +481,7 @@ private static bool IsPowerOf2(uint input)
481481
/// <summary>
482482
/// Define an expression to either wrap or clamp large or small vals to the legal coordinate range
483483
/// </summary>
484-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
484+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
485485
private static int LimitCoord(int value, int size)
486486
{
487487
#if ASSUME_IMAGE_TILING

AssetRipper.TextureDecoder/Rgb/DefaultColorMethods.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{
33
internal static class DefaultColorMethods
44
{
5-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
5+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
66
internal static void GetChannels<T, TArg>(T color, out TArg r, out TArg g, out TArg b, out TArg a)
77
where TArg : unmanaged
88
where T : unmanaged, IColor<TArg>
@@ -13,7 +13,7 @@ internal static void GetChannels<T, TArg>(T color, out TArg r, out TArg g, out T
1313
a = color.A;
1414
}
1515

16-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
16+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
1717
internal static void SetChannels<T, TArg>(ref T color, TArg r, TArg g, TArg b, TArg a)
1818
where TArg : unmanaged
1919
where T : unmanaged, IColor<TArg>

AssetRipper.TextureDecoder/Rgb/Formats/ColorRGB9e5.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public readonly double A
4343
set { }
4444
}
4545

46-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
46+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
4747
public readonly void GetChannels(out double r, out double g, out double b, out double a)
4848
{
4949
double scale = Scale;
@@ -53,13 +53,13 @@ public readonly void GetChannels(out double r, out double g, out double b, out d
5353
a = 1;
5454
}
5555

56-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
56+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
5757
public void SetChannels(double r, double g, double b, double a)
5858
{
5959
SetChannels(r, g, b);
6060
}
6161

62-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
62+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
6363
public void SetChannels(double r, double g, double b)
6464
{
6565
int exponent = CalculateExponent(r, g, b);
@@ -80,7 +80,7 @@ public void SetChannels(double r, double g, double b)
8080
private readonly uint GBits => (bits >> GreenOffset) & ChannelBitMask;
8181
private readonly uint BBits => (bits >> BlueOffset) & ChannelBitMask;
8282

83-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
83+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
8484
private static int CalculateExponent(double r, double g, double b)
8585
{
8686
double maxChannel = double.Max(r, double.Max(g, b));

AssetRipper.TextureDecoder/Rgb/IColor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public interface IColor<T> where T : unmanaged
6868

6969
public static class ColorExtensions
7070
{
71-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
71+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
7272
internal static void SetConvertedChannels<TThis, TThisArg, TSourceArg>(this ref TThis color, TSourceArg r, TSourceArg g, TSourceArg b, TSourceArg a)
7373
where TThisArg : unmanaged
7474
where TSourceArg : unmanaged
@@ -81,7 +81,7 @@ internal static void SetConvertedChannels<TThis, TThisArg, TSourceArg>(this ref
8181
NumericConversion.Convert<TSourceArg, TThisArg>(a));
8282
}
8383

84-
[MethodImpl(OptimizationConstants.AggressiveInliningAndOptimization)]
84+
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
8585
public static TTarget Convert<TThis, TThisArg, TTarget, TTargetArg>(this TThis color)
8686
where TThisArg : unmanaged
8787
where TTargetArg : unmanaged

0 commit comments

Comments
 (0)