diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index acd93e09e..f8cb6c56b 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -729,7 +729,7 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache ShaderProgram program = translatorContext.Translate(); - CachedShaderStage[] shaders = [new CachedShaderStage(program.Info, shader.Code, shader.Cb1Data)]; + CachedShaderStage[] shaders = [new(program.Info, shader.Code, shader.Cb1Data)]; _compilationQueue.Enqueue(new ProgramCompilation([program], shaders, newSpecState, programIndex, isCompute: true)); } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Common/MemoryAllocator.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Common/MemoryAllocator.cs index 2dda25ac0..6d108d86e 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Common/MemoryAllocator.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Common/MemoryAllocator.cs @@ -59,7 +59,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Common } } - ArrayPtr allocation = new ArrayPtr(ptr, length); + ArrayPtr allocation = new(ptr, length); allocation.AsSpan().Fill(default); diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/DSubExp.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/DSubExp.cs index cac1b67f6..72cfba8f3 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/DSubExp.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/DSubExp.cs @@ -14,8 +14,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return (v & 1) != 0 ? m - ((v + 1) >> 1) : m + (v >> 1); } - private static readonly byte[] InvMapTable = - { + private static readonly byte[] _invMapTable = + [ 7, 20, 33, 46, 59, 72, 85, 98, 111, 124, 137, 150, 163, 176, 189, 202, 215, 228, 241, 254, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, @@ -28,13 +28,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 206, 207, 208, 209, 210, 211, 212, 213, 214, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 253 - }; + ]; public static int InvRemapProb(int v, int m) { - Debug.Assert(v < InvMapTable.Length / sizeof(byte)); + Debug.Assert(v < _invMapTable.Length / sizeof(byte)); - v = InvMapTable[v]; + v = _invMapTable[v]; m--; if (m << 1 <= Prob.MaxProb) { diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeFrame.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeFrame.cs index e61c9567e..3e7d6b030 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeFrame.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeFrame.cs @@ -111,23 +111,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 Span dst16 = MemoryMarshal.Cast(dst); if (xd.Lossless) { - Idct.HighbdIwht4x4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + Idct.HighbdIwht4X4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); } else { switch (txSize) { - case TxSize.Tx4x4: - Idct.HighbdIdct4x4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx4X4: + Idct.HighbdIdct4X4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx8x8: - Idct.HighbdIdct8x8Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx8X8: + Idct.HighbdIdct8X8Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx16x16: - Idct.HighbdIdct16x16Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx16X16: + Idct.HighbdIdct16X16Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx32x32: - Idct.HighbdIdct32x32Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx32X32: + Idct.HighbdIdct32X32Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; default: Debug.Assert(false, "Invalid transform size"); @@ -139,23 +139,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { if (xd.Lossless) { - Idct.Iwht4x4Add(dqcoeff.AsSpan(), dst, stride, eob); + Idct.Iwht4X4Add(dqcoeff.AsSpan(), dst, stride, eob); } else { switch (txSize) { - case TxSize.Tx4x4: - Idct.Idct4x4Add(dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx4X4: + Idct.Idct4X4Add(dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx8x8: - Idct.Idct8x8Add(dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx8X8: + Idct.Idct8X8Add(dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx16x16: - Idct.Idct16x16Add(dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx16X16: + Idct.Idct16X16Add(dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx32x32: - Idct.Idct32x32Add(dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx32X32: + Idct.Idct32X32Add(dqcoeff.AsSpan(), dst, stride, eob); break; default: Debug.Assert(false, "Invalid transform size"); @@ -170,11 +170,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - if (txSize <= TxSize.Tx16x16 && eob <= 10) + if (txSize <= TxSize.Tx16X16 && eob <= 10) { dqcoeff.AsSpan().Slice(0, 4 * (4 << (int)txSize)).Clear(); } - else if (txSize == TxSize.Tx32x32 && eob <= 34) + else if (txSize == TxSize.Tx32X32 && eob <= 34) { dqcoeff.AsSpan().Slice(0, 256).Clear(); } @@ -202,23 +202,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 Span dst16 = MemoryMarshal.Cast(dst); if (xd.Lossless) { - Idct.HighbdIwht4x4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + Idct.HighbdIwht4X4Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); } else { switch (txSize) { - case TxSize.Tx4x4: - Idct.HighbdIht4x4Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx4X4: + Idct.HighbdIht4X4Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx8x8: - Idct.HighbdIht8x8Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx8X8: + Idct.HighbdIht8X8Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx16x16: - Idct.HighbdIht16x16Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx16X16: + Idct.HighbdIht16X16Add(txType, dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; - case TxSize.Tx32x32: - Idct.HighbdIdct32x32Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); + case TxSize.Tx32X32: + Idct.HighbdIdct32X32Add(dqcoeff.AsSpan(), dst16, stride, eob, xd.Bd); break; default: Debug.Assert(false, "Invalid transform size"); @@ -230,23 +230,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { if (xd.Lossless) { - Idct.Iwht4x4Add(dqcoeff.AsSpan(), dst, stride, eob); + Idct.Iwht4X4Add(dqcoeff.AsSpan(), dst, stride, eob); } else { switch (txSize) { - case TxSize.Tx4x4: - Idct.Iht4x4Add(txType, dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx4X4: + Idct.Iht4X4Add(txType, dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx8x8: - Idct.Iht8x8Add(txType, dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx8X8: + Idct.Iht8X8Add(txType, dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx16x16: - Idct.Iht16x16Add(txType, dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx16X16: + Idct.Iht16X16Add(txType, dqcoeff.AsSpan(), dst, stride, eob); break; - case TxSize.Tx32x32: - Idct.Idct32x32Add(dqcoeff.AsSpan(), dst, stride, eob); + case TxSize.Tx32X32: + Idct.Idct32X32Add(dqcoeff.AsSpan(), dst, stride, eob); break; default: Debug.Assert(false, "Invalid transform size"); @@ -261,11 +261,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - if (txType == TxType.DctDct && txSize <= TxSize.Tx16x16 && eob <= 10) + if (txType == TxType.DctDct && txSize <= TxSize.Tx16X16 && eob <= 10) { dqcoeff.AsSpan().Slice(0, 4 * (4 << (int)txSize)).Clear(); } - else if (txSize == TxSize.Tx32x32 && eob <= 34) + else if (txSize == TxSize.Tx32X32 && eob <= 34) { dqcoeff.AsSpan().Slice(0, 256).Clear(); } @@ -291,7 +291,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 byte* dst = &pd.Dst.Buf.ToPointer()[dstOffset]; Span dstSpan = pd.Dst.Buf.AsSpan().Slice(dstOffset); - if (mi.SbType < BlockSize.Block8x8) + if (mi.SbType < BlockSize.Block8X8) { if (plane == 0) { @@ -769,21 +769,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 isScaled ? new Ptr(ref sf) : Ptr.Null); xd.BlockRefs[refr] = new Ptr(ref refBuf); - if (sbType < BlockSize.Block8x8) + if (sbType < BlockSize.Block8X8) { for (plane = 0; plane < Constants.MaxMbPlane; ++plane) { ref MacroBlockDPlane pd = ref xd.Plane[plane]; ref Buf2D dstBuf = ref pd.Dst; - int num4x4W = pd.N4W; - int num4x4H = pd.N4H; - int n4Wx4 = 4 * num4x4W; - int n4Hx4 = 4 * num4x4H; + int num4X4W = pd.N4W; + int num4X4H = pd.N4H; + int n4Wx4 = 4 * num4X4W; + int n4Hx4 = 4 * num4X4H; ref Buf2D preBuf = ref pd.Pre[refr]; int i = 0; - for (int y = 0; y < num4x4H; ++y) + for (int y = 0; y < num4X4H; ++y) { - for (int x = 0; x < num4x4W; ++x) + for (int x = 0; x < num4X4W; ++x) { Mv mv = ReconInter.AverageSplitMvs(ref pd, ref mi, refr, i++); DecBuildInterPredictors( @@ -816,10 +816,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { ref MacroBlockDPlane pd = ref xd.Plane[plane]; ref Buf2D dstBuf = ref pd.Dst; - int num4x4W = pd.N4W; - int num4x4H = pd.N4H; - int n4Wx4 = 4 * num4x4W; - int n4Hx4 = 4 * num4x4H; + int num4X4W = pd.N4W; + int num4X4H = pd.N4H; + int n4Wx4 = 4 * num4X4W; + int n4Hx4 = 4 * num4X4H; ref Buf2D preBuf = ref pd.Pre[refr]; DecBuildInterPredictors( ref xd, @@ -905,7 +905,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int bwl, int bhl) { - bool less8x8 = bsize < BlockSize.Block8x8; + bool less8X8 = bsize < BlockSize.Block8X8; int bw = 1 << (bwl - 1); int bh = 1 << (bhl - 1); int xMis = Math.Min(bw, cm.MiCols - miCol); @@ -915,7 +915,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ref ModeInfo mi = ref SetOffsets(ref cm, ref xd, bsize, miRow, miCol, bw, bh, xMis, yMis, bwl, bhl); - if (bsize >= BlockSize.Block8x8 && (cm.SubsamplingX != 0 || cm.SubsamplingY != 0)) + if (bsize >= BlockSize.Block8X8 && (cm.SubsamplingX != 0 || cm.SubsamplingY != 0)) { BlockSize uvSubsize = Luts.SsSizeLookup[(int)bsize][cm.SubsamplingX][cm.SubsamplingY]; if (uvSubsize == BlockSize.BlockInvalid) @@ -938,14 +938,14 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { ref MacroBlockDPlane pd = ref xd.Plane[plane]; TxSize txSize = plane != 0 ? mi.GetUvTxSize(ref pd) : mi.TxSize; - int num4x4W = pd.N4W; - int num4x4H = pd.N4H; + int num4X4W = pd.N4W; + int num4X4H = pd.N4H; int step = 1 << (int)txSize; int row, col; int maxBlocksWide = - num4x4W + (xd.MbToRightEdge >= 0 ? 0 : xd.MbToRightEdge >> (5 + pd.SubsamplingX)); + num4X4W + (xd.MbToRightEdge >= 0 ? 0 : xd.MbToRightEdge >> (5 + pd.SubsamplingX)); int maxBlocksHigh = - num4x4H + (xd.MbToBottomEdge >= 0 ? 0 : xd.MbToBottomEdge >> (5 + pd.SubsamplingY)); + num4X4H + (xd.MbToBottomEdge >= 0 ? 0 : xd.MbToBottomEdge >> (5 + pd.SubsamplingY)); xd.MaxBlocksWide = (uint)(xd.MbToRightEdge >= 0 ? 0 : maxBlocksWide); xd.MaxBlocksHigh = (uint)(xd.MbToBottomEdge >= 0 ? 0 : maxBlocksHigh); @@ -974,13 +974,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { ref MacroBlockDPlane pd = ref xd.Plane[plane]; TxSize txSize = plane != 0 ? mi.GetUvTxSize(ref pd) : mi.TxSize; - int num4x4W = pd.N4W; - int num4x4H = pd.N4H; + int num4X4W = pd.N4W; + int num4X4H = pd.N4H; int step = 1 << (int)txSize; int row, col; int maxBlocksWide = - num4x4W + (xd.MbToRightEdge >= 0 ? 0 : xd.MbToRightEdge >> (5 + pd.SubsamplingX)); - int maxBlocksHigh = num4x4H + + num4X4W + (xd.MbToRightEdge >= 0 ? 0 : xd.MbToRightEdge >> (5 + pd.SubsamplingX)); + int maxBlocksHigh = num4X4H + (xd.MbToBottomEdge >= 0 ? 0 : xd.MbToBottomEdge >> (5 + pd.SubsamplingY)); xd.MaxBlocksWide = (uint)(xd.MbToRightEdge >= 0 ? 0 : maxBlocksWide); @@ -995,7 +995,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - if (!less8x8 && eobtotal == 0) + if (!less8X8 && eobtotal == 0) { mi.Skip = 1; // Skip loopfilter } @@ -1072,11 +1072,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int miRow, int miCol, BlockSize bsize, - int n4x4L2) + int n4X4L2) { - int n8x8L2 = n4x4L2 - 1; - int num8x8Wh = 1 << n8x8L2; - int hbs = num8x8Wh >> 1; + int n8X8L2 = n4X4L2 - 1; + int num8X8Wh = 1 << n8X8L2; + int hbs = num8X8Wh >> 1; PartitionType partition; BlockSize subsize; bool hasRows = miRow + hbs < cm.MiRows; @@ -1088,7 +1088,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return; } - partition = ReadPartition(ref twd, miRow, miCol, hasRows ? 1 : 0, hasCols ? 1 : 0, n8x8L2); + partition = ReadPartition(ref twd, miRow, miCol, hasRows ? 1 : 0, hasCols ? 1 : 0, n8X8L2); subsize = Luts.SubsizeLookup[(int)partition][(int)bsize]; if (hbs == 0) { @@ -1102,29 +1102,29 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 switch (partition) { case PartitionType.PartitionNone: - DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n4x4L2, n4x4L2); + DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n4X4L2, n4X4L2); break; case PartitionType.PartitionHorz: - DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n4x4L2, n8x8L2); + DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n4X4L2, n8X8L2); if (hasRows) { - DecodeBlock(ref twd, ref cm, miRow + hbs, miCol, subsize, n4x4L2, n8x8L2); + DecodeBlock(ref twd, ref cm, miRow + hbs, miCol, subsize, n4X4L2, n8X8L2); } break; case PartitionType.PartitionVert: - DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n8x8L2, n4x4L2); + DecodeBlock(ref twd, ref cm, miRow, miCol, subsize, n8X8L2, n4X4L2); if (hasCols) { - DecodeBlock(ref twd, ref cm, miRow, miCol + hbs, subsize, n8x8L2, n4x4L2); + DecodeBlock(ref twd, ref cm, miRow, miCol + hbs, subsize, n8X8L2, n4X4L2); } break; case PartitionType.PartitionSplit: - DecodePartition(ref twd, ref cm, miRow, miCol, subsize, n8x8L2); - DecodePartition(ref twd, ref cm, miRow, miCol + hbs, subsize, n8x8L2); - DecodePartition(ref twd, ref cm, miRow + hbs, miCol, subsize, n8x8L2); - DecodePartition(ref twd, ref cm, miRow + hbs, miCol + hbs, subsize, n8x8L2); + DecodePartition(ref twd, ref cm, miRow, miCol, subsize, n8X8L2); + DecodePartition(ref twd, ref cm, miRow, miCol + hbs, subsize, n8X8L2); + DecodePartition(ref twd, ref cm, miRow + hbs, miCol, subsize, n8X8L2); + DecodePartition(ref twd, ref cm, miRow + hbs, miCol + hbs, subsize, n8X8L2); break; default: Debug.Assert(false, "Invalid partition type"); @@ -1133,10 +1133,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Update partition context - if (bsize >= BlockSize.Block8x8 && - (bsize == BlockSize.Block8x8 || partition != PartitionType.PartitionSplit)) + if (bsize >= BlockSize.Block8X8 && + (bsize == BlockSize.Block8X8 || partition != PartitionType.PartitionSplit)) { - DecUpdatePartitionContext(ref twd, miRow, miCol, subsize, num8x8Wh); + DecUpdatePartitionContext(ref twd, miRow, miCol, subsize, num8X8Wh); } } @@ -1186,7 +1186,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 private static void ReadCoefProbs(ref Vp9EntropyProbs fc, TxMode txMode, ref Reader r) { int maxTxSize = (int)Luts.TxModeToBiggestTxSize[(int)txMode]; - for (int txSize = (int)TxSize.Tx4x4; txSize <= maxTxSize; ++txSize) + for (int txSize = (int)TxSize.Tx4X4; txSize <= maxTxSize; ++txSize) { ReadCoefProbsCommon(ref fc.CoefProbs[txSize], ref r, txSize); } @@ -1238,16 +1238,16 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 xd.Bd = (int)cm.BitDepth; } - private static readonly byte[] LiteralToFilter = - { + private static readonly byte[] _literalToFilter = + [ Constants.EightTapSmooth, Constants.EightTap, Constants.EightTapSharp, Constants.Bilinear - }; + ]; private static byte ReadInterpFilter(ref ReadBitBuffer rb) { return rb.ReadBit() != 0 ? (byte)Constants.Switchable - : LiteralToFilter[rb.ReadLiteral(2)]; + : _literalToFilter[rb.ReadLiteral(2)]; } private static void SetupRenderSize(ref Vp9Common cm, ref ReadBitBuffer rb) @@ -1519,7 +1519,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 tileData.Xd.LeftSegContext = new Array8(); for (miCol = tile.MiColStart; miCol < tile.MiColEnd; miCol += Constants.MiBlockSize) { - DecodePartition(ref tileData, ref cm, miRow, miCol, BlockSize.Block64x64, 4); + DecodePartition(ref tileData, ref cm, miRow, miCol, BlockSize.Block64X64, 4); } cm.Mb.Corrupted |= tileData.Xd.Corrupted; @@ -1563,7 +1563,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 tileData.Xd.LeftSegContext = new Array8(); for (int miCol = tile.MiColStart; miCol < tile.MiColEnd; miCol += Constants.MiBlockSize) { - DecodePartition(ref tileData, ref cm, miRow, miCol, BlockSize.Block64x64, 4); + DecodePartition(ref tileData, ref cm, miRow, miCol, BlockSize.Block64X64, 4); } } @@ -1990,7 +1990,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 cm.Error.InternalError(CodecErr.MemError, "Failed to allocate bool decoder 0"); } - cm.TxMode = xd.Lossless ? TxMode.Only4x4 : r.ReadTxMode(); + cm.TxMode = xd.Lossless ? TxMode.Only4X4 : r.ReadTxMode(); if (cm.TxMode == TxMode.TxModeSelect) { ReadTxModeProbs(ref fc, ref r); diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeMv.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeMv.cs index b77a602b6..8b7ad4de1 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeMv.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/DecodeMv.cs @@ -59,9 +59,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { switch (maxTxSize) { - case TxSize.Tx8x8: return fc.Tx8x8Prob[ctx].AsSpan(); - case TxSize.Tx16x16: return fc.Tx16x16Prob[ctx].AsSpan(); - case TxSize.Tx32x32: return fc.Tx32x32Prob[ctx].AsSpan(); + case TxSize.Tx8X8: return fc.Tx8x8Prob[ctx].AsSpan(); + case TxSize.Tx16X16: return fc.Tx16x16Prob[ctx].AsSpan(); + case TxSize.Tx32X32: return fc.Tx32x32Prob[ctx].AsSpan(); default: Debug.Assert(false, "Invalid maxTxSize."); return ReadOnlySpan.Empty; @@ -72,9 +72,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { switch (maxTxSize) { - case TxSize.Tx8x8: return counts.Tx8x8[ctx].AsSpan(); - case TxSize.Tx16x16: return counts.Tx16x16[ctx].AsSpan(); - case TxSize.Tx32x32: return counts.Tx32x32[ctx].AsSpan(); + case TxSize.Tx8X8: return counts.Tx8x8[ctx].AsSpan(); + case TxSize.Tx16X16: return counts.Tx16x16[ctx].AsSpan(); + case TxSize.Tx32X32: return counts.Tx32x32[ctx].AsSpan(); default: Debug.Assert(false, "Invalid maxTxSize."); return Span.Empty; @@ -86,10 +86,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int ctx = xd.GetTxSizeContext(); ReadOnlySpan txProbs = GetTxProbs(ref cm.Fc.Value, maxTxSize, ctx); TxSize txSize = (TxSize)r.Read(txProbs[0]); - if (txSize != TxSize.Tx4x4 && maxTxSize >= TxSize.Tx16x16) + if (txSize != TxSize.Tx4X4 && maxTxSize >= TxSize.Tx16X16) { txSize += r.Read(txProbs[1]); - if (txSize != TxSize.Tx8x8 && maxTxSize >= TxSize.Tx32x32) + if (txSize != TxSize.Tx8X8 && maxTxSize >= TxSize.Tx32X32) { txSize += r.Read(txProbs[2]); } @@ -108,7 +108,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 TxMode txMode = cm.TxMode; BlockSize bsize = xd.Mi[0].Value.SbType; TxSize maxTxSize = Luts.MaxTxSizeLookup[(int)bsize]; - if (allowSelect && txMode == TxMode.TxModeSelect && bsize >= BlockSize.Block8x8) + if (allowSelect && txMode == TxMode.TxModeSelect && bsize >= BlockSize.Block8X8) { return ReadSelectedTxSize(ref cm, ref xd, maxTxSize, ref r); } @@ -276,7 +276,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Fractional part - fr = r.ReadTree(Luts.MvFPTree, class0 ? fc.Class0Fp[mvcomp][d].AsSpan() : fc.Fp[mvcomp].AsSpan()); + fr = r.ReadTree(Luts.MvFpTree, class0 ? fc.Class0Fp[mvcomp][d].AsSpan() : fc.Fp[mvcomp].AsSpan()); // High precision part (if hp is not used, the default value of the hp is 1) hp = usehp ? r.Read(class0 ? fc.Class0Hp[mvcomp] : fc.Hp[mvcomp]) : 1; @@ -415,7 +415,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 switch (bsize) { - case BlockSize.Block4x4: + case BlockSize.Block4X4: for (int i = 0; i < 4; ++i) { mi.Bmi[i].Mode = ReadIntraModeY(ref cm, ref xd, ref r, 0); @@ -423,11 +423,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 mi.Mode = mi.Bmi[3].Mode; break; - case BlockSize.Block4x8: + case BlockSize.Block4X8: mi.Bmi[0].Mode = mi.Bmi[2].Mode = ReadIntraModeY(ref cm, ref xd, ref r, 0); mi.Bmi[1].Mode = mi.Bmi[3].Mode = mi.Mode = ReadIntraModeY(ref cm, ref xd, ref r, 0); break; - case BlockSize.Block8x4: + case BlockSize.Block8X4: mi.Bmi[0].Mode = mi.Bmi[1].Mode = ReadIntraModeY(ref cm, ref xd, ref r, 0); mi.Bmi[2].Mode = mi.Bmi[3].Mode = mi.Mode = ReadIntraModeY(ref cm, ref xd, ref r, 0); break; @@ -595,7 +595,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int miRow, int miCol, int block, - int isSub8x8) + int isSub8X8) { ref Array4 refSignBias = ref cm.RefFrameSignBias; int i, refmvCount = 0; @@ -612,7 +612,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 mvRefList.Slice(0, Constants.MaxMvRefCandidates).Fill(new Mv()); i = 0; - if (isSub8x8 != 0) + if (isSub8X8 != 0) { // If the size < 8x8 we get the mv from the bmi substructure for the // nearest two blocks. @@ -770,7 +770,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return refmvCount; } - private static void AppendSub8x8ForIdx( + private static void AppendSub8X8ForIdx( ref Vp9Common cm, ref MacroBlockD xd, Span mvRefSearch, @@ -779,7 +779,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int refr, int miRow, int miCol, - ref Mv bestSub8x8) + ref Mv bestSub8X8) { Span mvList = stackalloc Mv[Constants.MaxMvRefCandidates]; ref ModeInfo mi = ref xd.Mi[0].Value; @@ -794,22 +794,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 switch (block) { case 0: - bestSub8x8 = mvList[refmvCount - 1]; + bestSub8X8 = mvList[refmvCount - 1]; break; case 1: case 2: if (bMode == PredictionMode.NearestMv) { - bestSub8x8 = bmi[0].Mv[refr]; + bestSub8X8 = bmi[0].Mv[refr]; } else { - bestSub8x8 = new Mv(); + bestSub8X8 = new Mv(); for (int n = 0; n < refmvCount; ++n) { if (Unsafe.As(ref bmi[0].Mv[refr]) != Unsafe.As(ref mvList[n])) { - bestSub8x8 = mvList[n]; + bestSub8X8 = mvList[n]; break; } } @@ -819,7 +819,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 case 3: if (bMode == PredictionMode.NearestMv) { - bestSub8x8 = bmi[2].Mv[refr]; + bestSub8X8 = bmi[2].Mv[refr]; } else { @@ -828,12 +828,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 candidates[1] = bmi[0].Mv[refr]; candidates[2] = mvList[0]; candidates[3] = mvList[1]; - bestSub8x8 = new Mv(); + bestSub8X8 = new Mv(); for (int n = 0; n < 2 + Constants.MaxMvRefCandidates; ++n) { if (Unsafe.As(ref bmi[2].Mv[refr]) != Unsafe.As(ref candidates[n])) { - bestSub8x8 = candidates[n]; + bestSub8X8 = candidates[n]; break; } } @@ -889,7 +889,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 if (cm.Seg.IsSegFeatureActive(mi.SegmentId, SegLvlFeatures.Skip) != 0) { mi.Mode = PredictionMode.ZeroMv; - if (bsize < BlockSize.Block8x8) + if (bsize < BlockSize.Block8X8) { xd.ErrorInfo.Value.InternalError(CodecErr.UnsupBitstream, "Invalid usage of segement feature on small blocks"); @@ -898,7 +898,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - if (bsize >= BlockSize.Block8x8) + if (bsize >= BlockSize.Block8X8) { mi.Mode = ReadInterMode(ref cm, ref xd, ref r, interModeCtx); } @@ -932,20 +932,20 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ? ReadSwitchableInterpFilter(ref cm, ref xd, ref r) : cm.InterpFilter; - if (bsize < BlockSize.Block8x8) + if (bsize < BlockSize.Block8X8) { - int num4x4W = 1 << xd.BmodeBlocksWl; - int num4x4H = 1 << xd.BmodeBlocksHl; + int num4X4W = 1 << xd.BmodeBlocksWl; + int num4X4H = 1 << xd.BmodeBlocksHl; int idx, idy; PredictionMode bMode = 0; - Array2 bestSub8x8 = new(); - const uint invalidMv = 0x80008000; + Array2 bestSub8X8 = new(); + const uint InvalidMv = 0x80008000; // Initialize the 2nd element as even though it won't be used meaningfully // if isCompound is false. - Unsafe.As(ref bestSub8x8[1]) = invalidMv; - for (idy = 0; idy < 2; idy += num4x4H) + Unsafe.As(ref bestSub8X8[1]) = InvalidMv; + for (idy = 0; idy < 2; idy += num4X4H) { - for (idx = 0; idx < 2; idx += num4x4W) + for (idx = 0; idx < 2; idx += num4X4W) { int j = (idy * 2) + idx; bMode = ReadInterMode(ref cm, ref xd, ref r, interModeCtx); @@ -954,24 +954,24 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { for (refr = 0; refr < 1 + isCompound; ++refr) { - AppendSub8x8ForIdx(ref cm, ref xd, mvRefSearch, bMode, j, refr, miRow, miCol, - ref bestSub8x8[refr]); + AppendSub8X8ForIdx(ref cm, ref xd, mvRefSearch, bMode, j, refr, miRow, miCol, + ref bestSub8X8[refr]); } } - if (!Assign(ref cm, ref xd, bMode, ref mi.Bmi[j].Mv, ref bestRefMvs, ref bestSub8x8, + if (!Assign(ref cm, ref xd, bMode, ref mi.Bmi[j].Mv, ref bestRefMvs, ref bestSub8X8, isCompound, allowHp, ref r)) { xd.Corrupted |= true; break; } - if (num4x4H == 2) + if (num4X4H == 2) { mi.Bmi[j + 2] = mi.Bmi[j]; } - if (num4x4W == 2) + if (num4X4W == 2) { mi.Bmi[j + 1] = mi.Bmi[j]; } @@ -1084,7 +1084,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 switch (bsize) { - case BlockSize.Block4x4: + case BlockSize.Block4X4: for (int i = 0; i < 4; ++i) { mi.Value.Bmi[i].Mode = @@ -1093,13 +1093,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 mi.Value.Mode = mi.Value.Bmi[3].Mode; break; - case BlockSize.Block4x8: + case BlockSize.Block4X8: mi.Value.Bmi[0].Mode = mi.Value.Bmi[2].Mode = ReadIntraMode(ref r, GetYModeProbs(ref cm.Fc.Value, mi, aboveMi, leftMi, 0)); mi.Value.Bmi[1].Mode = mi.Value.Bmi[3].Mode = mi.Value.Mode = ReadIntraMode(ref r, GetYModeProbs(ref cm.Fc.Value, mi, aboveMi, leftMi, 1)); break; - case BlockSize.Block8x4: + case BlockSize.Block8X4: mi.Value.Bmi[0].Mode = mi.Value.Bmi[1].Mode = ReadIntraMode(ref r, GetYModeProbs(ref cm.Fc.Value, mi, aboveMi, leftMi, 0)); mi.Value.Bmi[2].Mode = mi.Value.Bmi[3].Mode = mi.Value.Mode = diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Decoder.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Decoder.cs index 7f50aab3f..009611b27 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Decoder.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Decoder.cs @@ -17,10 +17,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return new Surface(width, height); } - private static ReadOnlySpan LiteralToFilter => new byte[] - { + private static ReadOnlySpan LiteralToFilter => + [ Constants.EightTapSmooth, Constants.EightTap, Constants.EightTapSharp, Constants.Bilinear - }; + ]; public unsafe bool Decode( ref Vp9PictureInfo pictureInfo, diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Detokenize.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Detokenize.cs index ebcacd5fd..092d298dc 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Detokenize.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Detokenize.cs @@ -17,10 +17,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 private static int GetCoefContext(ReadOnlySpan neighbors, ReadOnlySpan tokenCache, int c) { - const int maxNeighbors = 2; + const int MaxNeighbors = 2; - return (1 + tokenCache[neighbors[(maxNeighbors * c) + 0]] + - tokenCache[neighbors[(maxNeighbors * c) + 1]]) >> 1; + return (1 + tokenCache[neighbors[(MaxNeighbors * c) + 0]] + + tokenCache[neighbors[(MaxNeighbors * c) + 1]]) >> 1; } private static int DecodeCoefs( @@ -42,7 +42,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ref Array6>> coefProbs = ref fc.CoefProbs[(int)txSize][(int)type][refr]; Span tokenCache = stackalloc byte[32 * 32]; ReadOnlySpan bandTranslate = Luts.GetBandTranslate(txSize); - int dqShift = txSize == TxSize.Tx32x32 ? 1 : 0; + int dqShift = txSize == TxSize.Tx32X32 ? 1 : 0; int v; short dqv = dq[0]; ReadOnlySpan cat6Prob = xd.Bd == 12 @@ -242,7 +242,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 switch (txSize) { - case TxSize.Tx4x4: + case TxSize.Tx4X4: ctx = a[0] != 0 ? 1 : 0; ctx += l[0] != 0 ? 1 : 0; eob = DecodeCoefs( @@ -257,8 +257,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ref r); a[0] = l[0] = (sbyte)(eob > 0 ? 1 : 0); break; - case TxSize.Tx8x8: - GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx8x8); + case TxSize.Tx8X8: + GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx8X8); ctx = MemoryMarshal.Cast(a)[0] != 0 ? 1 : 0; ctx += MemoryMarshal.Cast(l)[0] != 0 ? 1 : 0; eob = DecodeCoefs( @@ -274,8 +274,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 MemoryMarshal.Cast(a)[0] = (ushort)((eob > 0 ? 0x0101 : 0) >> ctxShiftA); MemoryMarshal.Cast(l)[0] = (ushort)((eob > 0 ? 0x0101 : 0) >> ctxShiftL); break; - case TxSize.Tx16x16: - GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx16x16); + case TxSize.Tx16X16: + GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx16X16); ctx = MemoryMarshal.Cast(a)[0] != 0 ? 1 : 0; ctx += MemoryMarshal.Cast(l)[0] != 0 ? 1 : 0; eob = DecodeCoefs( @@ -291,8 +291,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 MemoryMarshal.Cast(a)[0] = (uint)((eob > 0 ? 0x01010101 : 0) >> ctxShiftA); MemoryMarshal.Cast(l)[0] = (uint)((eob > 0 ? 0x01010101 : 0) >> ctxShiftL); break; - case TxSize.Tx32x32: - GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx32x32); + case TxSize.Tx32X32: + GetCtxShift(ref xd, ref ctxShiftA, ref ctxShiftL, x, y, 1 << (int)TxSize.Tx32X32); // NOTE: Casting to ulong here is safe because the default memory // alignment is at least 8 bytes and the Tx32x32 is aligned on 8 byte // boundaries. diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/IntraPred.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/IntraPred.cs index ce53cccb4..df72e160d 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/IntraPred.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/IntraPred.cs @@ -34,17 +34,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp return (ushort)((a + b + 1) >> 1); } - public static unsafe void D207Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D207Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D207Predictor(dst, stride, 8, above, left); } - public static unsafe void D207Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D207Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D207Predictor(dst, stride, 16, above, left); } - public static unsafe void D207Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D207Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D207Predictor(dst, stride, 32, above, left); } @@ -85,17 +85,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void D63Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D63Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D63Predictor(dst, stride, 8, above, left); } - public static unsafe void D63Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D63Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D63Predictor(dst, stride, 16, above, left); } - public static unsafe void D63Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D63Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D63Predictor(dst, stride, 32, above, left); } @@ -117,17 +117,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void D45Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D45Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D45Predictor(dst, stride, 8, above, left); } - public static unsafe void D45Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D45Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D45Predictor(dst, stride, 16, above, left); } - public static unsafe void D45Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D45Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D45Predictor(dst, stride, 32, above, left); } @@ -152,17 +152,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void D117Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D117Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D117Predictor(dst, stride, 8, above, left); } - public static unsafe void D117Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D117Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D117Predictor(dst, stride, 16, above, left); } - public static unsafe void D117Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D117Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D117Predictor(dst, stride, 32, above, left); } @@ -205,17 +205,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void D135Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D135Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D135Predictor(dst, stride, 8, above, left); } - public static unsafe void D135Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D135Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D135Predictor(dst, stride, 16, above, left); } - public static unsafe void D135Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D135Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D135Predictor(dst, stride, 32, above, left); } @@ -245,17 +245,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void D153Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D153Predictor8X8(byte* dst, int stride, byte* above, byte* left) { D153Predictor(dst, stride, 8, above, left); } - public static unsafe void D153Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D153Predictor16X16(byte* dst, int stride, byte* above, byte* left) { D153Predictor(dst, stride, 16, above, left); } - public static unsafe void D153Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D153Predictor32X32(byte* dst, int stride, byte* above, byte* left) { D153Predictor(dst, stride, 32, above, left); } @@ -297,22 +297,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void VPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void VPredictor4X4(byte* dst, int stride, byte* above, byte* left) { VPredictor(dst, stride, 4, above, left); } - public static unsafe void VPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void VPredictor8X8(byte* dst, int stride, byte* above, byte* left) { VPredictor(dst, stride, 8, above, left); } - public static unsafe void VPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void VPredictor16X16(byte* dst, int stride, byte* above, byte* left) { VPredictor(dst, stride, 16, above, left); } - public static unsafe void VPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void VPredictor32X32(byte* dst, int stride, byte* above, byte* left) { VPredictor(dst, stride, 32, above, left); } @@ -326,22 +326,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void HPredictor4X4(byte* dst, int stride, byte* above, byte* left) { HPredictor(dst, stride, 4, above, left); } - public static unsafe void HPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void HPredictor8X8(byte* dst, int stride, byte* above, byte* left) { HPredictor(dst, stride, 8, above, left); } - public static unsafe void HPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void HPredictor16X16(byte* dst, int stride, byte* above, byte* left) { HPredictor(dst, stride, 16, above, left); } - public static unsafe void HPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void HPredictor32X32(byte* dst, int stride, byte* above, byte* left) { HPredictor(dst, stride, 32, above, left); } @@ -355,22 +355,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void TmPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void TmPredictor4X4(byte* dst, int stride, byte* above, byte* left) { TmPredictor(dst, stride, 4, above, left); } - public static unsafe void TmPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void TmPredictor8X8(byte* dst, int stride, byte* above, byte* left) { TmPredictor(dst, stride, 8, above, left); } - public static unsafe void TmPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void TmPredictor16X16(byte* dst, int stride, byte* above, byte* left) { TmPredictor(dst, stride, 16, above, left); } - public static unsafe void TmPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void TmPredictor32X32(byte* dst, int stride, byte* above, byte* left) { TmPredictor(dst, stride, 32, above, left); } @@ -390,22 +390,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void Dc128Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void Dc128Predictor4X4(byte* dst, int stride, byte* above, byte* left) { Dc128Predictor(dst, stride, 4, above, left); } - public static unsafe void Dc128Predictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void Dc128Predictor8X8(byte* dst, int stride, byte* above, byte* left) { Dc128Predictor(dst, stride, 8, above, left); } - public static unsafe void Dc128Predictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void Dc128Predictor16X16(byte* dst, int stride, byte* above, byte* left) { Dc128Predictor(dst, stride, 16, above, left); } - public static unsafe void Dc128Predictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void Dc128Predictor32X32(byte* dst, int stride, byte* above, byte* left) { Dc128Predictor(dst, stride, 32, above, left); } @@ -419,36 +419,36 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void DcLeftPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcLeftPredictor4X4(byte* dst, int stride, byte* above, byte* left) { DcLeftPredictor(dst, stride, 4, above, left); } - public static unsafe void DcLeftPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcLeftPredictor8X8(byte* dst, int stride, byte* above, byte* left) { DcLeftPredictor(dst, stride, 8, above, left); } - public static unsafe void DcLeftPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcLeftPredictor16X16(byte* dst, int stride, byte* above, byte* left) { DcLeftPredictor(dst, stride, 16, above, left); } - public static unsafe void DcLeftPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcLeftPredictor32X32(byte* dst, int stride, byte* above, byte* left) { DcLeftPredictor(dst, stride, 32, above, left); } private static unsafe void DcLeftPredictor(byte* dst, int stride, int bs, byte* above, byte* left) { - int expectedDc, sum = 0; + int sum = 0; for (int i = 0; i < bs; i++) { sum += left[i]; } - expectedDc = (sum + (bs >> 1)) / bs; + int expectedDc = (sum + (bs >> 1)) / bs; for (int r = 0; r < bs; r++) { @@ -457,36 +457,36 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void DcTopPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcTopPredictor4X4(byte* dst, int stride, byte* above, byte* left) { DcTopPredictor(dst, stride, 4, above, left); } - public static unsafe void DcTopPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcTopPredictor8X8(byte* dst, int stride, byte* above, byte* left) { DcTopPredictor(dst, stride, 8, above, left); } - public static unsafe void DcTopPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcTopPredictor16X16(byte* dst, int stride, byte* above, byte* left) { DcTopPredictor(dst, stride, 16, above, left); } - public static unsafe void DcTopPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcTopPredictor32X32(byte* dst, int stride, byte* above, byte* left) { DcTopPredictor(dst, stride, 32, above, left); } private static unsafe void DcTopPredictor(byte* dst, int stride, int bs, byte* above, byte* left) { - int expectedDc, sum = 0; + int sum = 0; for (int i = 0; i < bs; i++) { sum += above[i]; } - expectedDc = (sum + (bs >> 1)) / bs; + int expectedDc = (sum + (bs >> 1)) / bs; for (int r = 0; r < bs; r++) { @@ -495,29 +495,29 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void DcPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcPredictor4X4(byte* dst, int stride, byte* above, byte* left) { DcPredictor(dst, stride, 4, above, left); } - public static unsafe void DcPredictor8x8(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcPredictor8X8(byte* dst, int stride, byte* above, byte* left) { DcPredictor(dst, stride, 8, above, left); } - public static unsafe void DcPredictor16x16(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcPredictor16X16(byte* dst, int stride, byte* above, byte* left) { DcPredictor(dst, stride, 16, above, left); } - public static unsafe void DcPredictor32x32(byte* dst, int stride, byte* above, byte* left) + public static unsafe void DcPredictor32X32(byte* dst, int stride, byte* above, byte* left) { DcPredictor(dst, stride, 32, above, left); } private static unsafe void DcPredictor(byte* dst, int stride, int bs, byte* above, byte* left) { - int expectedDc, sum = 0; + int sum = 0; int count = 2 * bs; for (int i = 0; i < bs; i++) @@ -526,7 +526,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp sum += left[i]; } - expectedDc = (sum + (count >> 1)) / count; + int expectedDc = (sum + (count >> 1)) / count; for (int r = 0; r < bs; r++) { @@ -535,31 +535,31 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HePredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void HePredictor4X4(byte* dst, int stride, byte* above, byte* left) { byte h = above[-1]; - byte I = left[0]; + byte i = left[0]; byte j = left[1]; byte k = left[2]; byte l = left[3]; - MemoryUtil.Fill(dst + (stride * 0), Avg3(h, I, j), 4); - MemoryUtil.Fill(dst + (stride * 1), Avg3(I, j, k), 4); + MemoryUtil.Fill(dst + (stride * 0), Avg3(h, i, j), 4); + MemoryUtil.Fill(dst + (stride * 1), Avg3(i, j, k), 4); MemoryUtil.Fill(dst + (stride * 2), Avg3(j, k, l), 4); MemoryUtil.Fill(dst + (stride * 3), Avg3(k, l, l), 4); } - public static unsafe void VePredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void VePredictor4X4(byte* dst, int stride, byte* above, byte* left) { byte h = above[-1]; - byte I = above[0]; + byte i = above[0]; byte j = above[1]; byte k = above[2]; byte l = above[3]; byte m = above[4]; - dst[0] = Avg3(h, I, j); - dst[1] = Avg3(I, j, k); + dst[0] = Avg3(h, i, j); + dst[1] = Avg3(i, j, k); dst[2] = Avg3(j, k, l); dst[3] = Avg3(k, l, m); MemoryUtil.Copy(dst + (stride * 1), dst, 4); @@ -567,23 +567,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp MemoryUtil.Copy(dst + (stride * 3), dst, 4); } - public static unsafe void D207Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D207Predictor4X4(byte* dst, int stride, byte* above, byte* left) { - byte I = left[0]; + byte i = left[0]; byte j = left[1]; byte k = left[2]; byte l = left[3]; - Dst(dst, stride, 0, 0) = Avg2(I, j); + Dst(dst, stride, 0, 0) = Avg2(i, j); Dst(dst, stride, 2, 0) = Dst(dst, stride, 0, 1) = Avg2(j, k); Dst(dst, stride, 2, 1) = Dst(dst, stride, 0, 2) = Avg2(k, l); - Dst(dst, stride, 1, 0) = Avg3(I, j, k); + Dst(dst, stride, 1, 0) = Avg3(i, j, k); Dst(dst, stride, 3, 0) = Dst(dst, stride, 1, 1) = Avg3(j, k, l); Dst(dst, stride, 3, 1) = Dst(dst, stride, 1, 2) = Avg3(k, l, l); Dst(dst, stride, 3, 2) = Dst(dst, stride, 2, 2) = Dst(dst, stride, 0, 3) = Dst(dst, stride, 1, 3) = Dst(dst, stride, 2, 3) = Dst(dst, stride, 3, 3) = l; } - public static unsafe void D63Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D63Predictor4X4(byte* dst, int stride, byte* above, byte* left) { byte a = above[0]; byte b = above[1]; @@ -605,7 +605,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = Avg3(e, f, g); // Differs from vp8 } - public static unsafe void D63EPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D63EPredictor4X4(byte* dst, int stride, byte* above, byte* left) { byte a = above[0]; byte b = above[1]; @@ -628,7 +628,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = Avg3(f, g, h); } - public static unsafe void D45Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D45Predictor4X4(byte* dst, int stride, byte* above, byte* left) { byte a = above[0]; byte b = above[1]; @@ -648,7 +648,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = h; // differs from vp8 } - public static unsafe void D45EPredictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D45EPredictor4X4(byte* dst, int stride, byte* above, byte* left) { byte a = above[0]; byte b = above[1]; @@ -668,9 +668,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = Avg3(g, h, h); } - public static unsafe void D117Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D117Predictor4X4(byte* dst, int stride, byte* above, byte* left) { - byte I = left[0]; + byte i = left[0]; byte j = left[1]; byte k = left[2]; byte x = above[-1]; @@ -683,17 +683,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 2, 0) = Dst(dst, stride, 3, 2) = Avg2(b, c); Dst(dst, stride, 3, 0) = Avg2(c, d); - Dst(dst, stride, 0, 3) = Avg3(k, j, I); - Dst(dst, stride, 0, 2) = Avg3(j, I, x); - Dst(dst, stride, 0, 1) = Dst(dst, stride, 1, 3) = Avg3(I, x, a); + Dst(dst, stride, 0, 3) = Avg3(k, j, i); + Dst(dst, stride, 0, 2) = Avg3(j, i, x); + Dst(dst, stride, 0, 1) = Dst(dst, stride, 1, 3) = Avg3(i, x, a); Dst(dst, stride, 1, 1) = Dst(dst, stride, 2, 3) = Avg3(x, a, b); Dst(dst, stride, 2, 1) = Dst(dst, stride, 3, 3) = Avg3(a, b, c); Dst(dst, stride, 3, 1) = Avg3(b, c, d); } - public static unsafe void D135Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D135Predictor4X4(byte* dst, int stride, byte* above, byte* left) { - byte I = left[0]; + byte i = left[0]; byte j = left[1]; byte k = left[2]; byte l = left[3]; @@ -703,18 +703,18 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp byte c = above[2]; byte d = above[3]; Dst(dst, stride, 0, 3) = Avg3(j, k, l); - Dst(dst, stride, 1, 3) = Dst(dst, stride, 0, 2) = Avg3(I, j, k); - Dst(dst, stride, 2, 3) = Dst(dst, stride, 1, 2) = Dst(dst, stride, 0, 1) = Avg3(x, I, j); + Dst(dst, stride, 1, 3) = Dst(dst, stride, 0, 2) = Avg3(i, j, k); + Dst(dst, stride, 2, 3) = Dst(dst, stride, 1, 2) = Dst(dst, stride, 0, 1) = Avg3(x, i, j); Dst(dst, stride, 3, 3) = - Dst(dst, stride, 2, 2) = Dst(dst, stride, 1, 1) = Dst(dst, stride, 0, 0) = Avg3(a, x, I); + Dst(dst, stride, 2, 2) = Dst(dst, stride, 1, 1) = Dst(dst, stride, 0, 0) = Avg3(a, x, i); Dst(dst, stride, 3, 2) = Dst(dst, stride, 2, 1) = Dst(dst, stride, 1, 0) = Avg3(b, a, x); Dst(dst, stride, 3, 1) = Dst(dst, stride, 2, 0) = Avg3(c, b, a); Dst(dst, stride, 3, 0) = Avg3(d, c, b); } - public static unsafe void D153Predictor4x4(byte* dst, int stride, byte* above, byte* left) + public static unsafe void D153Predictor4X4(byte* dst, int stride, byte* above, byte* left) { - byte I = left[0]; + byte i = left[0]; byte j = left[1]; byte k = left[2]; byte l = left[3]; @@ -722,30 +722,30 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp byte a = above[0]; byte b = above[1]; byte c = above[2]; - Dst(dst, stride, 0, 0) = Dst(dst, stride, 2, 1) = Avg2(I, x); - Dst(dst, stride, 0, 1) = Dst(dst, stride, 2, 2) = Avg2(j, I); + Dst(dst, stride, 0, 0) = Dst(dst, stride, 2, 1) = Avg2(i, x); + Dst(dst, stride, 0, 1) = Dst(dst, stride, 2, 2) = Avg2(j, i); Dst(dst, stride, 0, 2) = Dst(dst, stride, 2, 3) = Avg2(k, j); Dst(dst, stride, 0, 3) = Avg2(l, k); Dst(dst, stride, 3, 0) = Avg3(a, b, c); Dst(dst, stride, 2, 0) = Avg3(x, a, b); - Dst(dst, stride, 1, 0) = Dst(dst, stride, 3, 1) = Avg3(I, x, a); - Dst(dst, stride, 1, 1) = Dst(dst, stride, 3, 2) = Avg3(j, I, x); - Dst(dst, stride, 1, 2) = Dst(dst, stride, 3, 3) = Avg3(k, j, I); + Dst(dst, stride, 1, 0) = Dst(dst, stride, 3, 1) = Avg3(i, x, a); + Dst(dst, stride, 1, 1) = Dst(dst, stride, 3, 2) = Avg3(j, i, x); + Dst(dst, stride, 1, 2) = Dst(dst, stride, 3, 3) = Avg3(k, j, i); Dst(dst, stride, 1, 3) = Avg3(l, k, j); } - public static unsafe void HighbdD207Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD207Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD207Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD207Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD207Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD207Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD207Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD207Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD207Predictor(dst, stride, 32, above, left, bd); } @@ -787,17 +787,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD63Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD63Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD63Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD63Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD63Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD63Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD63Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD63Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD63Predictor(dst, stride, 32, above, left, bd); } @@ -820,17 +820,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD45Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD45Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD45Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD45Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD45Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD45Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD45Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD45Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD45Predictor(dst, stride, 32, above, left, bd); } @@ -856,17 +856,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD117Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD117Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD117Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD117Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD117Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD117Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD117Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD117Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD117Predictor(dst, stride, 32, above, left, bd); } @@ -910,17 +910,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD135Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD135Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD135Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD135Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD135Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD135Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD135Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD135Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD135Predictor(dst, stride, 32, above, left, bd); } @@ -951,17 +951,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD153Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD153Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD153Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdD153Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD153Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD153Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdD153Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD153Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdD153Predictor(dst, stride, 32, above, left, bd); } @@ -1004,22 +1004,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdVPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdVPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdVPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdVPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdVPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdVPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdVPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdVPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdVPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdVPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdVPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdVPredictor(dst, stride, 32, above, left, bd); } @@ -1034,22 +1034,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdHPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdHPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdHPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdHPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdHPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdHPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdHPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdHPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdHPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdHPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdHPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdHPredictor(dst, stride, 32, above, left, bd); } @@ -1064,22 +1064,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdTmPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdTmPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdTmPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdTmPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdTmPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdTmPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdTmPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdTmPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdTmPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdTmPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdTmPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdTmPredictor(dst, stride, 32, above, left, bd); } @@ -1100,23 +1100,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdDc128Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDc128Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDc128Predictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdDc128Predictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDc128Predictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDc128Predictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdDc128Predictor16x16(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDc128Predictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDc128Predictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdDc128Predictor32x32(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDc128Predictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDc128Predictor(dst, stride, 32, above, left, bd); @@ -1132,23 +1132,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdDcLeftPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcLeftPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcLeftPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdDcLeftPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcLeftPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcLeftPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdDcLeftPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDcLeftPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcLeftPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdDcLeftPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDcLeftPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcLeftPredictor(dst, stride, 32, above, left, bd); @@ -1157,14 +1157,14 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp private static unsafe void HighbdDcLeftPredictor(ushort* dst, int stride, int bs, ushort* above, ushort* left, int bd) { - int expectedDc, sum = 0; + int sum = 0; for (int i = 0; i < bs; i++) { sum += left[i]; } - expectedDc = (sum + (bs >> 1)) / bs; + int expectedDc = (sum + (bs >> 1)) / bs; for (int r = 0; r < bs; r++) { @@ -1173,23 +1173,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdDcTopPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcTopPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcTopPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdDcTopPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcTopPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcTopPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdDcTopPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDcTopPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcTopPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdDcTopPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, + public static unsafe void HighbdDcTopPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcTopPredictor(dst, stride, 32, above, left, bd); @@ -1198,14 +1198,14 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp private static unsafe void HighbdDcTopPredictor(ushort* dst, int stride, int bs, ushort* above, ushort* left, int bd) { - int expectedDc, sum = 0; + int sum = 0; for (int i = 0; i < bs; i++) { sum += above[i]; } - expectedDc = (sum + (bs >> 1)) / bs; + int expectedDc = (sum + (bs >> 1)) / bs; for (int r = 0; r < bs; r++) { @@ -1214,22 +1214,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdDcPredictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcPredictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcPredictor(dst, stride, 4, above, left, bd); } - public static unsafe void HighbdDcPredictor8x8(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcPredictor8X8(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcPredictor(dst, stride, 8, above, left, bd); } - public static unsafe void HighbdDcPredictor16x16(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcPredictor16X16(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcPredictor(dst, stride, 16, above, left, bd); } - public static unsafe void HighbdDcPredictor32x32(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdDcPredictor32X32(ushort* dst, int stride, ushort* above, ushort* left, int bd) { HighbdDcPredictor(dst, stride, 32, above, left, bd); } @@ -1237,7 +1237,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp private static unsafe void HighbdDcPredictor(ushort* dst, int stride, int bs, ushort* above, ushort* left, int bd) { - int expectedDc, sum = 0; + int sum = 0; int count = 2 * bs; for (int i = 0; i < bs; i++) @@ -1246,7 +1246,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp sum += left[i]; } - expectedDc = (sum + (count >> 1)) / count; + int expectedDc = (sum + (count >> 1)) / count; for (int r = 0; r < bs; r++) { @@ -1255,23 +1255,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static unsafe void HighbdD207Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD207Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { - ushort I = left[0]; + ushort i = left[0]; ushort j = left[1]; ushort k = left[2]; ushort l = left[3]; - Dst(dst, stride, 0, 0) = Avg2(I, j); + Dst(dst, stride, 0, 0) = Avg2(i, j); Dst(dst, stride, 2, 0) = Dst(dst, stride, 0, 1) = Avg2(j, k); Dst(dst, stride, 2, 1) = Dst(dst, stride, 0, 2) = Avg2(k, l); - Dst(dst, stride, 1, 0) = Avg3(I, j, k); + Dst(dst, stride, 1, 0) = Avg3(i, j, k); Dst(dst, stride, 3, 0) = Dst(dst, stride, 1, 1) = Avg3(j, k, l); Dst(dst, stride, 3, 1) = Dst(dst, stride, 1, 2) = Avg3(k, l, l); Dst(dst, stride, 3, 2) = Dst(dst, stride, 2, 2) = Dst(dst, stride, 0, 3) = Dst(dst, stride, 1, 3) = Dst(dst, stride, 2, 3) = Dst(dst, stride, 3, 3) = l; } - public static unsafe void HighbdD63Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD63Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { ushort a = above[0]; ushort b = above[1]; @@ -1293,7 +1293,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = Avg3(e, f, g); // Differs from vp8 } - public static unsafe void HighbdD45Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD45Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { ushort a = above[0]; ushort b = above[1]; @@ -1313,9 +1313,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 3, 3) = h; // Differs from vp8 } - public static unsafe void HighbdD117Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD117Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { - ushort I = left[0]; + ushort i = left[0]; ushort j = left[1]; ushort k = left[2]; ushort x = above[-1]; @@ -1328,17 +1328,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Dst(dst, stride, 2, 0) = Dst(dst, stride, 3, 2) = Avg2(b, c); Dst(dst, stride, 3, 0) = Avg2(c, d); - Dst(dst, stride, 0, 3) = Avg3(k, j, I); - Dst(dst, stride, 0, 2) = Avg3(j, I, x); - Dst(dst, stride, 0, 1) = Dst(dst, stride, 1, 3) = Avg3(I, x, a); + Dst(dst, stride, 0, 3) = Avg3(k, j, i); + Dst(dst, stride, 0, 2) = Avg3(j, i, x); + Dst(dst, stride, 0, 1) = Dst(dst, stride, 1, 3) = Avg3(i, x, a); Dst(dst, stride, 1, 1) = Dst(dst, stride, 2, 3) = Avg3(x, a, b); Dst(dst, stride, 2, 1) = Dst(dst, stride, 3, 3) = Avg3(a, b, c); Dst(dst, stride, 3, 1) = Avg3(b, c, d); } - public static unsafe void HighbdD135Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD135Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { - ushort I = left[0]; + ushort i = left[0]; ushort j = left[1]; ushort k = left[2]; ushort l = left[3]; @@ -1348,18 +1348,18 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp ushort c = above[2]; ushort d = above[3]; Dst(dst, stride, 0, 3) = Avg3(j, k, l); - Dst(dst, stride, 1, 3) = Dst(dst, stride, 0, 2) = Avg3(I, j, k); - Dst(dst, stride, 2, 3) = Dst(dst, stride, 1, 2) = Dst(dst, stride, 0, 1) = Avg3(x, I, j); + Dst(dst, stride, 1, 3) = Dst(dst, stride, 0, 2) = Avg3(i, j, k); + Dst(dst, stride, 2, 3) = Dst(dst, stride, 1, 2) = Dst(dst, stride, 0, 1) = Avg3(x, i, j); Dst(dst, stride, 3, 3) = - Dst(dst, stride, 2, 2) = Dst(dst, stride, 1, 1) = Dst(dst, stride, 0, 0) = Avg3(a, x, I); + Dst(dst, stride, 2, 2) = Dst(dst, stride, 1, 1) = Dst(dst, stride, 0, 0) = Avg3(a, x, i); Dst(dst, stride, 3, 2) = Dst(dst, stride, 2, 1) = Dst(dst, stride, 1, 0) = Avg3(b, a, x); Dst(dst, stride, 3, 1) = Dst(dst, stride, 2, 0) = Avg3(c, b, a); Dst(dst, stride, 3, 0) = Avg3(d, c, b); } - public static unsafe void HighbdD153Predictor4x4(ushort* dst, int stride, ushort* above, ushort* left, int bd) + public static unsafe void HighbdD153Predictor4X4(ushort* dst, int stride, ushort* above, ushort* left, int bd) { - ushort I = left[0]; + ushort i = left[0]; ushort j = left[1]; ushort k = left[2]; ushort l = left[3]; @@ -1368,17 +1368,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp ushort b = above[1]; ushort c = above[2]; - Dst(dst, stride, 0, 0) = Dst(dst, stride, 2, 1) = Avg2(I, x); - Dst(dst, stride, 0, 1) = Dst(dst, stride, 2, 2) = Avg2(j, I); + Dst(dst, stride, 0, 0) = Dst(dst, stride, 2, 1) = Avg2(i, x); + Dst(dst, stride, 0, 1) = Dst(dst, stride, 2, 2) = Avg2(j, i); Dst(dst, stride, 0, 2) = Dst(dst, stride, 2, 3) = Avg2(k, j); Dst(dst, stride, 0, 3) = Avg2(l, k); Dst(dst, stride, 3, 0) = Avg3(a, b, c); Dst(dst, stride, 2, 0) = Avg3(x, a, b); - Dst(dst, stride, 1, 0) = Dst(dst, stride, 3, 1) = Avg3(I, x, a); - Dst(dst, stride, 1, 1) = Dst(dst, stride, 3, 2) = Avg3(j, I, x); - Dst(dst, stride, 1, 2) = Dst(dst, stride, 3, 3) = Avg3(k, j, I); + Dst(dst, stride, 1, 0) = Dst(dst, stride, 3, 1) = Avg3(i, x, a); + Dst(dst, stride, 1, 1) = Dst(dst, stride, 3, 2) = Avg3(j, i, x); + Dst(dst, stride, 1, 2) = Dst(dst, stride, 3, 3) = Avg3(k, j, i); Dst(dst, stride, 1, 3) = Avg3(l, k, j); } } -} \ No newline at end of file +} diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/InvTxfm.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/InvTxfm.cs index d93ff25f7..a36ea2dcf 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/InvTxfm.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/InvTxfm.cs @@ -87,7 +87,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Iwht4x416Add(ReadOnlySpan input, Span dest, int stride) + public static void Iwht4X416Add(ReadOnlySpan input, Span dest, int stride) { /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds, 0.5 shifts per pixel. */ @@ -143,7 +143,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Iwht4x41Add(ReadOnlySpan input, Span dest, int stride) + public static void Iwht4X41Add(ReadOnlySpan input, Span dest, int stride) { long a1, e1; Span tmp = stackalloc int[4]; @@ -233,7 +233,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct4x416Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct4X416Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[4 * 4]; Span outptr = output; @@ -265,7 +265,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void Idct4x41Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct4X41Add(ReadOnlySpan input, Span dest, int stride) { long a1; int output = WrapLow(DctConstRoundShift((short)input[0] * CosPi1664)); @@ -419,7 +419,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct8x864Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct8X864Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[8 * 8]; Span outptr = output; @@ -452,7 +452,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct8x812Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct8X812Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[8 * 8]; Span outptr = output; @@ -487,7 +487,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void Idct8x81Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct8X81Add(ReadOnlySpan input, Span dest, int stride) { long a1; int output = WrapLow(DctConstRoundShift((short)input[0] * CosPi1664)); @@ -843,7 +843,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct16x16256Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct16X16256Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -876,7 +876,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct16x1638Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct16X1638Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -912,7 +912,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct16x1610Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct16X1610Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -947,7 +947,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void Idct16x161Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct16X161Add(ReadOnlySpan input, Span dest, int stride) { long a1; int output = WrapLow(DctConstRoundShift((short)input[0] * CosPi1664)); @@ -1336,7 +1336,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct32x321024Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct32X321024Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -1383,7 +1383,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct32x32135Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct32X32135Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -1419,7 +1419,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void Idct32x3234Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct32X3234Add(ReadOnlySpan input, Span dest, int stride) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -1454,7 +1454,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void Idct32x321Add(ReadOnlySpan input, Span dest, int stride) + public static void Idct32X321Add(ReadOnlySpan input, Span dest, int stride) { long a1; int output = WrapLow(DctConstRoundShift((short)input[0] * CosPi1664)); @@ -1474,7 +1474,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIwht4x416Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIwht4X416Add(ReadOnlySpan input, Span dest, int stride, int bd) { /* 4-point reversible, orthonormal inverse Walsh-Hadamard in 3.5 adds, 0.5 shifts per pixel. */ @@ -1530,7 +1530,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIwht4x41Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIwht4X41Add(ReadOnlySpan input, Span dest, int stride, int bd) { long a1, e1; Span tmp = stackalloc int[4]; @@ -1633,7 +1633,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct4x416Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct4X416Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[4 * 4]; Span outptr = output; @@ -1665,7 +1665,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void HighbdIdct4x41Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct4X41Add(ReadOnlySpan input, Span dest, int stride, int bd) { long a1; int output = HighbdWrapLow(DctConstRoundShift(input[0] * (long)CosPi1664), bd); @@ -1824,7 +1824,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct8x864Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct8X864Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[8 * 8]; Span outptr = output; @@ -1857,7 +1857,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct8x812Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct8X812Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[8 * 8]; Span outptr = output; @@ -1892,7 +1892,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void VpxHighbdidct8x81AddC(ReadOnlySpan input, Span dest, int stride, int bd) + public static void VpxHighbdidct8X81AddC(ReadOnlySpan input, Span dest, int stride, int bd) { long a1; int output = HighbdWrapLow(DctConstRoundShift(input[0] * (long)CosPi1664), bd); @@ -2261,7 +2261,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct16x16256Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct16X16256Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -2294,7 +2294,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct16x1638Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct16X1638Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -2331,7 +2331,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct16x1610Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct16X1610Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[16 * 16]; Span outptr = output; @@ -2366,7 +2366,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void HighbdIdct16x161Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct16X161Add(ReadOnlySpan input, Span dest, int stride, int bd) { long a1; int output = HighbdWrapLow(DctConstRoundShift(input[0] * (long)CosPi1664), bd); @@ -2762,7 +2762,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct32x321024Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct32X321024Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -2809,7 +2809,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct32x32135Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct32X32135Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -2846,7 +2846,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } [SkipLocalsInit] - public static void HighbdIdct32x3234Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct32X3234Add(ReadOnlySpan input, Span dest, int stride, int bd) { Span output = stackalloc int[32 * 32]; Span outptr = output; @@ -2881,7 +2881,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - public static void HighbdIdct32x321Add(ReadOnlySpan input, Span dest, int stride, int bd) + public static void HighbdIdct32X321Add(ReadOnlySpan input, Span dest, int stride, int bd) { int a1; int output = HighbdWrapLow(DctConstRoundShift(input[0] * (long)CosPi1664), bd); diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/LoopFilterSse2.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/LoopFilterSse2.cs index cb4575100..0d9f496ae 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/LoopFilterSse2.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/LoopFilterSse2.cs @@ -1553,7 +1553,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } } - private static unsafe void Transpose8x16( + private static unsafe void Transpose8X16( ArrayPtr in0, ArrayPtr in1, int inP, @@ -1633,15 +1633,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp int inP, ReadOnlySpan> dst, int outP, - int num8x8ToTranspose) + int num8X8ToTranspose) { - int idx8x8 = 0; + int idx8X8 = 0; Vector128 x0, x1, x2, x3, x4, x5, x6, x7; do { - ArrayPtr input = src[idx8x8]; - ArrayPtr output = dst[idx8x8]; + ArrayPtr input = src[idx8X8]; + ArrayPtr output = dst[idx8X8]; x0 = Sse2.LoadScalarVector128((long*)(input.ToPointer() + (0 * inP))) .AsByte(); // 00 01 02 03 04 05 06 07 @@ -1697,7 +1697,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Sse2.StoreScalar((long*)(output.ToPointer() + (6 * outP)), x7.AsInt64()); // 06 16 26 36 46 56 66 76 Sse2.StoreHigh((double*)(output.ToPointer() + (7 * outP)), x7.AsDouble()); // 07 17 27 37 47 57 67 77 - } while (++idx8x8 < num8x8ToTranspose); + } while (++idx8X8 < num8X8ToTranspose); } public static unsafe void LpfVertical4Dual( @@ -1716,7 +1716,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Span> dst = stackalloc ArrayPtr[2]; // Transpose 8x16 - Transpose8x16(s.Slice(-4), s.Slice(-4 + (pitch * 8)), pitch, tDst, 16); + Transpose8X16(s.Slice(-4), s.Slice(-4 + (pitch * 8)), pitch, tDst, 16); // Loop filtering LpfHorizontal4Dual(tDst.Slice(4 * 16), 16, blimit0, limit0, thresh0, blimit1, limit1, thresh1); @@ -1770,7 +1770,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp Span> dst = stackalloc ArrayPtr[2]; // Transpose 8x16 - Transpose8x16(s.Slice(-4), s.Slice(-4 + (pitch * 8)), pitch, tDst, 16); + Transpose8X16(s.Slice(-4), s.Slice(-4 + (pitch * 8)), pitch, tDst, 16); // Loop filtering LpfHorizontal8Dual(tDst.Slice(4 * 16), 16, blimit0, limit0, thresh0, blimit1, limit1, thresh1); @@ -1823,15 +1823,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp ArrayPtr tDst = new((byte*)tDstStorage, 256); // Transpose 16x16 - Transpose8x16(s.Slice(-8), s.Slice(-8 + (8 * pitch)), pitch, tDst, 16); - Transpose8x16(s, s.Slice(8 * pitch), pitch, tDst.Slice(8 * 16), 16); + Transpose8X16(s.Slice(-8), s.Slice(-8 + (8 * pitch)), pitch, tDst, 16); + Transpose8X16(s, s.Slice(8 * pitch), pitch, tDst.Slice(8 * 16), 16); // Loop filtering LpfHorizontal16Dual(tDst.Slice(8 * 16), 16, blimit, limit, thresh); // Transpose back - Transpose8x16(tDst, tDst.Slice(8 * 16), 16, s.Slice(-8), pitch); - Transpose8x16(tDst.Slice(8), tDst.Slice(8 + (8 * 16)), 16, s.Slice(-8 + (8 * pitch)), pitch); + Transpose8X16(tDst, tDst.Slice(8 * 16), 16, s.Slice(-8), pitch); + Transpose8X16(tDst.Slice(8), tDst.Slice(8 + (8 * 16)), 16, s.Slice(-8 + (8 * pitch)), pitch); } } } \ No newline at end of file diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Prob.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Prob.cs index 4d458303c..df82dc7a9 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Prob.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Prob.cs @@ -26,10 +26,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } // MODE_MV_MAX_UPDATE_FACTOR (128) * count / MODE_MV_COUNT_SAT; - private static readonly uint[] CountToUpdateFactor = - { + private static readonly uint[] _countToUpdateFactor = + [ 0, 6, 12, 19, 25, 32, 38, 44, 51, 57, 64, 70, 76, 83, 89, 96, 102, 108, 115, 121, 128 - }; + ]; private const int ModeMvCountSat = 20; @@ -42,7 +42,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } uint count = Math.Min(den, ModeMvCountSat); - uint factor = CountToUpdateFactor[(int)count]; + uint factor = _countToUpdateFactor[(int)count]; byte prob = GetProb(ct0, den); return WeightedProb(preProb, prob, (int)factor); } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Reader.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Reader.cs index 7e5608c46..e6f34d266 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Reader.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Dsp/Reader.cs @@ -7,8 +7,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp { internal struct Reader { - private static readonly byte[] Norm = - { + private static readonly byte[] _norm = + [ 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -17,7 +17,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - }; + ]; private const int BdValueSize = sizeof(ulong) * 8; @@ -144,7 +144,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp } { - int shift = Norm[range]; + int shift = _norm[range]; range <<= shift; value <<= shift; count -= shift; @@ -203,7 +203,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp range = range - split; value = value - bigsplit; { - int shift = Norm[range]; + int shift = _norm[range]; range <<= shift; value <<= shift; count -= shift; @@ -213,7 +213,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp range = split; { - int shift = Norm[range]; + int shift = _norm[range]; range <<= shift; value <<= shift; count -= shift; @@ -235,10 +235,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp private int DecodeUniform() { - const int l = 8; - const int m = (1 << l) - 191; - int v = ReadLiteral(l - 1); - return v < m ? v : (v << 1) - m + ReadBit(); + const int L = 8; + const int M = (1 << L) - 191; + int v = ReadLiteral(L - 1); + return v < M ? v : (v << 1) - M + ReadBit(); } public int DecodeTermSubexp() @@ -264,7 +264,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Dsp public TxMode ReadTxMode() { TxMode txMode = (TxMode)ReadLiteral(2); - if (txMode == TxMode.Allow32x32) + if (txMode == TxMode.Allow32X32) { txMode += ReadBit(); } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Entropy.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Entropy.cs index 1e7e74fad..380879453 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Entropy.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Entropy.cs @@ -64,26 +64,26 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 public const int Cat5MinVal = 35; public const int Cat6MinVal = 67; - public static readonly byte[] Cat1Prob = { 159 }; - public static readonly byte[] Cat2Prob = { 165, 145 }; - public static readonly byte[] Cat3Prob = { 173, 148, 140 }; - public static readonly byte[] Cat4Prob = { 176, 155, 140, 135 }; - public static readonly byte[] Cat5Prob = { 180, 157, 141, 134, 130 }; + public static readonly byte[] Cat1Prob = [159]; + public static readonly byte[] Cat2Prob = [165, 145]; + public static readonly byte[] Cat3Prob = [173, 148, 140]; + public static readonly byte[] Cat4Prob = [176, 155, 140, 135]; + public static readonly byte[] Cat5Prob = [180, 157, 141, 134, 130]; public static readonly byte[] Cat6Prob = - { + [ 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 - }; + ]; public static readonly byte[] Cat6ProbHigh12 = - { + [ 255, 255, 255, 255, 254, 254, 54, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 - }; + ]; public const int EobModelToken = 3; - private static readonly byte[] CoefbandTrans8x8Plus = - { + private static readonly byte[] _coefbandTrans8X8Plus = + [ 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, // beyond MAXBAND_INDEX+1 all values are filled as 5 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -114,260 +114,260 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 - }; + ]; - private static readonly byte[] CoefbandTrans4x4 = { 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5 }; + private static readonly byte[] _coefbandTrans4X4 = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5]; public static readonly byte[][] Pareto8Full = - { - new byte[] { 3, 86, 128, 6, 86, 23, 88, 29 }, new byte[] { 6, 86, 128, 11, 87, 42, 91, 52 }, - new byte[] { 9, 86, 129, 17, 88, 61, 94, 76 }, new byte[] { 12, 86, 129, 22, 88, 77, 97, 93 }, - new byte[] { 15, 87, 129, 28, 89, 93, 100, 110 }, new byte[] { 17, 87, 129, 33, 90, 105, 103, 123 }, - new byte[] { 20, 88, 130, 38, 91, 118, 106, 136 }, new byte[] { 23, 88, 130, 43, 91, 128, 108, 146 }, - new byte[] { 26, 89, 131, 48, 92, 139, 111, 156 }, new byte[] { 28, 89, 131, 53, 93, 147, 114, 163 }, - new byte[] { 31, 90, 131, 58, 94, 156, 117, 171 }, new byte[] { 34, 90, 131, 62, 94, 163, 119, 177 }, - new byte[] { 37, 90, 132, 66, 95, 171, 122, 184 }, new byte[] { 39, 90, 132, 70, 96, 177, 124, 189 }, - new byte[] { 42, 91, 132, 75, 97, 183, 127, 194 }, new byte[] { 44, 91, 132, 79, 97, 188, 129, 198 }, - new byte[] { 47, 92, 133, 83, 98, 193, 132, 202 }, new byte[] { 49, 92, 133, 86, 99, 197, 134, 205 }, - new byte[] { 52, 93, 133, 90, 100, 201, 137, 208 }, new byte[] { 54, 93, 133, 94, 100, 204, 139, 211 }, - new byte[] { 57, 94, 134, 98, 101, 208, 142, 214 }, new byte[] { 59, 94, 134, 101, 102, 211, 144, 216 }, - new byte[] { 62, 94, 135, 105, 103, 214, 146, 218 }, - new byte[] { 64, 94, 135, 108, 103, 216, 148, 220 }, - new byte[] { 66, 95, 135, 111, 104, 219, 151, 222 }, - new byte[] { 68, 95, 135, 114, 105, 221, 153, 223 }, - new byte[] { 71, 96, 136, 117, 106, 224, 155, 225 }, - new byte[] { 73, 96, 136, 120, 106, 225, 157, 226 }, - new byte[] { 76, 97, 136, 123, 107, 227, 159, 228 }, - new byte[] { 78, 97, 136, 126, 108, 229, 160, 229 }, - new byte[] { 80, 98, 137, 129, 109, 231, 162, 231 }, - new byte[] { 82, 98, 137, 131, 109, 232, 164, 232 }, - new byte[] { 84, 98, 138, 134, 110, 234, 166, 233 }, - new byte[] { 86, 98, 138, 137, 111, 235, 168, 234 }, - new byte[] { 89, 99, 138, 140, 112, 236, 170, 235 }, - new byte[] { 91, 99, 138, 142, 112, 237, 171, 235 }, - new byte[] { 93, 100, 139, 145, 113, 238, 173, 236 }, - new byte[] { 95, 100, 139, 147, 114, 239, 174, 237 }, - new byte[] { 97, 101, 140, 149, 115, 240, 176, 238 }, - new byte[] { 99, 101, 140, 151, 115, 241, 177, 238 }, - new byte[] { 101, 102, 140, 154, 116, 242, 179, 239 }, - new byte[] { 103, 102, 140, 156, 117, 242, 180, 239 }, - new byte[] { 105, 103, 141, 158, 118, 243, 182, 240 }, - new byte[] { 107, 103, 141, 160, 118, 243, 183, 240 }, - new byte[] { 109, 104, 141, 162, 119, 244, 185, 241 }, - new byte[] { 111, 104, 141, 164, 119, 244, 186, 241 }, - new byte[] { 113, 104, 142, 166, 120, 245, 187, 242 }, - new byte[] { 114, 104, 142, 168, 121, 245, 188, 242 }, - new byte[] { 116, 105, 143, 170, 122, 246, 190, 243 }, - new byte[] { 118, 105, 143, 171, 122, 246, 191, 243 }, - new byte[] { 120, 106, 143, 173, 123, 247, 192, 244 }, - new byte[] { 121, 106, 143, 175, 124, 247, 193, 244 }, - new byte[] { 123, 107, 144, 177, 125, 248, 195, 244 }, - new byte[] { 125, 107, 144, 178, 125, 248, 196, 244 }, - new byte[] { 127, 108, 145, 180, 126, 249, 197, 245 }, - new byte[] { 128, 108, 145, 181, 127, 249, 198, 245 }, - new byte[] { 130, 109, 145, 183, 128, 249, 199, 245 }, - new byte[] { 132, 109, 145, 184, 128, 249, 200, 245 }, - new byte[] { 134, 110, 146, 186, 129, 250, 201, 246 }, - new byte[] { 135, 110, 146, 187, 130, 250, 202, 246 }, - new byte[] { 137, 111, 147, 189, 131, 251, 203, 246 }, - new byte[] { 138, 111, 147, 190, 131, 251, 204, 246 }, - new byte[] { 140, 112, 147, 192, 132, 251, 205, 247 }, - new byte[] { 141, 112, 147, 193, 132, 251, 206, 247 }, - new byte[] { 143, 113, 148, 194, 133, 251, 207, 247 }, - new byte[] { 144, 113, 148, 195, 134, 251, 207, 247 }, - new byte[] { 146, 114, 149, 197, 135, 252, 208, 248 }, - new byte[] { 147, 114, 149, 198, 135, 252, 209, 248 }, - new byte[] { 149, 115, 149, 199, 136, 252, 210, 248 }, - new byte[] { 150, 115, 149, 200, 137, 252, 210, 248 }, - new byte[] { 152, 115, 150, 201, 138, 252, 211, 248 }, - new byte[] { 153, 115, 150, 202, 138, 252, 212, 248 }, - new byte[] { 155, 116, 151, 204, 139, 253, 213, 249 }, - new byte[] { 156, 116, 151, 205, 139, 253, 213, 249 }, - new byte[] { 158, 117, 151, 206, 140, 253, 214, 249 }, - new byte[] { 159, 117, 151, 207, 141, 253, 215, 249 }, - new byte[] { 161, 118, 152, 208, 142, 253, 216, 249 }, - new byte[] { 162, 118, 152, 209, 142, 253, 216, 249 }, - new byte[] { 163, 119, 153, 210, 143, 253, 217, 249 }, - new byte[] { 164, 119, 153, 211, 143, 253, 217, 249 }, - new byte[] { 166, 120, 153, 212, 144, 254, 218, 250 }, - new byte[] { 167, 120, 153, 212, 145, 254, 219, 250 }, - new byte[] { 168, 121, 154, 213, 146, 254, 220, 250 }, - new byte[] { 169, 121, 154, 214, 146, 254, 220, 250 }, - new byte[] { 171, 122, 155, 215, 147, 254, 221, 250 }, - new byte[] { 172, 122, 155, 216, 147, 254, 221, 250 }, - new byte[] { 173, 123, 155, 217, 148, 254, 222, 250 }, - new byte[] { 174, 123, 155, 217, 149, 254, 222, 250 }, - new byte[] { 176, 124, 156, 218, 150, 254, 223, 250 }, - new byte[] { 177, 124, 156, 219, 150, 254, 223, 250 }, - new byte[] { 178, 125, 157, 220, 151, 254, 224, 251 }, - new byte[] { 179, 125, 157, 220, 151, 254, 224, 251 }, - new byte[] { 180, 126, 157, 221, 152, 254, 225, 251 }, - new byte[] { 181, 126, 157, 221, 152, 254, 225, 251 }, - new byte[] { 183, 127, 158, 222, 153, 254, 226, 251 }, - new byte[] { 184, 127, 158, 223, 154, 254, 226, 251 }, - new byte[] { 185, 128, 159, 224, 155, 255, 227, 251 }, - new byte[] { 186, 128, 159, 224, 155, 255, 227, 251 }, - new byte[] { 187, 129, 160, 225, 156, 255, 228, 251 }, - new byte[] { 188, 130, 160, 225, 156, 255, 228, 251 }, - new byte[] { 189, 131, 160, 226, 157, 255, 228, 251 }, - new byte[] { 190, 131, 160, 226, 158, 255, 228, 251 }, - new byte[] { 191, 132, 161, 227, 159, 255, 229, 251 }, - new byte[] { 192, 132, 161, 227, 159, 255, 229, 251 }, - new byte[] { 193, 133, 162, 228, 160, 255, 230, 252 }, - new byte[] { 194, 133, 162, 229, 160, 255, 230, 252 }, - new byte[] { 195, 134, 163, 230, 161, 255, 231, 252 }, - new byte[] { 196, 134, 163, 230, 161, 255, 231, 252 }, - new byte[] { 197, 135, 163, 231, 162, 255, 231, 252 }, - new byte[] { 198, 135, 163, 231, 162, 255, 231, 252 }, - new byte[] { 199, 136, 164, 232, 163, 255, 232, 252 }, - new byte[] { 200, 136, 164, 232, 164, 255, 232, 252 }, - new byte[] { 201, 137, 165, 233, 165, 255, 233, 252 }, - new byte[] { 201, 137, 165, 233, 165, 255, 233, 252 }, - new byte[] { 202, 138, 166, 233, 166, 255, 233, 252 }, - new byte[] { 203, 138, 166, 233, 166, 255, 233, 252 }, - new byte[] { 204, 139, 166, 234, 167, 255, 234, 252 }, - new byte[] { 205, 139, 166, 234, 167, 255, 234, 252 }, - new byte[] { 206, 140, 167, 235, 168, 255, 235, 252 }, - new byte[] { 206, 140, 167, 235, 168, 255, 235, 252 }, - new byte[] { 207, 141, 168, 236, 169, 255, 235, 252 }, - new byte[] { 208, 141, 168, 236, 170, 255, 235, 252 }, - new byte[] { 209, 142, 169, 237, 171, 255, 236, 252 }, - new byte[] { 209, 143, 169, 237, 171, 255, 236, 252 }, - new byte[] { 210, 144, 169, 237, 172, 255, 236, 252 }, - new byte[] { 211, 144, 169, 237, 172, 255, 236, 252 }, - new byte[] { 212, 145, 170, 238, 173, 255, 237, 252 }, - new byte[] { 213, 145, 170, 238, 173, 255, 237, 252 }, - new byte[] { 214, 146, 171, 239, 174, 255, 237, 253 }, - new byte[] { 214, 146, 171, 239, 174, 255, 237, 253 }, - new byte[] { 215, 147, 172, 240, 175, 255, 238, 253 }, - new byte[] { 215, 147, 172, 240, 175, 255, 238, 253 }, - new byte[] { 216, 148, 173, 240, 176, 255, 238, 253 }, - new byte[] { 217, 148, 173, 240, 176, 255, 238, 253 }, - new byte[] { 218, 149, 173, 241, 177, 255, 239, 253 }, - new byte[] { 218, 149, 173, 241, 178, 255, 239, 253 }, - new byte[] { 219, 150, 174, 241, 179, 255, 239, 253 }, - new byte[] { 219, 151, 174, 241, 179, 255, 239, 253 }, - new byte[] { 220, 152, 175, 242, 180, 255, 240, 253 }, - new byte[] { 221, 152, 175, 242, 180, 255, 240, 253 }, - new byte[] { 222, 153, 176, 242, 181, 255, 240, 253 }, - new byte[] { 222, 153, 176, 242, 181, 255, 240, 253 }, - new byte[] { 223, 154, 177, 243, 182, 255, 240, 253 }, - new byte[] { 223, 154, 177, 243, 182, 255, 240, 253 }, - new byte[] { 224, 155, 178, 244, 183, 255, 241, 253 }, - new byte[] { 224, 155, 178, 244, 183, 255, 241, 253 }, - new byte[] { 225, 156, 178, 244, 184, 255, 241, 253 }, - new byte[] { 225, 157, 178, 244, 184, 255, 241, 253 }, - new byte[] { 226, 158, 179, 244, 185, 255, 242, 253 }, - new byte[] { 227, 158, 179, 244, 185, 255, 242, 253 }, - new byte[] { 228, 159, 180, 245, 186, 255, 242, 253 }, - new byte[] { 228, 159, 180, 245, 186, 255, 242, 253 }, - new byte[] { 229, 160, 181, 245, 187, 255, 242, 253 }, - new byte[] { 229, 160, 181, 245, 187, 255, 242, 253 }, - new byte[] { 230, 161, 182, 246, 188, 255, 243, 253 }, - new byte[] { 230, 162, 182, 246, 188, 255, 243, 253 }, - new byte[] { 231, 163, 183, 246, 189, 255, 243, 253 }, - new byte[] { 231, 163, 183, 246, 189, 255, 243, 253 }, - new byte[] { 232, 164, 184, 247, 190, 255, 243, 253 }, - new byte[] { 232, 164, 184, 247, 190, 255, 243, 253 }, - new byte[] { 233, 165, 185, 247, 191, 255, 244, 253 }, - new byte[] { 233, 165, 185, 247, 191, 255, 244, 253 }, - new byte[] { 234, 166, 185, 247, 192, 255, 244, 253 }, - new byte[] { 234, 167, 185, 247, 192, 255, 244, 253 }, - new byte[] { 235, 168, 186, 248, 193, 255, 244, 253 }, - new byte[] { 235, 168, 186, 248, 193, 255, 244, 253 }, - new byte[] { 236, 169, 187, 248, 194, 255, 244, 253 }, - new byte[] { 236, 169, 187, 248, 194, 255, 244, 253 }, - new byte[] { 236, 170, 188, 248, 195, 255, 245, 253 }, - new byte[] { 236, 170, 188, 248, 195, 255, 245, 253 }, - new byte[] { 237, 171, 189, 249, 196, 255, 245, 254 }, - new byte[] { 237, 172, 189, 249, 196, 255, 245, 254 }, - new byte[] { 238, 173, 190, 249, 197, 255, 245, 254 }, - new byte[] { 238, 173, 190, 249, 197, 255, 245, 254 }, - new byte[] { 239, 174, 191, 249, 198, 255, 245, 254 }, - new byte[] { 239, 174, 191, 249, 198, 255, 245, 254 }, - new byte[] { 240, 175, 192, 249, 199, 255, 246, 254 }, - new byte[] { 240, 176, 192, 249, 199, 255, 246, 254 }, - new byte[] { 240, 177, 193, 250, 200, 255, 246, 254 }, - new byte[] { 240, 177, 193, 250, 200, 255, 246, 254 }, - new byte[] { 241, 178, 194, 250, 201, 255, 246, 254 }, - new byte[] { 241, 178, 194, 250, 201, 255, 246, 254 }, - new byte[] { 242, 179, 195, 250, 202, 255, 246, 254 }, - new byte[] { 242, 180, 195, 250, 202, 255, 246, 254 }, - new byte[] { 242, 181, 196, 250, 203, 255, 247, 254 }, - new byte[] { 242, 181, 196, 250, 203, 255, 247, 254 }, - new byte[] { 243, 182, 197, 251, 204, 255, 247, 254 }, - new byte[] { 243, 183, 197, 251, 204, 255, 247, 254 }, - new byte[] { 244, 184, 198, 251, 205, 255, 247, 254 }, - new byte[] { 244, 184, 198, 251, 205, 255, 247, 254 }, - new byte[] { 244, 185, 199, 251, 206, 255, 247, 254 }, - new byte[] { 244, 185, 199, 251, 206, 255, 247, 254 }, - new byte[] { 245, 186, 200, 251, 207, 255, 247, 254 }, - new byte[] { 245, 187, 200, 251, 207, 255, 247, 254 }, - new byte[] { 246, 188, 201, 252, 207, 255, 248, 254 }, - new byte[] { 246, 188, 201, 252, 207, 255, 248, 254 }, - new byte[] { 246, 189, 202, 252, 208, 255, 248, 254 }, - new byte[] { 246, 190, 202, 252, 208, 255, 248, 254 }, - new byte[] { 247, 191, 203, 252, 209, 255, 248, 254 }, - new byte[] { 247, 191, 203, 252, 209, 255, 248, 254 }, - new byte[] { 247, 192, 204, 252, 210, 255, 248, 254 }, - new byte[] { 247, 193, 204, 252, 210, 255, 248, 254 }, - new byte[] { 248, 194, 205, 252, 211, 255, 248, 254 }, - new byte[] { 248, 194, 205, 252, 211, 255, 248, 254 }, - new byte[] { 248, 195, 206, 252, 212, 255, 249, 254 }, - new byte[] { 248, 196, 206, 252, 212, 255, 249, 254 }, - new byte[] { 249, 197, 207, 253, 213, 255, 249, 254 }, - new byte[] { 249, 197, 207, 253, 213, 255, 249, 254 }, - new byte[] { 249, 198, 208, 253, 214, 255, 249, 254 }, - new byte[] { 249, 199, 209, 253, 214, 255, 249, 254 }, - new byte[] { 250, 200, 210, 253, 215, 255, 249, 254 }, - new byte[] { 250, 200, 210, 253, 215, 255, 249, 254 }, - new byte[] { 250, 201, 211, 253, 215, 255, 249, 254 }, - new byte[] { 250, 202, 211, 253, 215, 255, 249, 254 }, - new byte[] { 250, 203, 212, 253, 216, 255, 249, 254 }, - new byte[] { 250, 203, 212, 253, 216, 255, 249, 254 }, - new byte[] { 251, 204, 213, 253, 217, 255, 250, 254 }, - new byte[] { 251, 205, 213, 253, 217, 255, 250, 254 }, - new byte[] { 251, 206, 214, 254, 218, 255, 250, 254 }, - new byte[] { 251, 206, 215, 254, 218, 255, 250, 254 }, - new byte[] { 252, 207, 216, 254, 219, 255, 250, 254 }, - new byte[] { 252, 208, 216, 254, 219, 255, 250, 254 }, - new byte[] { 252, 209, 217, 254, 220, 255, 250, 254 }, - new byte[] { 252, 210, 217, 254, 220, 255, 250, 254 }, - new byte[] { 252, 211, 218, 254, 221, 255, 250, 254 }, - new byte[] { 252, 212, 218, 254, 221, 255, 250, 254 }, - new byte[] { 253, 213, 219, 254, 222, 255, 250, 254 }, - new byte[] { 253, 213, 220, 254, 222, 255, 250, 254 }, - new byte[] { 253, 214, 221, 254, 223, 255, 250, 254 }, - new byte[] { 253, 215, 221, 254, 223, 255, 250, 254 }, - new byte[] { 253, 216, 222, 254, 224, 255, 251, 254 }, - new byte[] { 253, 217, 223, 254, 224, 255, 251, 254 }, - new byte[] { 253, 218, 224, 254, 225, 255, 251, 254 }, - new byte[] { 253, 219, 224, 254, 225, 255, 251, 254 }, - new byte[] { 254, 220, 225, 254, 225, 255, 251, 254 }, - new byte[] { 254, 221, 226, 254, 225, 255, 251, 254 }, - new byte[] { 254, 222, 227, 255, 226, 255, 251, 254 }, - new byte[] { 254, 223, 227, 255, 226, 255, 251, 254 }, - new byte[] { 254, 224, 228, 255, 227, 255, 251, 254 }, - new byte[] { 254, 225, 229, 255, 227, 255, 251, 254 }, - new byte[] { 254, 226, 230, 255, 228, 255, 251, 254 }, - new byte[] { 254, 227, 230, 255, 229, 255, 251, 254 }, - new byte[] { 255, 228, 231, 255, 230, 255, 251, 254 }, - new byte[] { 255, 229, 232, 255, 230, 255, 251, 254 }, - new byte[] { 255, 230, 233, 255, 231, 255, 252, 254 }, - new byte[] { 255, 231, 234, 255, 231, 255, 252, 254 }, - new byte[] { 255, 232, 235, 255, 232, 255, 252, 254 }, - new byte[] { 255, 233, 236, 255, 232, 255, 252, 254 }, - new byte[] { 255, 235, 237, 255, 233, 255, 252, 254 }, - new byte[] { 255, 236, 238, 255, 234, 255, 252, 254 }, - new byte[] { 255, 238, 240, 255, 235, 255, 252, 255 }, - new byte[] { 255, 239, 241, 255, 235, 255, 252, 254 }, - new byte[] { 255, 241, 243, 255, 236, 255, 252, 254 }, - new byte[] { 255, 243, 245, 255, 237, 255, 252, 254 }, - new byte[] { 255, 246, 247, 255, 239, 255, 253, 255 } - }; + [ + [3, 86, 128, 6, 86, 23, 88, 29], [6, 86, 128, 11, 87, 42, 91, 52], + [9, 86, 129, 17, 88, 61, 94, 76], [12, 86, 129, 22, 88, 77, 97, 93], + [15, 87, 129, 28, 89, 93, 100, 110], [17, 87, 129, 33, 90, 105, 103, 123], + [20, 88, 130, 38, 91, 118, 106, 136], [23, 88, 130, 43, 91, 128, 108, 146], + [26, 89, 131, 48, 92, 139, 111, 156], [28, 89, 131, 53, 93, 147, 114, 163], + [31, 90, 131, 58, 94, 156, 117, 171], [34, 90, 131, 62, 94, 163, 119, 177], + [37, 90, 132, 66, 95, 171, 122, 184], [39, 90, 132, 70, 96, 177, 124, 189], + [42, 91, 132, 75, 97, 183, 127, 194], [44, 91, 132, 79, 97, 188, 129, 198], + [47, 92, 133, 83, 98, 193, 132, 202], [49, 92, 133, 86, 99, 197, 134, 205], + [52, 93, 133, 90, 100, 201, 137, 208], [54, 93, 133, 94, 100, 204, 139, 211], + [57, 94, 134, 98, 101, 208, 142, 214], [59, 94, 134, 101, 102, 211, 144, 216], + [62, 94, 135, 105, 103, 214, 146, 218], + [64, 94, 135, 108, 103, 216, 148, 220], + [66, 95, 135, 111, 104, 219, 151, 222], + [68, 95, 135, 114, 105, 221, 153, 223], + [71, 96, 136, 117, 106, 224, 155, 225], + [73, 96, 136, 120, 106, 225, 157, 226], + [76, 97, 136, 123, 107, 227, 159, 228], + [78, 97, 136, 126, 108, 229, 160, 229], + [80, 98, 137, 129, 109, 231, 162, 231], + [82, 98, 137, 131, 109, 232, 164, 232], + [84, 98, 138, 134, 110, 234, 166, 233], + [86, 98, 138, 137, 111, 235, 168, 234], + [89, 99, 138, 140, 112, 236, 170, 235], + [91, 99, 138, 142, 112, 237, 171, 235], + [93, 100, 139, 145, 113, 238, 173, 236], + [95, 100, 139, 147, 114, 239, 174, 237], + [97, 101, 140, 149, 115, 240, 176, 238], + [99, 101, 140, 151, 115, 241, 177, 238], + [101, 102, 140, 154, 116, 242, 179, 239], + [103, 102, 140, 156, 117, 242, 180, 239], + [105, 103, 141, 158, 118, 243, 182, 240], + [107, 103, 141, 160, 118, 243, 183, 240], + [109, 104, 141, 162, 119, 244, 185, 241], + [111, 104, 141, 164, 119, 244, 186, 241], + [113, 104, 142, 166, 120, 245, 187, 242], + [114, 104, 142, 168, 121, 245, 188, 242], + [116, 105, 143, 170, 122, 246, 190, 243], + [118, 105, 143, 171, 122, 246, 191, 243], + [120, 106, 143, 173, 123, 247, 192, 244], + [121, 106, 143, 175, 124, 247, 193, 244], + [123, 107, 144, 177, 125, 248, 195, 244], + [125, 107, 144, 178, 125, 248, 196, 244], + [127, 108, 145, 180, 126, 249, 197, 245], + [128, 108, 145, 181, 127, 249, 198, 245], + [130, 109, 145, 183, 128, 249, 199, 245], + [132, 109, 145, 184, 128, 249, 200, 245], + [134, 110, 146, 186, 129, 250, 201, 246], + [135, 110, 146, 187, 130, 250, 202, 246], + [137, 111, 147, 189, 131, 251, 203, 246], + [138, 111, 147, 190, 131, 251, 204, 246], + [140, 112, 147, 192, 132, 251, 205, 247], + [141, 112, 147, 193, 132, 251, 206, 247], + [143, 113, 148, 194, 133, 251, 207, 247], + [144, 113, 148, 195, 134, 251, 207, 247], + [146, 114, 149, 197, 135, 252, 208, 248], + [147, 114, 149, 198, 135, 252, 209, 248], + [149, 115, 149, 199, 136, 252, 210, 248], + [150, 115, 149, 200, 137, 252, 210, 248], + [152, 115, 150, 201, 138, 252, 211, 248], + [153, 115, 150, 202, 138, 252, 212, 248], + [155, 116, 151, 204, 139, 253, 213, 249], + [156, 116, 151, 205, 139, 253, 213, 249], + [158, 117, 151, 206, 140, 253, 214, 249], + [159, 117, 151, 207, 141, 253, 215, 249], + [161, 118, 152, 208, 142, 253, 216, 249], + [162, 118, 152, 209, 142, 253, 216, 249], + [163, 119, 153, 210, 143, 253, 217, 249], + [164, 119, 153, 211, 143, 253, 217, 249], + [166, 120, 153, 212, 144, 254, 218, 250], + [167, 120, 153, 212, 145, 254, 219, 250], + [168, 121, 154, 213, 146, 254, 220, 250], + [169, 121, 154, 214, 146, 254, 220, 250], + [171, 122, 155, 215, 147, 254, 221, 250], + [172, 122, 155, 216, 147, 254, 221, 250], + [173, 123, 155, 217, 148, 254, 222, 250], + [174, 123, 155, 217, 149, 254, 222, 250], + [176, 124, 156, 218, 150, 254, 223, 250], + [177, 124, 156, 219, 150, 254, 223, 250], + [178, 125, 157, 220, 151, 254, 224, 251], + [179, 125, 157, 220, 151, 254, 224, 251], + [180, 126, 157, 221, 152, 254, 225, 251], + [181, 126, 157, 221, 152, 254, 225, 251], + [183, 127, 158, 222, 153, 254, 226, 251], + [184, 127, 158, 223, 154, 254, 226, 251], + [185, 128, 159, 224, 155, 255, 227, 251], + [186, 128, 159, 224, 155, 255, 227, 251], + [187, 129, 160, 225, 156, 255, 228, 251], + [188, 130, 160, 225, 156, 255, 228, 251], + [189, 131, 160, 226, 157, 255, 228, 251], + [190, 131, 160, 226, 158, 255, 228, 251], + [191, 132, 161, 227, 159, 255, 229, 251], + [192, 132, 161, 227, 159, 255, 229, 251], + [193, 133, 162, 228, 160, 255, 230, 252], + [194, 133, 162, 229, 160, 255, 230, 252], + [195, 134, 163, 230, 161, 255, 231, 252], + [196, 134, 163, 230, 161, 255, 231, 252], + [197, 135, 163, 231, 162, 255, 231, 252], + [198, 135, 163, 231, 162, 255, 231, 252], + [199, 136, 164, 232, 163, 255, 232, 252], + [200, 136, 164, 232, 164, 255, 232, 252], + [201, 137, 165, 233, 165, 255, 233, 252], + [201, 137, 165, 233, 165, 255, 233, 252], + [202, 138, 166, 233, 166, 255, 233, 252], + [203, 138, 166, 233, 166, 255, 233, 252], + [204, 139, 166, 234, 167, 255, 234, 252], + [205, 139, 166, 234, 167, 255, 234, 252], + [206, 140, 167, 235, 168, 255, 235, 252], + [206, 140, 167, 235, 168, 255, 235, 252], + [207, 141, 168, 236, 169, 255, 235, 252], + [208, 141, 168, 236, 170, 255, 235, 252], + [209, 142, 169, 237, 171, 255, 236, 252], + [209, 143, 169, 237, 171, 255, 236, 252], + [210, 144, 169, 237, 172, 255, 236, 252], + [211, 144, 169, 237, 172, 255, 236, 252], + [212, 145, 170, 238, 173, 255, 237, 252], + [213, 145, 170, 238, 173, 255, 237, 252], + [214, 146, 171, 239, 174, 255, 237, 253], + [214, 146, 171, 239, 174, 255, 237, 253], + [215, 147, 172, 240, 175, 255, 238, 253], + [215, 147, 172, 240, 175, 255, 238, 253], + [216, 148, 173, 240, 176, 255, 238, 253], + [217, 148, 173, 240, 176, 255, 238, 253], + [218, 149, 173, 241, 177, 255, 239, 253], + [218, 149, 173, 241, 178, 255, 239, 253], + [219, 150, 174, 241, 179, 255, 239, 253], + [219, 151, 174, 241, 179, 255, 239, 253], + [220, 152, 175, 242, 180, 255, 240, 253], + [221, 152, 175, 242, 180, 255, 240, 253], + [222, 153, 176, 242, 181, 255, 240, 253], + [222, 153, 176, 242, 181, 255, 240, 253], + [223, 154, 177, 243, 182, 255, 240, 253], + [223, 154, 177, 243, 182, 255, 240, 253], + [224, 155, 178, 244, 183, 255, 241, 253], + [224, 155, 178, 244, 183, 255, 241, 253], + [225, 156, 178, 244, 184, 255, 241, 253], + [225, 157, 178, 244, 184, 255, 241, 253], + [226, 158, 179, 244, 185, 255, 242, 253], + [227, 158, 179, 244, 185, 255, 242, 253], + [228, 159, 180, 245, 186, 255, 242, 253], + [228, 159, 180, 245, 186, 255, 242, 253], + [229, 160, 181, 245, 187, 255, 242, 253], + [229, 160, 181, 245, 187, 255, 242, 253], + [230, 161, 182, 246, 188, 255, 243, 253], + [230, 162, 182, 246, 188, 255, 243, 253], + [231, 163, 183, 246, 189, 255, 243, 253], + [231, 163, 183, 246, 189, 255, 243, 253], + [232, 164, 184, 247, 190, 255, 243, 253], + [232, 164, 184, 247, 190, 255, 243, 253], + [233, 165, 185, 247, 191, 255, 244, 253], + [233, 165, 185, 247, 191, 255, 244, 253], + [234, 166, 185, 247, 192, 255, 244, 253], + [234, 167, 185, 247, 192, 255, 244, 253], + [235, 168, 186, 248, 193, 255, 244, 253], + [235, 168, 186, 248, 193, 255, 244, 253], + [236, 169, 187, 248, 194, 255, 244, 253], + [236, 169, 187, 248, 194, 255, 244, 253], + [236, 170, 188, 248, 195, 255, 245, 253], + [236, 170, 188, 248, 195, 255, 245, 253], + [237, 171, 189, 249, 196, 255, 245, 254], + [237, 172, 189, 249, 196, 255, 245, 254], + [238, 173, 190, 249, 197, 255, 245, 254], + [238, 173, 190, 249, 197, 255, 245, 254], + [239, 174, 191, 249, 198, 255, 245, 254], + [239, 174, 191, 249, 198, 255, 245, 254], + [240, 175, 192, 249, 199, 255, 246, 254], + [240, 176, 192, 249, 199, 255, 246, 254], + [240, 177, 193, 250, 200, 255, 246, 254], + [240, 177, 193, 250, 200, 255, 246, 254], + [241, 178, 194, 250, 201, 255, 246, 254], + [241, 178, 194, 250, 201, 255, 246, 254], + [242, 179, 195, 250, 202, 255, 246, 254], + [242, 180, 195, 250, 202, 255, 246, 254], + [242, 181, 196, 250, 203, 255, 247, 254], + [242, 181, 196, 250, 203, 255, 247, 254], + [243, 182, 197, 251, 204, 255, 247, 254], + [243, 183, 197, 251, 204, 255, 247, 254], + [244, 184, 198, 251, 205, 255, 247, 254], + [244, 184, 198, 251, 205, 255, 247, 254], + [244, 185, 199, 251, 206, 255, 247, 254], + [244, 185, 199, 251, 206, 255, 247, 254], + [245, 186, 200, 251, 207, 255, 247, 254], + [245, 187, 200, 251, 207, 255, 247, 254], + [246, 188, 201, 252, 207, 255, 248, 254], + [246, 188, 201, 252, 207, 255, 248, 254], + [246, 189, 202, 252, 208, 255, 248, 254], + [246, 190, 202, 252, 208, 255, 248, 254], + [247, 191, 203, 252, 209, 255, 248, 254], + [247, 191, 203, 252, 209, 255, 248, 254], + [247, 192, 204, 252, 210, 255, 248, 254], + [247, 193, 204, 252, 210, 255, 248, 254], + [248, 194, 205, 252, 211, 255, 248, 254], + [248, 194, 205, 252, 211, 255, 248, 254], + [248, 195, 206, 252, 212, 255, 249, 254], + [248, 196, 206, 252, 212, 255, 249, 254], + [249, 197, 207, 253, 213, 255, 249, 254], + [249, 197, 207, 253, 213, 255, 249, 254], + [249, 198, 208, 253, 214, 255, 249, 254], + [249, 199, 209, 253, 214, 255, 249, 254], + [250, 200, 210, 253, 215, 255, 249, 254], + [250, 200, 210, 253, 215, 255, 249, 254], + [250, 201, 211, 253, 215, 255, 249, 254], + [250, 202, 211, 253, 215, 255, 249, 254], + [250, 203, 212, 253, 216, 255, 249, 254], + [250, 203, 212, 253, 216, 255, 249, 254], + [251, 204, 213, 253, 217, 255, 250, 254], + [251, 205, 213, 253, 217, 255, 250, 254], + [251, 206, 214, 254, 218, 255, 250, 254], + [251, 206, 215, 254, 218, 255, 250, 254], + [252, 207, 216, 254, 219, 255, 250, 254], + [252, 208, 216, 254, 219, 255, 250, 254], + [252, 209, 217, 254, 220, 255, 250, 254], + [252, 210, 217, 254, 220, 255, 250, 254], + [252, 211, 218, 254, 221, 255, 250, 254], + [252, 212, 218, 254, 221, 255, 250, 254], + [253, 213, 219, 254, 222, 255, 250, 254], + [253, 213, 220, 254, 222, 255, 250, 254], + [253, 214, 221, 254, 223, 255, 250, 254], + [253, 215, 221, 254, 223, 255, 250, 254], + [253, 216, 222, 254, 224, 255, 251, 254], + [253, 217, 223, 254, 224, 255, 251, 254], + [253, 218, 224, 254, 225, 255, 251, 254], + [253, 219, 224, 254, 225, 255, 251, 254], + [254, 220, 225, 254, 225, 255, 251, 254], + [254, 221, 226, 254, 225, 255, 251, 254], + [254, 222, 227, 255, 226, 255, 251, 254], + [254, 223, 227, 255, 226, 255, 251, 254], + [254, 224, 228, 255, 227, 255, 251, 254], + [254, 225, 229, 255, 227, 255, 251, 254], + [254, 226, 230, 255, 228, 255, 251, 254], + [254, 227, 230, 255, 229, 255, 251, 254], + [255, 228, 231, 255, 230, 255, 251, 254], + [255, 229, 232, 255, 230, 255, 251, 254], + [255, 230, 233, 255, 231, 255, 252, 254], + [255, 231, 234, 255, 231, 255, 252, 254], + [255, 232, 235, 255, 232, 255, 252, 254], + [255, 233, 236, 255, 232, 255, 252, 254], + [255, 235, 237, 255, 233, 255, 252, 254], + [255, 236, 238, 255, 234, 255, 252, 254], + [255, 238, 240, 255, 235, 255, 252, 255], + [255, 239, 241, 255, 235, 255, 252, 254], + [255, 241, 243, 255, 236, 255, 252, 254], + [255, 243, 245, 255, 237, 255, 252, 254], + [255, 246, 247, 255, 239, 255, 253, 255] + ]; - internal static readonly byte[] DefaultCoefProbs4x4 = - { + internal static readonly byte[] DefaultCoefProbs4X4 = + [ // Y plane // Intra // Band 0 @@ -422,10 +422,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 127, 145, 243, 71, 129, 228, 17, 93, 177, 3, 61, 124, 1, 41, 84, 1, 21, 52, // Band 5 157, 78, 244, 140, 72, 231, 69, 58, 184, 31, 44, 137, 14, 38, 105, 8, 23, 61 - }; + ]; - internal static readonly byte[] DefaultCoefProbs8x8 = - { + internal static readonly byte[] DefaultCoefProbs8X8 = + [ // Y plane // Intra // Band 0 @@ -480,10 +480,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 62, 190, 238, 21, 159, 222, 2, 107, 172, 1, 72, 122, 1, 40, 71, 1, 18, 32, // Band 5 61, 199, 240, 27, 161, 226, 4, 113, 180, 1, 76, 129, 1, 46, 80, 1, 23, 41 - }; + ]; - internal static readonly byte[] DefaultCoefProbs16x16 = - { + internal static readonly byte[] DefaultCoefProbs16X16 = + [ // Y plane // Intra // Band 0 @@ -538,10 +538,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 40, 194, 227, 8, 147, 204, 1, 94, 155, 1, 65, 112, 1, 39, 66, 1, 14, 26, // Band 5 16, 208, 228, 3, 151, 207, 1, 98, 160, 1, 67, 117, 1, 41, 74, 1, 17, 31 - }; + ]; - internal static readonly byte[] DefaultCoefProbs32x32 = - { + internal static readonly byte[] DefaultCoefProbs32X32 = + [ // Y plane // Intra // Band 0 @@ -596,11 +596,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 84, 220, 246, 31, 177, 231, 2, 115, 180, 1, 79, 134, 1, 55, 77, 1, 60, 79, // Band 5 43, 243, 240, 8, 180, 217, 1, 115, 166, 1, 84, 121, 1, 51, 67, 1, 16, 6 - }; + ]; public static byte[] GetBandTranslate(int txSize) { - return txSize == (int)TxSize.Tx4x4 ? CoefbandTrans4x4 : CoefbandTrans8x8Plus; + return txSize == (int)TxSize.Tx4X4 ? _coefbandTrans4X4 : _coefbandTrans8X8Plus; } public static void CopyProbs(ref T dest, ReadOnlySpan probs) where T : unmanaged diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMode.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMode.cs index 3964c5fb1..586045976 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMode.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMode.cs @@ -13,173 +13,163 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 public const int TxSizeContexts = 2; public static readonly byte[][][] KfYModeProb = - { - new[] - { + [ + [ // above = dc - new byte[] { 137, 30, 42, 148, 151, 207, 70, 52, 91 }, // left = dc - new byte[] { 92, 45, 102, 136, 116, 180, 74, 90, 100 }, // left = v - new byte[] { 73, 32, 19, 187, 222, 215, 46, 34, 100 }, // left = h - new byte[] { 91, 30, 32, 116, 121, 186, 93, 86, 94 }, // left = d45 - new byte[] { 72, 35, 36, 149, 68, 206, 68, 63, 105 }, // left = d135 - new byte[] { 73, 31, 28, 138, 57, 124, 55, 122, 151 }, // left = d117 - new byte[] { 67, 23, 21, 140, 126, 197, 40, 37, 171 }, // left = d153 - new byte[] { 86, 27, 28, 128, 154, 212, 45, 43, 53 }, // left = d207 - new byte[] { 74, 32, 27, 107, 86, 160, 63, 134, 102 }, // left = d63 - new byte[] { 59, 67, 44, 140, 161, 202, 78, 67, 119 } // left = tm - }, - new[] - { + [137, 30, 42, 148, 151, 207, 70, 52, 91], // left = dc + [92, 45, 102, 136, 116, 180, 74, 90, 100], // left = v + [73, 32, 19, 187, 222, 215, 46, 34, 100], // left = h + [91, 30, 32, 116, 121, 186, 93, 86, 94], // left = d45 + [72, 35, 36, 149, 68, 206, 68, 63, 105], // left = d135 + [73, 31, 28, 138, 57, 124, 55, 122, 151], // left = d117 + [67, 23, 21, 140, 126, 197, 40, 37, 171], // left = d153 + [86, 27, 28, 128, 154, 212, 45, 43, 53], // left = d207 + [74, 32, 27, 107, 86, 160, 63, 134, 102], // left = d63 + [59, 67, 44, 140, 161, 202, 78, 67, 119] // left = tm + ], + [ // above = v - new byte[] { 63, 36, 126, 146, 123, 158, 60, 90, 96 }, // left = dc - new byte[] { 43, 46, 168, 134, 107, 128, 69, 142, 92 }, // left = v - new byte[] { 44, 29, 68, 159, 201, 177, 50, 57, 77 }, // left = h - new byte[] { 58, 38, 76, 114, 97, 172, 78, 133, 92 }, // left = d45 - new byte[] { 46, 41, 76, 140, 63, 184, 69, 112, 57 }, // left = d135 - new byte[] { 38, 32, 85, 140, 46, 112, 54, 151, 133 }, // left = d117 - new byte[] { 39, 27, 61, 131, 110, 175, 44, 75, 136 }, // left = d153 - new byte[] { 52, 30, 74, 113, 130, 175, 51, 64, 58 }, // left = d207 - new byte[] { 47, 35, 80, 100, 74, 143, 64, 163, 74 }, // left = d63 - new byte[] { 36, 61, 116, 114, 128, 162, 80, 125, 82 } // left = tm - }, - new[] - { + [63, 36, 126, 146, 123, 158, 60, 90, 96], // left = dc + [43, 46, 168, 134, 107, 128, 69, 142, 92], // left = v + [44, 29, 68, 159, 201, 177, 50, 57, 77], // left = h + [58, 38, 76, 114, 97, 172, 78, 133, 92], // left = d45 + [46, 41, 76, 140, 63, 184, 69, 112, 57], // left = d135 + [38, 32, 85, 140, 46, 112, 54, 151, 133], // left = d117 + [39, 27, 61, 131, 110, 175, 44, 75, 136], // left = d153 + [52, 30, 74, 113, 130, 175, 51, 64, 58], // left = d207 + [47, 35, 80, 100, 74, 143, 64, 163, 74], // left = d63 + [36, 61, 116, 114, 128, 162, 80, 125, 82] // left = tm + ], + [ // above = h - new byte[] { 82, 26, 26, 171, 208, 204, 44, 32, 105 }, // left = dc - new byte[] { 55, 44, 68, 166, 179, 192, 57, 57, 108 }, // left = v - new byte[] { 42, 26, 11, 199, 241, 228, 23, 15, 85 }, // left = h - new byte[] { 68, 42, 19, 131, 160, 199, 55, 52, 83 }, // left = d45 - new byte[] { 58, 50, 25, 139, 115, 232, 39, 52, 118 }, // left = d135 - new byte[] { 50, 35, 33, 153, 104, 162, 64, 59, 131 }, // left = d117 - new byte[] { 44, 24, 16, 150, 177, 202, 33, 19, 156 }, // left = d153 - new byte[] { 55, 27, 12, 153, 203, 218, 26, 27, 49 }, // left = d207 - new byte[] { 53, 49, 21, 110, 116, 168, 59, 80, 76 }, // left = d63 - new byte[] { 38, 72, 19, 168, 203, 212, 50, 50, 107 } // left = tm - }, - new[] - { + [82, 26, 26, 171, 208, 204, 44, 32, 105], // left = dc + [55, 44, 68, 166, 179, 192, 57, 57, 108], // left = v + [42, 26, 11, 199, 241, 228, 23, 15, 85], // left = h + [68, 42, 19, 131, 160, 199, 55, 52, 83], // left = d45 + [58, 50, 25, 139, 115, 232, 39, 52, 118], // left = d135 + [50, 35, 33, 153, 104, 162, 64, 59, 131], // left = d117 + [44, 24, 16, 150, 177, 202, 33, 19, 156], // left = d153 + [55, 27, 12, 153, 203, 218, 26, 27, 49], // left = d207 + [53, 49, 21, 110, 116, 168, 59, 80, 76], // left = d63 + [38, 72, 19, 168, 203, 212, 50, 50, 107] // left = tm + ], + [ // above = d45 - new byte[] { 103, 26, 36, 129, 132, 201, 83, 80, 93 }, // left = dc - new byte[] { 59, 38, 83, 112, 103, 162, 98, 136, 90 }, // left = v - new byte[] { 62, 30, 23, 158, 200, 207, 59, 57, 50 }, // left = h - new byte[] { 67, 30, 29, 84, 86, 191, 102, 91, 59 }, // left = d45 - new byte[] { 60, 32, 33, 112, 71, 220, 64, 89, 104 }, // left = d135 - new byte[] { 53, 26, 34, 130, 56, 149, 84, 120, 103 }, // left = d117 - new byte[] { 53, 21, 23, 133, 109, 210, 56, 77, 172 }, // left = d153 - new byte[] { 77, 19, 29, 112, 142, 228, 55, 66, 36 }, // left = d207 - new byte[] { 61, 29, 29, 93, 97, 165, 83, 175, 162 }, // left = d63 - new byte[] { 47, 47, 43, 114, 137, 181, 100, 99, 95 } // left = tm - }, - new[] - { + [103, 26, 36, 129, 132, 201, 83, 80, 93], // left = dc + [59, 38, 83, 112, 103, 162, 98, 136, 90], // left = v + [62, 30, 23, 158, 200, 207, 59, 57, 50], // left = h + [67, 30, 29, 84, 86, 191, 102, 91, 59], // left = d45 + [60, 32, 33, 112, 71, 220, 64, 89, 104], // left = d135 + [53, 26, 34, 130, 56, 149, 84, 120, 103], // left = d117 + [53, 21, 23, 133, 109, 210, 56, 77, 172], // left = d153 + [77, 19, 29, 112, 142, 228, 55, 66, 36], // left = d207 + [61, 29, 29, 93, 97, 165, 83, 175, 162], // left = d63 + [47, 47, 43, 114, 137, 181, 100, 99, 95] // left = tm + ], + [ // above = d135 - new byte[] { 69, 23, 29, 128, 83, 199, 46, 44, 101 }, // left = dc - new byte[] { 53, 40, 55, 139, 69, 183, 61, 80, 110 }, // left = v - new byte[] { 40, 29, 19, 161, 180, 207, 43, 24, 91 }, // left = h - new byte[] { 60, 34, 19, 105, 61, 198, 53, 64, 89 }, // left = d45 - new byte[] { 52, 31, 22, 158, 40, 209, 58, 62, 89 }, // left = d135 - new byte[] { 44, 31, 29, 147, 46, 158, 56, 102, 198 }, // left = d117 - new byte[] { 35, 19, 12, 135, 87, 209, 41, 45, 167 }, // left = d153 - new byte[] { 55, 25, 21, 118, 95, 215, 38, 39, 66 }, // left = d207 - new byte[] { 51, 38, 25, 113, 58, 164, 70, 93, 97 }, // left = d63 - new byte[] { 47, 54, 34, 146, 108, 203, 72, 103, 151 } // left = tm - }, - new[] - { + [69, 23, 29, 128, 83, 199, 46, 44, 101], // left = dc + [53, 40, 55, 139, 69, 183, 61, 80, 110], // left = v + [40, 29, 19, 161, 180, 207, 43, 24, 91], // left = h + [60, 34, 19, 105, 61, 198, 53, 64, 89], // left = d45 + [52, 31, 22, 158, 40, 209, 58, 62, 89], // left = d135 + [44, 31, 29, 147, 46, 158, 56, 102, 198], // left = d117 + [35, 19, 12, 135, 87, 209, 41, 45, 167], // left = d153 + [55, 25, 21, 118, 95, 215, 38, 39, 66], // left = d207 + [51, 38, 25, 113, 58, 164, 70, 93, 97], // left = d63 + [47, 54, 34, 146, 108, 203, 72, 103, 151] // left = tm + ], + [ // above = d117 - new byte[] { 64, 19, 37, 156, 66, 138, 49, 95, 133 }, // left = dc - new byte[] { 46, 27, 80, 150, 55, 124, 55, 121, 135 }, // left = v - new byte[] { 36, 23, 27, 165, 149, 166, 54, 64, 118 }, // left = h - new byte[] { 53, 21, 36, 131, 63, 163, 60, 109, 81 }, // left = d45 - new byte[] { 40, 26, 35, 154, 40, 185, 51, 97, 123 }, // left = d135 - new byte[] { 35, 19, 34, 179, 19, 97, 48, 129, 124 }, // left = d117 - new byte[] { 36, 20, 26, 136, 62, 164, 33, 77, 154 }, // left = d153 - new byte[] { 45, 18, 32, 130, 90, 157, 40, 79, 91 }, // left = d207 - new byte[] { 45, 26, 28, 129, 45, 129, 49, 147, 123 }, // left = d63 - new byte[] { 38, 44, 51, 136, 74, 162, 57, 97, 121 } // left = tm - }, - new[] - { + [64, 19, 37, 156, 66, 138, 49, 95, 133], // left = dc + [46, 27, 80, 150, 55, 124, 55, 121, 135], // left = v + [36, 23, 27, 165, 149, 166, 54, 64, 118], // left = h + [53, 21, 36, 131, 63, 163, 60, 109, 81], // left = d45 + [40, 26, 35, 154, 40, 185, 51, 97, 123], // left = d135 + [35, 19, 34, 179, 19, 97, 48, 129, 124], // left = d117 + [36, 20, 26, 136, 62, 164, 33, 77, 154], // left = d153 + [45, 18, 32, 130, 90, 157, 40, 79, 91], // left = d207 + [45, 26, 28, 129, 45, 129, 49, 147, 123], // left = d63 + [38, 44, 51, 136, 74, 162, 57, 97, 121] // left = tm + ], + [ // above = d153 - new byte[] { 75, 17, 22, 136, 138, 185, 32, 34, 166 }, // left = dc - new byte[] { 56, 39, 58, 133, 117, 173, 48, 53, 187 }, // left = v - new byte[] { 35, 21, 12, 161, 212, 207, 20, 23, 145 }, // left = h - new byte[] { 56, 29, 19, 117, 109, 181, 55, 68, 112 }, // left = d45 - new byte[] { 47, 29, 17, 153, 64, 220, 59, 51, 114 }, // left = d135 - new byte[] { 46, 16, 24, 136, 76, 147, 41, 64, 172 }, // left = d117 - new byte[] { 34, 17, 11, 108, 152, 187, 13, 15, 209 }, // left = d153 - new byte[] { 51, 24, 14, 115, 133, 209, 32, 26, 104 }, // left = d207 - new byte[] { 55, 30, 18, 122, 79, 179, 44, 88, 116 }, // left = d63 - new byte[] { 37, 49, 25, 129, 168, 164, 41, 54, 148 } // left = tm - }, - new[] - { + [75, 17, 22, 136, 138, 185, 32, 34, 166], // left = dc + [56, 39, 58, 133, 117, 173, 48, 53, 187], // left = v + [35, 21, 12, 161, 212, 207, 20, 23, 145], // left = h + [56, 29, 19, 117, 109, 181, 55, 68, 112], // left = d45 + [47, 29, 17, 153, 64, 220, 59, 51, 114], // left = d135 + [46, 16, 24, 136, 76, 147, 41, 64, 172], // left = d117 + [34, 17, 11, 108, 152, 187, 13, 15, 209], // left = d153 + [51, 24, 14, 115, 133, 209, 32, 26, 104], // left = d207 + [55, 30, 18, 122, 79, 179, 44, 88, 116], // left = d63 + [37, 49, 25, 129, 168, 164, 41, 54, 148] // left = tm + ], + [ // above = d207 - new byte[] { 82, 22, 32, 127, 143, 213, 39, 41, 70 }, // left = dc - new byte[] { 62, 44, 61, 123, 105, 189, 48, 57, 64 }, // left = v - new byte[] { 47, 25, 17, 175, 222, 220, 24, 30, 86 }, // left = h - new byte[] { 68, 36, 17, 106, 102, 206, 59, 74, 74 }, // left = d45 - new byte[] { 57, 39, 23, 151, 68, 216, 55, 63, 58 }, // left = d135 - new byte[] { 49, 30, 35, 141, 70, 168, 82, 40, 115 }, // left = d117 - new byte[] { 51, 25, 15, 136, 129, 202, 38, 35, 139 }, // left = d153 - new byte[] { 68, 26, 16, 111, 141, 215, 29, 28, 28 }, // left = d207 - new byte[] { 59, 39, 19, 114, 75, 180, 77, 104, 42 }, // left = d63 - new byte[] { 40, 61, 26, 126, 152, 206, 61, 59, 93 } // left = tm - }, - new[] - { + [82, 22, 32, 127, 143, 213, 39, 41, 70], // left = dc + [62, 44, 61, 123, 105, 189, 48, 57, 64], // left = v + [47, 25, 17, 175, 222, 220, 24, 30, 86], // left = h + [68, 36, 17, 106, 102, 206, 59, 74, 74], // left = d45 + [57, 39, 23, 151, 68, 216, 55, 63, 58], // left = d135 + [49, 30, 35, 141, 70, 168, 82, 40, 115], // left = d117 + [51, 25, 15, 136, 129, 202, 38, 35, 139], // left = d153 + [68, 26, 16, 111, 141, 215, 29, 28, 28], // left = d207 + [59, 39, 19, 114, 75, 180, 77, 104, 42], // left = d63 + [40, 61, 26, 126, 152, 206, 61, 59, 93] // left = tm + ], + [ // above = d63 - new byte[] { 78, 23, 39, 111, 117, 170, 74, 124, 94 }, // left = dc - new byte[] { 48, 34, 86, 101, 92, 146, 78, 179, 134 }, // left = v - new byte[] { 47, 22, 24, 138, 187, 178, 68, 69, 59 }, // left = h - new byte[] { 56, 25, 33, 105, 112, 187, 95, 177, 129 }, // left = d45 - new byte[] { 48, 31, 27, 114, 63, 183, 82, 116, 56 }, // left = d135 - new byte[] { 43, 28, 37, 121, 63, 123, 61, 192, 169 }, // left = d117 - new byte[] { 42, 17, 24, 109, 97, 177, 56, 76, 122 }, // left = d153 - new byte[] { 58, 18, 28, 105, 139, 182, 70, 92, 63 }, // left = d207 - new byte[] { 46, 23, 32, 74, 86, 150, 67, 183, 88 }, // left = d63 - new byte[] { 36, 38, 48, 92, 122, 165, 88, 137, 91 } // left = tm - }, - new[] - { + [78, 23, 39, 111, 117, 170, 74, 124, 94], // left = dc + [48, 34, 86, 101, 92, 146, 78, 179, 134], // left = v + [47, 22, 24, 138, 187, 178, 68, 69, 59], // left = h + [56, 25, 33, 105, 112, 187, 95, 177, 129], // left = d45 + [48, 31, 27, 114, 63, 183, 82, 116, 56], // left = d135 + [43, 28, 37, 121, 63, 123, 61, 192, 169], // left = d117 + [42, 17, 24, 109, 97, 177, 56, 76, 122], // left = d153 + [58, 18, 28, 105, 139, 182, 70, 92, 63], // left = d207 + [46, 23, 32, 74, 86, 150, 67, 183, 88], // left = d63 + [36, 38, 48, 92, 122, 165, 88, 137, 91] // left = tm + ], + [ // above = tm - new byte[] { 65, 70, 60, 155, 159, 199, 61, 60, 81 }, // left = dc - new byte[] { 44, 78, 115, 132, 119, 173, 71, 112, 93 }, // left = v - new byte[] { 39, 38, 21, 184, 227, 206, 42, 32, 64 }, // left = h - new byte[] { 58, 47, 36, 124, 137, 193, 80, 82, 78 }, // left = d45 - new byte[] { 49, 50, 35, 144, 95, 205, 63, 78, 59 }, // left = d135 - new byte[] { 41, 53, 52, 148, 71, 142, 65, 128, 51 }, // left = d117 - new byte[] { 40, 36, 28, 143, 143, 202, 40, 55, 137 }, // left = d153 - new byte[] { 52, 34, 29, 129, 183, 227, 42, 35, 43 }, // left = d207 - new byte[] { 42, 44, 44, 104, 105, 164, 64, 130, 80 }, // left = d63 - new byte[] { 43, 81, 53, 140, 169, 204, 68, 84, 72 } // left = tm - } - }; + [65, 70, 60, 155, 159, 199, 61, 60, 81], // left = dc + [44, 78, 115, 132, 119, 173, 71, 112, 93], // left = v + [39, 38, 21, 184, 227, 206, 42, 32, 64], // left = h + [58, 47, 36, 124, 137, 193, 80, 82, 78], // left = d45 + [49, 50, 35, 144, 95, 205, 63, 78, 59], // left = d135 + [41, 53, 52, 148, 71, 142, 65, 128, 51], // left = d117 + [40, 36, 28, 143, 143, 202, 40, 55, 137], // left = d153 + [52, 34, 29, 129, 183, 227, 42, 35, 43], // left = d207 + [42, 44, 44, 104, 105, 164, 64, 130, 80], // left = d63 + [43, 81, 53, 140, 169, 204, 68, 84, 72] // left = tm + ] + ]; public static readonly byte[][] KfUvModeProb = - { - new byte[] { 144, 11, 54, 157, 195, 130, 46, 58, 108 }, // y = dc - new byte[] { 118, 15, 123, 148, 131, 101, 44, 93, 131 }, // y = v - new byte[] { 113, 12, 23, 188, 226, 142, 26, 32, 125 }, // y = h - new byte[] { 120, 11, 50, 123, 163, 135, 64, 77, 103 }, // y = d45 - new byte[] { 113, 9, 36, 155, 111, 157, 32, 44, 161 }, // y = d135 - new byte[] { 116, 9, 55, 176, 76, 96, 37, 61, 149 }, // y = d117 - new byte[] { 115, 9, 28, 141, 161, 167, 21, 25, 193 }, // y = d153 - new byte[] { 120, 12, 32, 145, 195, 142, 32, 38, 86 }, // y = d207 - new byte[] { 116, 12, 64, 120, 140, 125, 49, 115, 121 }, // y = d63 - new byte[] { 102, 19, 66, 162, 182, 122, 35, 59, 128 } // y = tm - }; + [ + [144, 11, 54, 157, 195, 130, 46, 58, 108], // y = dc + [118, 15, 123, 148, 131, 101, 44, 93, 131], // y = v + [113, 12, 23, 188, 226, 142, 26, 32, 125], // y = h + [120, 11, 50, 123, 163, 135, 64, 77, 103], // y = d45 + [113, 9, 36, 155, 111, 157, 32, 44, 161], // y = d135 + [116, 9, 55, 176, 76, 96, 37, 61, 149], // y = d117 + [115, 9, 28, 141, 161, 167, 21, 25, 193], // y = d153 + [120, 12, 32, 145, 195, 142, 32, 38, 86], // y = d207 + [116, 12, 64, 120, 140, 125, 49, 115, 121], // y = d63 + [102, 19, 66, 162, 182, 122, 35, 59, 128] // y = tm + ]; - private static readonly byte[] DefaultIfYProbs = - { + private static readonly byte[] _defaultIfYProbs = + [ 65, 32, 18, 144, 162, 194, 41, 51, 98, // block_size < 8x8 132, 68, 18, 165, 217, 196, 45, 40, 78, // block_size < 16x16 173, 80, 19, 176, 240, 193, 64, 35, 46, // block_size < 32x32 221, 135, 38, 194, 248, 121, 96, 85, 29 // block_size >= 32x32 - }; + ]; - private static readonly byte[] DefaultIfUvProbs = - { + private static readonly byte[] _defaultIfUvProbs = + [ 120, 7, 76, 176, 208, 126, 28, 54, 103, // y = dc 48, 12, 154, 155, 139, 90, 34, 117, 119, // y = v 67, 6, 25, 204, 243, 158, 13, 21, 96, // y = h @@ -190,10 +180,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 85, 5, 32, 156, 216, 148, 19, 29, 73, // y = d207 77, 7, 64, 116, 132, 122, 37, 126, 120, // y = d63 101, 21, 107, 181, 192, 103, 19, 67, 125 // y = tm - }; + ]; - private static readonly byte[] DefaultPartitionProbs = - { + private static readonly byte[] _defaultPartitionProbs = + [ // 8x8 . 4x4 199, 122, 141, // a/l both not split 147, 63, 159, // a split, l not split @@ -214,10 +204,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 72, 16, 44, // a split, l not split 58, 32, 12, // l split, a not split 10, 7, 6 // a/l both split - }; + ]; - private static readonly byte[] DefaultInterModeProbs = - { + private static readonly byte[] _defaultInterModeProbs = + [ 2, 173, 34, // 0 = both zero mv 7, 145, 85, // 1 = one zero mv + one a predicted mv 7, 166, 63, // 2 = two predicted mvs @@ -225,120 +215,120 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 8, 64, 46, // 4 = two new mvs 17, 81, 31, // 5 = one intra neighbour + x 25, 29, 30 // 6 = two intra neighbours - }; + ]; /* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */ public static readonly sbyte[] IntraModeTree = - { + [ -(int)PredictionMode.DcPred, 2, /* 0 = DC_NODE */ -(int)PredictionMode.TmPred, 4, /* 1 = TM_NODE */ -(int)PredictionMode.VPred, 6, /* 2 = V_NODE */ 8, 12, /* 3 = COM_NODE */ -(int)PredictionMode.HPred, 10, /* 4 = H_NODE */ -(int)PredictionMode.D135Pred, -(int)PredictionMode.D117Pred, /* 5 = D135_NODE */ -(int)PredictionMode.D45Pred, 14, /* 6 = D45_NODE */ -(int)PredictionMode.D63Pred, 16, /* 7 = D63_NODE */ -(int)PredictionMode.D153Pred, -(int)PredictionMode.D207Pred /* 8 = D153_NODE */ - }; + ]; public static readonly sbyte[] InterModeTree = - { + [ -((int)PredictionMode.ZeroMv - (int)PredictionMode.NearestMv), 2, -((int)PredictionMode.NearestMv - (int)PredictionMode.NearestMv), 4, -((int)PredictionMode.NearMv - (int)PredictionMode.NearestMv), -((int)PredictionMode.NewMv - (int)PredictionMode.NearestMv) - }; + ]; public static readonly sbyte[] PartitionTree = - { + [ -(sbyte)PartitionType.PartitionNone, 2, -(sbyte)PartitionType.PartitionHorz, 4, -(sbyte)PartitionType.PartitionVert, -(sbyte)PartitionType.PartitionSplit - }; + ]; public static readonly sbyte[] SwitchableInterpTree = - { + [ -Constants.EightTap, 2, -Constants.EightTapSmooth, -Constants.EightTapSharp - }; + ]; - private static readonly byte[] DefaultIntraInterP = { 9, 102, 187, 225 }; - private static readonly byte[] DefaultCompInterP = { 239, 183, 119, 96, 41 }; - private static readonly byte[] DefaultCompRefP = { 50, 126, 123, 221, 226 }; - private static readonly byte[] DefaultSingleRefP = { 33, 16, 77, 74, 142, 142, 172, 170, 238, 247 }; - private static readonly byte[] DefaultTxProbs = { 3, 136, 37, 5, 52, 13, 20, 152, 15, 101, 100, 66 }; + private static readonly byte[] _defaultIntraInterP = [9, 102, 187, 225]; + private static readonly byte[] _defaultCompInterP = [239, 183, 119, 96, 41]; + private static readonly byte[] _defaultCompRefP = [50, 126, 123, 221, 226]; + private static readonly byte[] _defaultSingleRefP = [33, 16, 77, 74, 142, 142, 172, 170, 238, 247]; + private static readonly byte[] _defaultTxProbs = [3, 136, 37, 5, 52, 13, 20, 152, 15, 101, 100, 66]; static EntropyMode() { - byte[][] KfPartitionProbs = - { + byte[][] kfPartitionProbs = + [ // 8x8 . 4x4 - new byte[] { 158, 97, 94 }, // a/l both not split - new byte[] { 93, 24, 99 }, // a split, l not split - new byte[] { 85, 119, 44 }, // l split, a not split - new byte[] { 62, 59, 67 }, // a/l both split + [158, 97, 94], // a/l both not split + [93, 24, 99], // a split, l not split + [85, 119, 44], // l split, a not split + [62, 59, 67], // a/l both split // 16x16 . 8x8 - new byte[] { 149, 53, 53 }, // a/l both not split - new byte[] { 94, 20, 48 }, // a split, l not split - new byte[] { 83, 53, 24 }, // l split, a not split - new byte[] { 52, 18, 18 }, // a/l both split + [149, 53, 53], // a/l both not split + [94, 20, 48], // a split, l not split + [83, 53, 24], // l split, a not split + [52, 18, 18], // a/l both split // 32x32 . 16x16 - new byte[] { 150, 40, 39 }, // a/l both not split - new byte[] { 78, 12, 26 }, // a split, l not split - new byte[] { 67, 33, 11 }, // l split, a not split - new byte[] { 24, 7, 5 }, // a/l both split + [150, 40, 39], // a/l both not split + [78, 12, 26], // a split, l not split + [67, 33, 11], // l split, a not split + [24, 7, 5], // a/l both split // 64x64 . 32x32 - new byte[] { 174, 35, 49 }, // a/l both not split - new byte[] { 68, 11, 27 }, // a split, l not split - new byte[] { 57, 15, 9 }, // l split, a not split - new byte[] { 12, 3, 3 } // a/l both split - }; + [174, 35, 49], // a/l both not split + [68, 11, 27], // a split, l not split + [57, 15, 9], // l split, a not split + [12, 3, 3] // a/l both split + ]; } - private static readonly byte[] DefaultSkipProbs = { 192, 128, 64 }; + private static readonly byte[] _defaultSkipProbs = [192, 128, 64]; - private static readonly byte[] DefaultSwitchableInterpProb = { 235, 162, 36, 255, 34, 3, 149, 144 }; + private static readonly byte[] _defaultSwitchableInterpProb = [235, 162, 36, 255, 34, 3, 149, 144]; private static void InitModeProbs(ref Vp9EntropyProbs fc) { - Entropy.CopyProbs(ref fc.UvModeProb, DefaultIfUvProbs); - Entropy.CopyProbs(ref fc.YModeProb, DefaultIfYProbs); - Entropy.CopyProbs(ref fc.SwitchableInterpProb, DefaultSwitchableInterpProb); - Entropy.CopyProbs(ref fc.PartitionProb, DefaultPartitionProbs); - Entropy.CopyProbs(ref fc.IntraInterProb, DefaultIntraInterP); - Entropy.CopyProbs(ref fc.CompInterProb, DefaultCompInterP); - Entropy.CopyProbs(ref fc.CompRefProb, DefaultCompRefP); - Entropy.CopyProbs(ref fc.SingleRefProb, DefaultSingleRefP); - Entropy.CopyProbs(ref fc.Tx32x32Prob, DefaultTxProbs.AsSpan().Slice(0, 6)); - Entropy.CopyProbs(ref fc.Tx16x16Prob, DefaultTxProbs.AsSpan().Slice(6, 4)); - Entropy.CopyProbs(ref fc.Tx8x8Prob, DefaultTxProbs.AsSpan().Slice(10, 2)); - Entropy.CopyProbs(ref fc.SkipProb, DefaultSkipProbs); - Entropy.CopyProbs(ref fc.InterModeProb, DefaultInterModeProbs); + Entropy.CopyProbs(ref fc.UvModeProb, _defaultIfUvProbs); + Entropy.CopyProbs(ref fc.YModeProb, _defaultIfYProbs); + Entropy.CopyProbs(ref fc.SwitchableInterpProb, _defaultSwitchableInterpProb); + Entropy.CopyProbs(ref fc.PartitionProb, _defaultPartitionProbs); + Entropy.CopyProbs(ref fc.IntraInterProb, _defaultIntraInterP); + Entropy.CopyProbs(ref fc.CompInterProb, _defaultCompInterP); + Entropy.CopyProbs(ref fc.CompRefProb, _defaultCompRefP); + Entropy.CopyProbs(ref fc.SingleRefProb, _defaultSingleRefP); + Entropy.CopyProbs(ref fc.Tx32x32Prob, _defaultTxProbs.AsSpan().Slice(0, 6)); + Entropy.CopyProbs(ref fc.Tx16x16Prob, _defaultTxProbs.AsSpan().Slice(6, 4)); + Entropy.CopyProbs(ref fc.Tx8x8Prob, _defaultTxProbs.AsSpan().Slice(10, 2)); + Entropy.CopyProbs(ref fc.SkipProb, _defaultSkipProbs); + Entropy.CopyProbs(ref fc.InterModeProb, _defaultInterModeProbs); } - internal static void TxCountsToBranchCounts32x32(ReadOnlySpan txCount32x32P, - ref Array3> ct32x32P) + internal static void TxCountsToBranchCounts32X32(ReadOnlySpan txCount32X32P, + ref Array3> ct32X32P) { - ct32x32P[0][0] = txCount32x32P[(int)TxSize.Tx4x4]; - ct32x32P[0][1] = txCount32x32P[(int)TxSize.Tx8x8] + txCount32x32P[(int)TxSize.Tx16x16] + - txCount32x32P[(int)TxSize.Tx32x32]; - ct32x32P[1][0] = txCount32x32P[(int)TxSize.Tx8x8]; - ct32x32P[1][1] = txCount32x32P[(int)TxSize.Tx16x16] + txCount32x32P[(int)TxSize.Tx32x32]; - ct32x32P[2][0] = txCount32x32P[(int)TxSize.Tx16x16]; - ct32x32P[2][1] = txCount32x32P[(int)TxSize.Tx32x32]; + ct32X32P[0][0] = txCount32X32P[(int)TxSize.Tx4X4]; + ct32X32P[0][1] = txCount32X32P[(int)TxSize.Tx8X8] + txCount32X32P[(int)TxSize.Tx16X16] + + txCount32X32P[(int)TxSize.Tx32X32]; + ct32X32P[1][0] = txCount32X32P[(int)TxSize.Tx8X8]; + ct32X32P[1][1] = txCount32X32P[(int)TxSize.Tx16X16] + txCount32X32P[(int)TxSize.Tx32X32]; + ct32X32P[2][0] = txCount32X32P[(int)TxSize.Tx16X16]; + ct32X32P[2][1] = txCount32X32P[(int)TxSize.Tx32X32]; } - internal static void TxCountsToBranchCounts16x16(ReadOnlySpan txCount16x16P, - ref Array2> ct16x16P) + internal static void TxCountsToBranchCounts16X16(ReadOnlySpan txCount16X16P, + ref Array2> ct16X16P) { - ct16x16P[0][0] = txCount16x16P[(int)TxSize.Tx4x4]; - ct16x16P[0][1] = txCount16x16P[(int)TxSize.Tx8x8] + txCount16x16P[(int)TxSize.Tx16x16]; - ct16x16P[1][0] = txCount16x16P[(int)TxSize.Tx8x8]; - ct16x16P[1][1] = txCount16x16P[(int)TxSize.Tx16x16]; + ct16X16P[0][0] = txCount16X16P[(int)TxSize.Tx4X4]; + ct16X16P[0][1] = txCount16X16P[(int)TxSize.Tx8X8] + txCount16X16P[(int)TxSize.Tx16X16]; + ct16X16P[1][0] = txCount16X16P[(int)TxSize.Tx8X8]; + ct16X16P[1][1] = txCount16X16P[(int)TxSize.Tx16X16]; } - internal static void TxCountsToBranchCounts8x8(ReadOnlySpan txCount8x8P, - ref Array1> ct8x8P) + internal static void TxCountsToBranchCounts8X8(ReadOnlySpan txCount8X8P, + ref Array1> ct8X8P) { - ct8x8P[0][0] = txCount8x8P[(int)TxSize.Tx4x4]; - ct8x8P[0][1] = txCount8x8P[(int)TxSize.Tx8x8]; + ct8X8P[0][0] = txCount8X8P[(int)TxSize.Tx4X4]; + ct8X8P[0][1] = txCount8X8P[(int)TxSize.Tx8X8]; } public static unsafe void SetupPastIndependence(ref Vp9Common cm) diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMv.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMv.cs index 04568e557..4fa8e6d4c 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMv.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/EntropyMv.cs @@ -14,22 +14,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 public static readonly sbyte[] JointTree = - { + [ -(sbyte)MvJointType.Zero, 2, -(sbyte)MvJointType.Hnzvz, 4, -(sbyte)MvJointType.Hzvnz, -(sbyte)MvJointType.Hnzvnz - }; + ]; public static readonly sbyte[] ClassTree = - { + [ -(sbyte)MvClassType.Class0, 2, -(sbyte)MvClassType.Class1, 4, 6, 8, -(sbyte)MvClassType.Class2, -(sbyte)MvClassType.Class3, 10, 12, -(sbyte)MvClassType.Class4, -(sbyte)MvClassType.Class5, -(sbyte)MvClassType.Class6, 14, 16, 18, -(sbyte)MvClassType.Class7, -(sbyte)MvClassType.Class8, -(sbyte)MvClassType.Class9, -(sbyte)MvClassType.Class10 - }; + ]; - public static readonly sbyte[] Class0Tree = { -0, -1 }; + public static readonly sbyte[] Class0Tree = [-0, -1]; - public static readonly sbyte[] FpTree = { -0, 2, -1, 4, -2, -3 }; + public static readonly sbyte[] FpTree = [-0, 2, -1, 4, -2, -3]; private static bool JointVertical(MvJointType type) { @@ -41,8 +41,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return type == MvJointType.Hnzvz || type == MvJointType.Hnzvnz; } - private static readonly byte[] LogInBase2 = - { + private static readonly byte[] _logInBase2 = + [ 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -73,7 +73,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 - }; + ]; private static int ClassBase(MvClassType c) { @@ -84,7 +84,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { MvClassType c = z >= Class0Size * 4096 ? MvClassType.Class10 - : (MvClassType)LogInBase2[z >> 3]; + : (MvClassType)_logInBase2[z >> 3]; if (!offset.IsNull) { offset.Value = z - ClassBase(c); @@ -95,18 +95,18 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 private static void IncComponent(int v, ref Vp9BackwardUpdates compCounts, int compIndex, int incr, int usehp) { - int s, z, c, o = 0, d, e, f; + int o = 0; Debug.Assert(v != 0); /* should not be zero */ - s = v < 0 ? 1 : 0; + int s = v < 0 ? 1 : 0; compCounts.Sign[compIndex][s] += (uint)incr; - z = (s != 0 ? -v : v) - 1; /* magnitude - 1 */ + int z = (s != 0 ? -v : v) - 1 /* magnitude - 1 */; - c = (int)GetClass(z, new Ptr(ref o)); + int c = (int)GetClass(z, new Ptr(ref o)); compCounts.Classes[compIndex][c] += (uint)incr; - d = o >> 3; /* int mv data */ - f = (o >> 1) & 3; /* fractional pel mv data */ - e = o & 1; /* high precision mv data */ + int d = o >> 3 /* int mv data */; + int f = (o >> 1) & 3 /* fractional pel mv data */; + int e = o & 1 /* high precision mv data */; if (c == (int)MvClassType.Class0) { @@ -162,4 +162,4 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 public const int Upp = (1 << InUseBits) - 1; public const int Low = -(1 << InUseBits); } -} \ No newline at end of file +} diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/FrameBuffers.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/FrameBuffers.cs index 108265772..a5692c446 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/FrameBuffers.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/FrameBuffers.cs @@ -21,48 +21,47 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ref VpxCodecFrameBuffer fb) { int i; - Ptr intFbList = cbPriv; - if (intFbList.IsNull) + if (cbPriv.IsNull) { return -1; } // Find a free frame buffer. - for (i = 0; i < intFbList.Value.IntFb.Length; ++i) + for (i = 0; i < cbPriv.Value.IntFb.Length; ++i) { - if (!intFbList.Value.IntFb[i].InUse) + if (!cbPriv.Value.IntFb[i].InUse) { break; } } - if (i == intFbList.Value.IntFb.Length) + if (i == cbPriv.Value.IntFb.Length) { return -1; } - if ((ulong)intFbList.Value.IntFb[i].Data.Length < minSize) + if ((ulong)cbPriv.Value.IntFb[i].Data.Length < minSize) { - if (!intFbList.Value.IntFb[i].Data.IsNull) + if (!cbPriv.Value.IntFb[i].Data.IsNull) { - allocator.Free(intFbList.Value.IntFb[i].Data); + allocator.Free(cbPriv.Value.IntFb[i].Data); } // The data must be zeroed to fix a valgrind error from the C loop filter // due to access uninitialized memory in frame border. It could be // skipped if border were totally removed. - intFbList.Value.IntFb[i].Data = allocator.Allocate((int)minSize); - if (intFbList.Value.IntFb[i].Data.IsNull) + cbPriv.Value.IntFb[i].Data = allocator.Allocate((int)minSize); + if (cbPriv.Value.IntFb[i].Data.IsNull) { return -1; } } - fb.Data = intFbList.Value.IntFb[i].Data; - intFbList.Value.IntFb[i].InUse = true; + fb.Data = cbPriv.Value.IntFb[i].Data; + cbPriv.Value.IntFb[i].InUse = true; // Set the frame buffer's private data to point at the internal frame buffer. - fb.Priv = new Ptr(ref intFbList.Value.IntFb[i]); + fb.Priv = new Ptr(ref cbPriv.Value.IntFb[i]); return 0; } @@ -76,4 +75,4 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 return 0; } } -} \ No newline at end of file +} diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Idct.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Idct.cs index fc19f76d8..f080fc825 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Idct.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Idct.cs @@ -35,15 +35,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - private static readonly Transform2D[] Iht4 = - { + private static readonly Transform2D[] _iht4 = + [ new(Idct4, Idct4), // DCT_DCT = 0 new(Iadst4, Idct4), // ADST_DCT = 1 new(Idct4, Iadst4), // DCT_ADST = 2 new(Iadst4, Iadst4) // ADST_ADST = 3 - }; + ]; - public static void Iht4x416Add(ReadOnlySpan input, Span dest, int stride, int txType) + public static void Iht4X416Add(ReadOnlySpan input, Span dest, int stride, int txType) { Span output = stackalloc int[4 * 4]; Span outptr = output; @@ -53,7 +53,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Inverse transform row vectors for (int i = 0; i < 4; ++i) { - Iht4[txType].Rows(input, outptr); + _iht4[txType].Rows(input, outptr); input = input.Slice(4); outptr = outptr.Slice(4); } @@ -66,7 +66,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 tempIn[j] = output[(j * 4) + i]; } - Iht4[txType].Cols(tempIn, tempOut); + _iht4[txType].Cols(tempIn, tempOut); for (int j = 0; j < 4; ++j) { dest[(j * stride) + i] = @@ -75,21 +75,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - private static readonly Transform2D[] Iht8 = - { + private static readonly Transform2D[] _iht8 = + [ new(Idct8, Idct8), // DCT_DCT = 0 new(Iadst8, Idct8), // ADST_DCT = 1 new(Idct8, Iadst8), // DCT_ADST = 2 new(Iadst8, Iadst8) // ADST_ADST = 3 - }; + ]; - public static void Iht8x864Add(ReadOnlySpan input, Span dest, int stride, int txType) + public static void Iht8X864Add(ReadOnlySpan input, Span dest, int stride, int txType) { Span output = stackalloc int[8 * 8]; Span outptr = output; Span tempIn = stackalloc int[8]; Span tempOut = stackalloc int[8]; - Transform2D ht = Iht8[txType]; + Transform2D ht = _iht8[txType]; // Inverse transform row vectors for (int i = 0; i < 8; ++i) @@ -116,21 +116,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - private static readonly Transform2D[] Iht16 = - { + private static readonly Transform2D[] _iht16 = + [ new(Idct16, Idct16), // DCT_DCT = 0 new(Iadst16, Idct16), // ADST_DCT = 1 new(Idct16, Iadst16), // DCT_ADST = 2 new(Iadst16, Iadst16) // ADST_ADST = 3 - }; + ]; - public static void Iht16x16256Add(ReadOnlySpan input, Span dest, int stride, int txType) + public static void Iht16X16256Add(ReadOnlySpan input, Span dest, int stride, int txType) { Span output = stackalloc int[16 * 16]; Span outptr = output; Span tempIn = stackalloc int[16]; Span tempOut = stackalloc int[16]; - Transform2D ht = Iht16[txType]; + Transform2D ht = _iht16[txType]; // Rows for (int i = 0; i < 16; ++i) @@ -158,31 +158,31 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Idct - public static void Idct4x4Add(ReadOnlySpan input, Span dest, int stride, int eob) + public static void Idct4X4Add(ReadOnlySpan input, Span dest, int stride, int eob) { if (eob > 1) { - Idct4x416Add(input, dest, stride); + Idct4X416Add(input, dest, stride); } else { - Idct4x41Add(input, dest, stride); + Idct4X41Add(input, dest, stride); } } - public static void Iwht4x4Add(ReadOnlySpan input, Span dest, int stride, int eob) + public static void Iwht4X4Add(ReadOnlySpan input, Span dest, int stride, int eob) { if (eob > 1) { - Iwht4x416Add(input, dest, stride); + Iwht4X416Add(input, dest, stride); } else { - Iwht4x41Add(input, dest, stride); + Iwht4X41Add(input, dest, stride); } } - public static void Idct8x8Add(ReadOnlySpan input, Span dest, int stride, int eob) + public static void Idct8X8Add(ReadOnlySpan input, Span dest, int stride, int eob) { // If dc is 1, then input[0] is the reconstructed value, do not need // dequantization. Also, when dc is 1, dc is counted in eobs, namely eobs >=1. @@ -192,109 +192,109 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 if (eob == 1) { // DC only DCT coefficient - Idct8x81Add(input, dest, stride); + Idct8X81Add(input, dest, stride); } else if (eob <= 12) { - Idct8x812Add(input, dest, stride); + Idct8X812Add(input, dest, stride); } else { - Idct8x864Add(input, dest, stride); + Idct8X864Add(input, dest, stride); } } - public static void Idct16x16Add(ReadOnlySpan input, Span dest, int stride, int eob) + public static void Idct16X16Add(ReadOnlySpan input, Span dest, int stride, int eob) { /* The calculation can be simplified if there are not many non-zero dct * coefficients. Use eobs to separate different cases. */ if (eob == 1) /* DC only DCT coefficient. */ { - Idct16x161Add(input, dest, stride); + Idct16X161Add(input, dest, stride); } else if (eob <= 10) { - Idct16x1610Add(input, dest, stride); + Idct16X1610Add(input, dest, stride); } else if (eob <= 38) { - Idct16x1638Add(input, dest, stride); + Idct16X1638Add(input, dest, stride); } else { - Idct16x16256Add(input, dest, stride); + Idct16X16256Add(input, dest, stride); } } - public static void Idct32x32Add(ReadOnlySpan input, Span dest, int stride, int eob) + public static void Idct32X32Add(ReadOnlySpan input, Span dest, int stride, int eob) { if (eob == 1) { - Idct32x321Add(input, dest, stride); + Idct32X321Add(input, dest, stride); } else if (eob <= 34) { // Non-zero coeff only in upper-left 8x8 - Idct32x3234Add(input, dest, stride); + Idct32X3234Add(input, dest, stride); } else if (eob <= 135) { // Non-zero coeff only in upper-left 16x16 - Idct32x32135Add(input, dest, stride); + Idct32X32135Add(input, dest, stride); } else { - Idct32x321024Add(input, dest, stride); + Idct32X321024Add(input, dest, stride); } } // Iht - public static void Iht4x4Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob) + public static void Iht4X4Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob) { if (txType == TxType.DctDct) { - Idct4x4Add(input, dest, stride, eob); + Idct4X4Add(input, dest, stride, eob); } else { - Iht4x416Add(input, dest, stride, (int)txType); + Iht4X416Add(input, dest, stride, (int)txType); } } - public static void Iht8x8Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob) + public static void Iht8X8Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob) { if (txType == TxType.DctDct) { - Idct8x8Add(input, dest, stride, eob); + Idct8X8Add(input, dest, stride, eob); } else { - Iht8x864Add(input, dest, stride, (int)txType); + Iht8X864Add(input, dest, stride, (int)txType); } } - public static void Iht16x16Add(TxType txType, ReadOnlySpan input, Span dest, + public static void Iht16X16Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob) { if (txType == TxType.DctDct) { - Idct16x16Add(input, dest, stride, eob); + Idct16X16Add(input, dest, stride, eob); } else { - Iht16x16256Add(input, dest, stride, (int)txType); + Iht16X16256Add(input, dest, stride, (int)txType); } } - private static readonly HighbdTransform2D[] HighbdIht4 = - { + private static readonly HighbdTransform2D[] _highbdIht4 = + [ new(HighbdIdct4, HighbdIdct4), // DCT_DCT = 0 new(HighbdIadst4, HighbdIdct4), // ADST_DCT = 1 new(HighbdIdct4, HighbdIadst4), // DCT_ADST = 2 new(HighbdIadst4, HighbdIadst4) // ADST_ADST = 3 - }; + ]; - public static void HighbdIht4x416Add(ReadOnlySpan input, Span dest, int stride, int txType, int bd) + public static void HighbdIht4X416Add(ReadOnlySpan input, Span dest, int stride, int txType, int bd) { Span output = stackalloc int[4 * 4]; Span outptr = output; @@ -304,7 +304,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Inverse transform row vectors. for (int i = 0; i < 4; ++i) { - HighbdIht4[txType].Rows(input, outptr, bd); + _highbdIht4[txType].Rows(input, outptr, bd); input = input.Slice(4); outptr = outptr.Slice(4); } @@ -317,7 +317,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 tempIn[j] = output[(j * 4) + i]; } - HighbdIht4[txType].Cols(tempIn, tempOut, bd); + _highbdIht4[txType].Cols(tempIn, tempOut, bd); for (int j = 0; j < 4; ++j) { dest[(j * stride) + i] = HighbdClipPixelAdd(dest[(j * stride) + i], @@ -326,21 +326,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - private static readonly HighbdTransform2D[] HighIht8 = - { + private static readonly HighbdTransform2D[] _highIht8 = + [ new(HighbdIdct8, HighbdIdct8), // DCT_DCT = 0 new(HighbdIadst8, HighbdIdct8), // ADST_DCT = 1 new(HighbdIdct8, HighbdIadst8), // DCT_ADST = 2 new(HighbdIadst8, HighbdIadst8) // ADST_ADST = 3 - }; + ]; - public static void HighbdIht8x864Add(ReadOnlySpan input, Span dest, int stride, int txType, int bd) + public static void HighbdIht8X864Add(ReadOnlySpan input, Span dest, int stride, int txType, int bd) { Span output = stackalloc int[8 * 8]; Span outptr = output; Span tempIn = stackalloc int[8]; Span tempOut = stackalloc int[8]; - HighbdTransform2D ht = HighIht8[txType]; + HighbdTransform2D ht = _highIht8[txType]; // Inverse transform row vectors. for (int i = 0; i < 8; ++i) @@ -367,22 +367,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - private static readonly HighbdTransform2D[] HighIht16 = - { + private static readonly HighbdTransform2D[] _highIht16 = + [ new(HighbdIdct16, HighbdIdct16), // DCT_DCT = 0 new(HighbdIadst16, HighbdIdct16), // ADST_DCT = 1 new(HighbdIdct16, HighbdIadst16), // DCT_ADST = 2 new(HighbdIadst16, HighbdIadst16) // ADST_ADST = 3 - }; + ]; - public static void HighbdIht16x16256Add(ReadOnlySpan input, Span dest, int stride, int txType, + public static void HighbdIht16X16256Add(ReadOnlySpan input, Span dest, int stride, int txType, int bd) { Span output = stackalloc int[16 * 16]; Span outptr = output; Span tempIn = stackalloc int[16]; Span tempOut = stackalloc int[16]; - HighbdTransform2D ht = HighIht16[txType]; + HighbdTransform2D ht = _highIht16[txType]; // Rows for (int i = 0; i < 16; ++i) @@ -410,31 +410,31 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Idct - public static void HighbdIdct4x4Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) + public static void HighbdIdct4X4Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) { if (eob > 1) { - HighbdIdct4x416Add(input, dest, stride, bd); + HighbdIdct4X416Add(input, dest, stride, bd); } else { - HighbdIdct4x41Add(input, dest, stride, bd); + HighbdIdct4X41Add(input, dest, stride, bd); } } - public static void HighbdIwht4x4Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) + public static void HighbdIwht4X4Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) { if (eob > 1) { - HighbdIwht4x416Add(input, dest, stride, bd); + HighbdIwht4X416Add(input, dest, stride, bd); } else { - HighbdIwht4x41Add(input, dest, stride, bd); + HighbdIwht4X41Add(input, dest, stride, bd); } } - public static void HighbdIdct8x8Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) + public static void HighbdIdct8X8Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) { // If dc is 1, then input[0] is the reconstructed value, do not need // dequantization. Also, when dc is 1, dc is counted in eobs, namely eobs >=1. @@ -444,99 +444,99 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // DC only DCT coefficient if (eob == 1) { - VpxHighbdidct8x81AddC(input, dest, stride, bd); + VpxHighbdidct8X81AddC(input, dest, stride, bd); } else if (eob <= 12) { - HighbdIdct8x812Add(input, dest, stride, bd); + HighbdIdct8X812Add(input, dest, stride, bd); } else { - HighbdIdct8x864Add(input, dest, stride, bd); + HighbdIdct8X864Add(input, dest, stride, bd); } } - public static void HighbdIdct16x16Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) + public static void HighbdIdct16X16Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) { // The calculation can be simplified if there are not many non-zero dct // coefficients. Use eobs to separate different cases. // DC only DCT coefficient. if (eob == 1) { - HighbdIdct16x161Add(input, dest, stride, bd); + HighbdIdct16X161Add(input, dest, stride, bd); } else if (eob <= 10) { - HighbdIdct16x1610Add(input, dest, stride, bd); + HighbdIdct16X1610Add(input, dest, stride, bd); } else if (eob <= 38) { - HighbdIdct16x1638Add(input, dest, stride, bd); + HighbdIdct16X1638Add(input, dest, stride, bd); } else { - HighbdIdct16x16256Add(input, dest, stride, bd); + HighbdIdct16X16256Add(input, dest, stride, bd); } } - public static void HighbdIdct32x32Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) + public static void HighbdIdct32X32Add(ReadOnlySpan input, Span dest, int stride, int eob, int bd) { // Non-zero coeff only in upper-left 8x8 if (eob == 1) { - HighbdIdct32x321Add(input, dest, stride, bd); + HighbdIdct32X321Add(input, dest, stride, bd); } else if (eob <= 34) { - HighbdIdct32x3234Add(input, dest, stride, bd); + HighbdIdct32X3234Add(input, dest, stride, bd); } else if (eob <= 135) { - HighbdIdct32x32135Add(input, dest, stride, bd); + HighbdIdct32X32135Add(input, dest, stride, bd); } else { - HighbdIdct32x321024Add(input, dest, stride, bd); + HighbdIdct32X321024Add(input, dest, stride, bd); } } // Iht - public static void HighbdIht4x4Add(TxType txType, ReadOnlySpan input, Span dest, int stride, + public static void HighbdIht4X4Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob, int bd) { if (txType == TxType.DctDct) { - HighbdIdct4x4Add(input, dest, stride, eob, bd); + HighbdIdct4X4Add(input, dest, stride, eob, bd); } else { - HighbdIht4x416Add(input, dest, stride, (int)txType, bd); + HighbdIht4X416Add(input, dest, stride, (int)txType, bd); } } - public static void HighbdIht8x8Add(TxType txType, ReadOnlySpan input, Span dest, int stride, + public static void HighbdIht8X8Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob, int bd) { if (txType == TxType.DctDct) { - HighbdIdct8x8Add(input, dest, stride, eob, bd); + HighbdIdct8X8Add(input, dest, stride, eob, bd); } else { - HighbdIht8x864Add(input, dest, stride, (int)txType, bd); + HighbdIht8X864Add(input, dest, stride, (int)txType, bd); } } - public static void HighbdIht16x16Add(TxType txType, ReadOnlySpan input, Span dest, int stride, + public static void HighbdIht16X16Add(TxType txType, ReadOnlySpan input, Span dest, int stride, int eob, int bd) { if (txType == TxType.DctDct) { - HighbdIdct16x16Add(input, dest, stride, eob, bd); + HighbdIdct16X16Add(input, dest, stride, eob, bd); } else { - HighbdIht16x16256Add(input, dest, stride, (int)txType, bd); + HighbdIht16X16256Add(input, dest, stride, (int)txType, bd); } } } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/LoopFilter.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/LoopFilter.cs index 120d8763c..937a196dd 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/LoopFilter.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/LoopFilter.cs @@ -142,13 +142,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // 10101010 // // A loopfilter should be applied to every other 8x8 horizontally. - private static readonly ulong[] Left64x64TxformMask = - { + private static readonly ulong[] _left64X64TxformMask = + [ 0xffffffffffffffffUL, // (int)TxSize.Tx4x4 0xffffffffffffffffUL, // (int)TxSize.Tx8x8 0x5555555555555555UL, // (int)TxSize.Tx16x16 0x1111111111111111UL // (int)TxSize.Tx32x32 - }; + ]; // 64 bit masks for above transform size. Each 1 represents a position where // we should apply a loop filter across the top border of an 8x8 block @@ -167,13 +167,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // 00000000 // // A loopfilter should be applied to every other 4 the row vertically. - private static readonly ulong[] Above64x64TxformMask = - { + private static readonly ulong[] _above64X64TxformMask = + [ 0xffffffffffffffffUL, // (int)TxSize.Tx4x4 0xffffffffffffffffUL, // (int)TxSize.Tx8x8 0x00ff00ff00ff00ffUL, // (int)TxSize.Tx16x16 0x000000ff000000ffUL // (int)TxSize.Tx32x32 - }; + ]; // 64 bit masks for prediction sizes (left). Each 1 represents a position // where left border of an 8x8 block. These are aligned to the right most @@ -190,8 +190,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // 00000000 // 00000000 // 00000000 - private static readonly ulong[] LeftPredictionMask = - { + private static readonly ulong[] _leftPredictionMask = + [ 0x0000000000000001UL, // BLOCK_4x4, 0x0000000000000001UL, // BLOCK_4x8, 0x0000000000000001UL, // BLOCK_8x4, @@ -205,11 +205,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x0101010101010101UL, // BLOCK_32x64, 0x0000000001010101UL, // BLOCK_64x32, 0x0101010101010101UL // BLOCK_64x64 - }; + ]; // 64 bit mask to shift and set for each prediction size. - private static readonly ulong[] AbovePredictionMask = - { + private static readonly ulong[] _abovePredictionMask = + [ 0x0000000000000001UL, // BLOCK_4x4 0x0000000000000001UL, // BLOCK_4x8 0x0000000000000001UL, // BLOCK_8x4 @@ -223,13 +223,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x000000000000000fUL, // BLOCK_32x64, 0x00000000000000ffUL, // BLOCK_64x32, 0x00000000000000ffUL // BLOCK_64x64 - }; + ]; // 64 bit mask to shift and set for each prediction size. A bit is set for // each 8x8 block that would be in the left most block of the given block // size in the 64x64 block. - private static readonly ulong[] SizeMask = - { + private static readonly ulong[] _sizeMask = + [ 0x0000000000000001UL, // BLOCK_4x4 0x0000000000000001UL, // BLOCK_4x8 0x0000000000000001UL, // BLOCK_8x4 @@ -243,32 +243,32 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x0f0f0f0f0f0f0f0fUL, // BLOCK_32x64, 0x00000000ffffffffUL, // BLOCK_64x32, 0xffffffffffffffffUL // BLOCK_64x64 - }; + ]; // These are used for masking the left and above borders. private const ulong LeftBorder = 0x1111111111111111UL; private const ulong AboveBorder = 0x000000ff000000ffUL; // 16 bit masks for uv transform sizes. - private static readonly ushort[] Left64x64TxformMaskUv = - { + private static readonly ushort[] _left64X64TxformMaskUv = + [ 0xffff, // (int)TxSize.Tx4x4 0xffff, // (int)TxSize.Tx8x8 0x5555, // (int)TxSize.Tx16x16 0x1111 // (int)TxSize.Tx32x32 - }; + ]; - private static readonly ushort[] Above64x64TxformMaskUv = - { + private static readonly ushort[] _above64X64TxformMaskUv = + [ 0xffff, // (int)TxSize.Tx4x4 0xffff, // (int)TxSize.Tx8x8 0x0f0f, // (int)TxSize.Tx16x16 0x000f // (int)TxSize.Tx32x32 - }; + ]; // 16 bit left mask to shift and set for each uv prediction size. - private static readonly ushort[] LeftPredictionMaskUv = - { + private static readonly ushort[] _leftPredictionMaskUv = + [ 0x0001, // BLOCK_4x4, 0x0001, // BLOCK_4x8, 0x0001, // BLOCK_8x4, @@ -282,11 +282,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x1111, // BLOCK_32x64 0x0011, // BLOCK_64x32, 0x1111 // BLOCK_64x64 - }; + ]; // 16 bit above mask to shift and set for uv each prediction size. - private static readonly ushort[] AbovePredictionMaskUv = - { + private static readonly ushort[] _abovePredictionMaskUv = + [ 0x0001, // BLOCK_4x4 0x0001, // BLOCK_4x8 0x0001, // BLOCK_8x4 @@ -300,11 +300,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x0003, // BLOCK_32x64, 0x000f, // BLOCK_64x32, 0x000f // BLOCK_64x64 - }; + ]; // 64 bit mask to shift and set for each uv prediction size - private static readonly ushort[] SizeMaskUv = - { + private static readonly ushort[] _sizeMaskUv = + [ 0x0001, // BLOCK_4x4 0x0001, // BLOCK_4x8 0x0001, // BLOCK_8x4 @@ -318,20 +318,20 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0x3333, // BLOCK_32x64, 0x00ff, // BLOCK_64x32, 0xffff // BLOCK_64x64 - }; + ]; private const ushort LeftBorderUv = 0x1111; private const ushort AboveBorderUv = 0x000f; - private static readonly int[] ModeLfLut = - { + private static readonly int[] _modeLfLut = + [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // INTRA_MODES 1, 1, 0, 1 // INTER_MODES (ZEROMV == 0) - }; + ]; private static byte GetFilterLevel(ref LoopFilterInfoN lfiN, ref ModeInfo mi) { - return lfiN.Lvl[mi.SegmentId][mi.RefFrame[0]][ModeLfLut[(int)mi.Mode]]; + return lfiN.Lvl[mi.SegmentId][mi.RefFrame[0]][_modeLfLut[(int)mi.Mode]]; } private static Span GetLfm(ref Types.LoopFilter lf, int miRow, int miCol) @@ -341,13 +341,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // 8x8 blocks in a superblock. A "1" represents the first block in a 16x16 // or greater area. - private static readonly byte[][] FirstBlockIn16x16 = - { - new byte[] { 1, 0, 1, 0, 1, 0, 1, 0 }, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - new byte[] { 1, 0, 1, 0, 1, 0, 1, 0 }, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - new byte[] { 1, 0, 1, 0, 1, 0, 1, 0 }, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, - new byte[] { 1, 0, 1, 0, 1, 0, 1, 0 }, new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 } - }; + private static readonly byte[][] _firstBlockIn16X16 = + [ + [1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0], + [1, 0, 1, 0, 1, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0] + ]; // This function sets up the bit masks for a block represented // by miRow, miCol in a 64x64 region. @@ -361,15 +361,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ref LoopFilterMask lfm = ref GetLfm(ref cm.Lf, miRow, miCol)[0]; ref ulong leftY = ref lfm.LeftY[(int)txSizeY]; ref ulong aboveY = ref lfm.AboveY[(int)txSizeY]; - ref ulong int4x4Y = ref lfm.Int4x4Y; + ref ulong int4X4Y = ref lfm.Int4X4Y; ref ushort leftUv = ref lfm.LeftUv[(int)txSizeUv]; ref ushort aboveUv = ref lfm.AboveUv[(int)txSizeUv]; - ref ushort int4x4Uv = ref lfm.Int4x4Uv; + ref ushort int4X4Uv = ref lfm.Int4X4Uv; int rowInSb = miRow & 7; int colInSb = miCol & 7; int shiftY = colInSb + (rowInSb << 3); int shiftUv = (colInSb >> 1) + ((rowInSb >> 1) << 2); - int buildUv = FirstBlockIn16x16[rowInSb][colInSb]; + int buildUv = _firstBlockIn16X16[rowInSb][colInSb]; if (filterLevel == 0) { @@ -396,13 +396,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // // U and V set things on a 16 bit scale. // - aboveY |= AbovePredictionMask[(int)blockSize] << shiftY; - leftY |= LeftPredictionMask[(int)blockSize] << shiftY; + aboveY |= _abovePredictionMask[(int)blockSize] << shiftY; + leftY |= _leftPredictionMask[(int)blockSize] << shiftY; if (buildUv != 0) { - aboveUv |= (ushort)(AbovePredictionMaskUv[(int)blockSize] << shiftUv); - leftUv |= (ushort)(LeftPredictionMaskUv[(int)blockSize] << shiftUv); + aboveUv |= (ushort)(_abovePredictionMaskUv[(int)blockSize] << shiftUv); + leftUv |= (ushort)(_leftPredictionMaskUv[(int)blockSize] << shiftUv); } // If the block has no coefficients and is not intra we skip applying @@ -415,55 +415,55 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Add a mask for the transform size. The transform size mask is set to // be correct for a 64x64 prediction block size. Mask to match the size of // the block we are working on and then shift it into place. - aboveY |= (SizeMask[(int)blockSize] & Above64x64TxformMask[(int)txSizeY]) << shiftY; - leftY |= (SizeMask[(int)blockSize] & Left64x64TxformMask[(int)txSizeY]) << shiftY; + aboveY |= (_sizeMask[(int)blockSize] & _above64X64TxformMask[(int)txSizeY]) << shiftY; + leftY |= (_sizeMask[(int)blockSize] & _left64X64TxformMask[(int)txSizeY]) << shiftY; if (buildUv != 0) { - aboveUv |= (ushort)((SizeMaskUv[(int)blockSize] & Above64x64TxformMaskUv[(int)txSizeUv]) << shiftUv); - leftUv |= (ushort)((SizeMaskUv[(int)blockSize] & Left64x64TxformMaskUv[(int)txSizeUv]) << shiftUv); + aboveUv |= (ushort)((_sizeMaskUv[(int)blockSize] & _above64X64TxformMaskUv[(int)txSizeUv]) << shiftUv); + leftUv |= (ushort)((_sizeMaskUv[(int)blockSize] & _left64X64TxformMaskUv[(int)txSizeUv]) << shiftUv); } // Try to determine what to do with the internal 4x4 block boundaries. These // differ from the 4x4 boundaries on the outside edge of an 8x8 in that the // internal ones can be skipped and don't depend on the prediction block size. - if (txSizeY == TxSize.Tx4x4) + if (txSizeY == TxSize.Tx4X4) { - int4x4Y |= SizeMask[(int)blockSize] << shiftY; + int4X4Y |= _sizeMask[(int)blockSize] << shiftY; } - if (buildUv != 0 && txSizeUv == TxSize.Tx4x4) + if (buildUv != 0 && txSizeUv == TxSize.Tx4X4) { - int4x4Uv |= (ushort)((SizeMaskUv[(int)blockSize] & 0xffff) << shiftUv); + int4X4Uv |= (ushort)((_sizeMaskUv[(int)blockSize] & 0xffff) << shiftUv); } } private static void AdjustMask(ref Vp9Common cm, int miRow, int miCol, ref LoopFilterMask lfm) { - const ulong leftBorder = 0x1111111111111111UL; - const ulong aboveBorder = 0x000000ff000000ffUL; - const ushort leftBorderUv = 0x1111; - const ushort aboveBorderUv = 0x000f; + const ulong LeftBorder = 0x1111111111111111UL; + const ulong AboveBorder = 0x000000ff000000ffUL; + const ushort LeftBorderUv = 0x1111; + const ushort AboveBorderUv = 0x000f; // The largest loopfilter we have is 16x16 so we use the 16x16 mask // for 32x32 transforms also. - lfm.LeftY[(int)TxSize.Tx16x16] |= lfm.LeftY[(int)TxSize.Tx32x32]; - lfm.AboveY[(int)TxSize.Tx16x16] |= lfm.AboveY[(int)TxSize.Tx32x32]; - lfm.LeftUv[(int)TxSize.Tx16x16] |= lfm.LeftUv[(int)TxSize.Tx32x32]; - lfm.AboveUv[(int)TxSize.Tx16x16] |= lfm.AboveUv[(int)TxSize.Tx32x32]; + lfm.LeftY[(int)TxSize.Tx16X16] |= lfm.LeftY[(int)TxSize.Tx32X32]; + lfm.AboveY[(int)TxSize.Tx16X16] |= lfm.AboveY[(int)TxSize.Tx32X32]; + lfm.LeftUv[(int)TxSize.Tx16X16] |= lfm.LeftUv[(int)TxSize.Tx32X32]; + lfm.AboveUv[(int)TxSize.Tx16X16] |= lfm.AboveUv[(int)TxSize.Tx32X32]; // We do at least 8 tap filter on every 32x32 even if the transform size // is 4x4. So if the 4x4 is set on a border pixel add it to the 8x8 and // remove it from the 4x4. - lfm.LeftY[(int)TxSize.Tx8x8] |= lfm.LeftY[(int)TxSize.Tx4x4] & leftBorder; - lfm.LeftY[(int)TxSize.Tx4x4] &= ~leftBorder; - lfm.AboveY[(int)TxSize.Tx8x8] |= lfm.AboveY[(int)TxSize.Tx4x4] & aboveBorder; - lfm.AboveY[(int)TxSize.Tx4x4] &= ~aboveBorder; - lfm.LeftUv[(int)TxSize.Tx8x8] |= (ushort)(lfm.LeftUv[(int)TxSize.Tx4x4] & leftBorderUv); - lfm.LeftUv[(int)TxSize.Tx4x4] &= unchecked((ushort)~leftBorderUv); - lfm.AboveUv[(int)TxSize.Tx8x8] |= (ushort)(lfm.AboveUv[(int)TxSize.Tx4x4] & aboveBorderUv); - lfm.AboveUv[(int)TxSize.Tx4x4] &= unchecked((ushort)~aboveBorderUv); + lfm.LeftY[(int)TxSize.Tx8X8] |= lfm.LeftY[(int)TxSize.Tx4X4] & LeftBorder; + lfm.LeftY[(int)TxSize.Tx4X4] &= ~LeftBorder; + lfm.AboveY[(int)TxSize.Tx8X8] |= lfm.AboveY[(int)TxSize.Tx4X4] & AboveBorder; + lfm.AboveY[(int)TxSize.Tx4X4] &= ~AboveBorder; + lfm.LeftUv[(int)TxSize.Tx8X8] |= (ushort)(lfm.LeftUv[(int)TxSize.Tx4X4] & LeftBorderUv); + lfm.LeftUv[(int)TxSize.Tx4X4] &= unchecked((ushort)~LeftBorderUv); + lfm.AboveUv[(int)TxSize.Tx8X8] |= (ushort)(lfm.AboveUv[(int)TxSize.Tx4X4] & AboveBorderUv); + lfm.AboveUv[(int)TxSize.Tx4X4] &= unchecked((ushort)~AboveBorderUv); // We do some special edge handling. if (miRow + Constants.MiBlockSize > cm.MiRows) @@ -475,7 +475,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ushort maskUv = (ushort)((1 << (((rows + 1) >> 1) << 2)) - 1); // Remove values completely outside our border. - for (int i = 0; i < (int)TxSize.Tx32x32; i++) + for (int i = 0; i < (int)TxSize.Tx32X32; i++) { lfm.LeftY[i] &= maskY; lfm.AboveY[i] &= maskY; @@ -483,21 +483,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfm.AboveUv[i] &= maskUv; } - lfm.Int4x4Y &= maskY; - lfm.Int4x4Uv &= maskUv; + lfm.Int4X4Y &= maskY; + lfm.Int4X4Uv &= maskUv; // We don't apply a wide loop filter on the last uv block row. If set // apply the shorter one instead. if (rows == 1) { - lfm.AboveUv[(int)TxSize.Tx8x8] |= lfm.AboveUv[(int)TxSize.Tx16x16]; - lfm.AboveUv[(int)TxSize.Tx16x16] = 0; + lfm.AboveUv[(int)TxSize.Tx8X8] |= lfm.AboveUv[(int)TxSize.Tx16X16]; + lfm.AboveUv[(int)TxSize.Tx16X16] = 0; } if (rows == 5) { - lfm.AboveUv[(int)TxSize.Tx8x8] |= (ushort)(lfm.AboveUv[(int)TxSize.Tx16x16] & 0xff00); - lfm.AboveUv[(int)TxSize.Tx16x16] &= (ushort)~(lfm.AboveUv[(int)TxSize.Tx16x16] & 0xff00); + lfm.AboveUv[(int)TxSize.Tx8X8] |= (ushort)(lfm.AboveUv[(int)TxSize.Tx16X16] & 0xff00); + lfm.AboveUv[(int)TxSize.Tx16X16] &= (ushort)~(lfm.AboveUv[(int)TxSize.Tx16X16] & 0xff00); } } @@ -515,7 +515,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ushort maskUvInt = (ushort)(((1 << (columns >> 1)) - 1) * 0x1111); // Remove the bits outside the image edge. - for (int i = 0; i < (int)TxSize.Tx32x32; i++) + for (int i = 0; i < (int)TxSize.Tx32X32; i++) { lfm.LeftY[i] &= maskY; lfm.AboveY[i] &= maskY; @@ -523,21 +523,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfm.AboveUv[i] &= maskUv; } - lfm.Int4x4Y &= maskY; - lfm.Int4x4Uv &= maskUvInt; + lfm.Int4X4Y &= maskY; + lfm.Int4X4Uv &= maskUvInt; // We don't apply a wide loop filter on the last uv column. If set // apply the shorter one instead. if (columns == 1) { - lfm.LeftUv[(int)TxSize.Tx8x8] |= lfm.LeftUv[(int)TxSize.Tx16x16]; - lfm.LeftUv[(int)TxSize.Tx16x16] = 0; + lfm.LeftUv[(int)TxSize.Tx8X8] |= lfm.LeftUv[(int)TxSize.Tx16X16]; + lfm.LeftUv[(int)TxSize.Tx16X16] = 0; } if (columns == 5) { - lfm.LeftUv[(int)TxSize.Tx8x8] |= (ushort)(lfm.LeftUv[(int)TxSize.Tx16x16] & 0xcccc); - lfm.LeftUv[(int)TxSize.Tx16x16] &= (ushort)~(lfm.LeftUv[(int)TxSize.Tx16x16] & 0xcccc); + lfm.LeftUv[(int)TxSize.Tx8X8] |= (ushort)(lfm.LeftUv[(int)TxSize.Tx16X16] & 0xcccc); + lfm.LeftUv[(int)TxSize.Tx16X16] &= (ushort)~(lfm.LeftUv[(int)TxSize.Tx16X16] & 0xcccc); } } @@ -545,7 +545,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // out. if (miCol == 0) { - for (int i = 0; i < (int)TxSize.Tx32x32; i++) + for (int i = 0; i < (int)TxSize.Tx32X32; i++) { lfm.LeftY[i] &= 0xfefefefefefefefeUL; lfm.LeftUv[i] &= 0xeeee; @@ -553,22 +553,22 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Assert if we try to apply 2 different loop filters at the same position. - Debug.Assert((lfm.LeftY[(int)TxSize.Tx16x16] & lfm.LeftY[(int)TxSize.Tx8x8]) == 0); - Debug.Assert((lfm.LeftY[(int)TxSize.Tx16x16] & lfm.LeftY[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.LeftY[(int)TxSize.Tx8x8] & lfm.LeftY[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.Int4x4Y & lfm.LeftY[(int)TxSize.Tx16x16]) == 0); - Debug.Assert((lfm.LeftUv[(int)TxSize.Tx16x16] & lfm.LeftUv[(int)TxSize.Tx8x8]) == 0); - Debug.Assert((lfm.LeftUv[(int)TxSize.Tx16x16] & lfm.LeftUv[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.LeftUv[(int)TxSize.Tx8x8] & lfm.LeftUv[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.Int4x4Uv & lfm.LeftUv[(int)TxSize.Tx16x16]) == 0); - Debug.Assert((lfm.AboveY[(int)TxSize.Tx16x16] & lfm.AboveY[(int)TxSize.Tx8x8]) == 0); - Debug.Assert((lfm.AboveY[(int)TxSize.Tx16x16] & lfm.AboveY[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.AboveY[(int)TxSize.Tx8x8] & lfm.AboveY[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.Int4x4Y & lfm.AboveY[(int)TxSize.Tx16x16]) == 0); - Debug.Assert((lfm.AboveUv[(int)TxSize.Tx16x16] & lfm.AboveUv[(int)TxSize.Tx8x8]) == 0); - Debug.Assert((lfm.AboveUv[(int)TxSize.Tx16x16] & lfm.AboveUv[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.AboveUv[(int)TxSize.Tx8x8] & lfm.AboveUv[(int)TxSize.Tx4x4]) == 0); - Debug.Assert((lfm.Int4x4Uv & lfm.AboveUv[(int)TxSize.Tx16x16]) == 0); + Debug.Assert((lfm.LeftY[(int)TxSize.Tx16X16] & lfm.LeftY[(int)TxSize.Tx8X8]) == 0); + Debug.Assert((lfm.LeftY[(int)TxSize.Tx16X16] & lfm.LeftY[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.LeftY[(int)TxSize.Tx8X8] & lfm.LeftY[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.Int4X4Y & lfm.LeftY[(int)TxSize.Tx16X16]) == 0); + Debug.Assert((lfm.LeftUv[(int)TxSize.Tx16X16] & lfm.LeftUv[(int)TxSize.Tx8X8]) == 0); + Debug.Assert((lfm.LeftUv[(int)TxSize.Tx16X16] & lfm.LeftUv[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.LeftUv[(int)TxSize.Tx8X8] & lfm.LeftUv[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.Int4X4Uv & lfm.LeftUv[(int)TxSize.Tx16X16]) == 0); + Debug.Assert((lfm.AboveY[(int)TxSize.Tx16X16] & lfm.AboveY[(int)TxSize.Tx8X8]) == 0); + Debug.Assert((lfm.AboveY[(int)TxSize.Tx16X16] & lfm.AboveY[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.AboveY[(int)TxSize.Tx8X8] & lfm.AboveY[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.Int4X4Y & lfm.AboveY[(int)TxSize.Tx16X16]) == 0); + Debug.Assert((lfm.AboveUv[(int)TxSize.Tx16X16] & lfm.AboveUv[(int)TxSize.Tx8X8]) == 0); + Debug.Assert((lfm.AboveUv[(int)TxSize.Tx16X16] & lfm.AboveUv[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.AboveUv[(int)TxSize.Tx8X8] & lfm.AboveUv[(int)TxSize.Tx4X4]) == 0); + Debug.Assert((lfm.Int4X4Uv & lfm.AboveUv[(int)TxSize.Tx16X16]) == 0); } public static unsafe void ResetLfm(ref Vp9Common cm) @@ -664,10 +664,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int subsamplingFactor, ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl) { @@ -678,7 +678,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 Span lfis = stackalloc LoopFilterThresh[2]; ss[0] = s; - for (uint mask = (mask16x16 | mask8x8 | mask4x4 | mask4x4Int) & dualMaskCutoff; + for (uint mask = (mask16X16 | mask8X8 | mask4X4 | mask4X4Int) & dualMaskCutoff; mask != 0; mask = (mask & ~dualOne) >> 1) { @@ -688,24 +688,24 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfis[1] = lfthr[lfl[lflForward]]; ss[1] = ss[0].Slice(8 * pitch); - if ((mask16x16 & dualOne) != 0) + if ((mask16X16 & dualOne) != 0) { - if ((mask16x16 & dualOne) == dualOne) + if ((mask16X16 & dualOne) == dualOne) { LoopFilterAuto.LpfVertical16Dual(ss[0], pitch, lfis[0].Mblim.AsSpan(), lfis[0].Lim.AsSpan(), lfis[0].HevThr.AsSpan()); } else { - ref LoopFilterThresh lfi = ref lfis[(mask16x16 & 1) == 0 ? 1 : 0]; - LoopFilterAuto.LpfVertical16(ss[(mask16x16 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim.AsSpan(), + ref LoopFilterThresh lfi = ref lfis[(mask16X16 & 1) == 0 ? 1 : 0]; + LoopFilterAuto.LpfVertical16(ss[(mask16X16 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } } - if ((mask8x8 & dualOne) != 0) + if ((mask8X8 & dualOne) != 0) { - if ((mask8x8 & dualOne) == dualOne) + if ((mask8X8 & dualOne) == dualOne) { LoopFilterAuto.LpfVertical8Dual( ss[0], @@ -719,9 +719,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask8x8 & 1) == 0 ? 1 : 0]; + ref LoopFilterThresh lfi = ref lfis[(mask8X8 & 1) == 0 ? 1 : 0]; LoopFilterAuto.LpfVertical8( - ss[(mask8x8 & 1) == 0 ? 1 : 0], + ss[(mask8X8 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), @@ -729,9 +729,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - if ((mask4x4 & dualOne) != 0) + if ((mask4X4 & dualOne) != 0) { - if ((mask4x4 & dualOne) == dualOne) + if ((mask4X4 & dualOne) == dualOne) { LoopFilterAuto.LpfVertical4Dual( ss[0], @@ -745,15 +745,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask4x4 & 1) == 0 ? 1 : 0]; - LoopFilterAuto.LpfVertical4(ss[(mask4x4 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim.AsSpan(), + ref LoopFilterThresh lfi = ref lfis[(mask4X4 & 1) == 0 ? 1 : 0]; + LoopFilterAuto.LpfVertical4(ss[(mask4X4 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } } - if ((mask4x4Int & dualOne) != 0) + if ((mask4X4Int & dualOne) != 0) { - if ((mask4x4Int & dualOne) == dualOne) + if ((mask4X4Int & dualOne) == dualOne) { LoopFilterAuto.LpfVertical4Dual( ss[0].Slice(4), @@ -767,8 +767,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask4x4Int & 1) == 0 ? 1 : 0]; - LoopFilterAuto.LpfVertical4(ss[(mask4x4Int & 1) == 0 ? 1 : 0].Slice(4), pitch, + ref LoopFilterThresh lfi = ref lfis[(mask4X4Int & 1) == 0 ? 1 : 0]; + LoopFilterAuto.LpfVertical4(ss[(mask4X4Int & 1) == 0 ? 1 : 0].Slice(4), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } } @@ -776,10 +776,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ss[0] = ss[0].Slice(8); lfl = lfl.Slice(1); - mask16x16 >>= 1; - mask8x8 >>= 1; - mask4x4 >>= 1; - mask4x4Int >>= 1; + mask16X16 >>= 1; + mask8X8 >>= 1; + mask4X4 >>= 1; + mask4X4Int >>= 1; } } @@ -787,10 +787,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int subsamplingFactor, ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl, int bd) @@ -802,7 +802,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 Span lfis = stackalloc LoopFilterThresh[2]; ss[0] = s; - for (uint mask = (mask16x16 | mask8x8 | mask4x4 | mask4x4Int) & dualMaskCutoff; + for (uint mask = (mask16X16 | mask8X8 | mask4X4 | mask4X4Int) & dualMaskCutoff; mask != 0; mask = (mask & ~dualOne) >> 1) { @@ -812,24 +812,24 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfis[1] = lfthr[lfl[lflForward]]; ss[1] = ss[0].Slice(8 * pitch); - if ((mask16x16 & dualOne) != 0) + if ((mask16X16 & dualOne) != 0) { - if ((mask16x16 & dualOne) == dualOne) + if ((mask16X16 & dualOne) == dualOne) { LoopFilterScalar.HighBdLpfVertical16Dual(ss[0], pitch, lfis[0].Mblim[0], lfis[0].Lim[0], lfis[0].HevThr[0], bd); } else { - ref LoopFilterThresh lfi = ref lfis[(mask16x16 & 1) == 0 ? 1 : 0]; - LoopFilterScalar.HighBdLpfVertical16(ss[(mask16x16 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim[0], + ref LoopFilterThresh lfi = ref lfis[(mask16X16 & 1) == 0 ? 1 : 0]; + LoopFilterScalar.HighBdLpfVertical16(ss[(mask16X16 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } } - if ((mask8x8 & dualOne) != 0) + if ((mask8X8 & dualOne) != 0) { - if ((mask8x8 & dualOne) == dualOne) + if ((mask8X8 & dualOne) == dualOne) { LoopFilterScalar.HighBdLpfVertical8Dual( ss[0], @@ -844,9 +844,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask8x8 & 1) == 0 ? 1 : 0]; + ref LoopFilterThresh lfi = ref lfis[(mask8X8 & 1) == 0 ? 1 : 0]; LoopFilterScalar.HighBdLpfVertical8( - ss[(mask8x8 & 1) == 0 ? 1 : 0], + ss[(mask8X8 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim[0], lfi.Lim[0], @@ -855,9 +855,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - if ((mask4x4 & dualOne) != 0) + if ((mask4X4 & dualOne) != 0) { - if ((mask4x4 & dualOne) == dualOne) + if ((mask4X4 & dualOne) == dualOne) { LoopFilterScalar.HighBdLpfVertical4Dual( ss[0], @@ -872,15 +872,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask4x4 & 1) == 0 ? 1 : 0]; - LoopFilterScalar.HighBdLpfVertical4(ss[(mask4x4 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim[0], + ref LoopFilterThresh lfi = ref lfis[(mask4X4 & 1) == 0 ? 1 : 0]; + LoopFilterScalar.HighBdLpfVertical4(ss[(mask4X4 & 1) == 0 ? 1 : 0], pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } } - if ((mask4x4Int & dualOne) != 0) + if ((mask4X4Int & dualOne) != 0) { - if ((mask4x4Int & dualOne) == dualOne) + if ((mask4X4Int & dualOne) == dualOne) { LoopFilterScalar.HighBdLpfVertical4Dual( ss[0].Slice(4), @@ -895,8 +895,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } else { - ref LoopFilterThresh lfi = ref lfis[(mask4x4Int & 1) == 0 ? 1 : 0]; - LoopFilterScalar.HighBdLpfVertical4(ss[(mask4x4Int & 1) == 0 ? 1 : 0].Slice(4), pitch, + ref LoopFilterThresh lfi = ref lfis[(mask4X4Int & 1) == 0 ? 1 : 0]; + LoopFilterScalar.HighBdLpfVertical4(ss[(mask4X4Int & 1) == 0 ? 1 : 0].Slice(4), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } } @@ -904,35 +904,35 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 ss[0] = ss[0].Slice(8); lfl = lfl.Slice(1); - mask16x16 >>= 1; - mask8x8 >>= 1; - mask4x4 >>= 1; - mask4x4Int >>= 1; + mask16X16 >>= 1; + mask8X8 >>= 1; + mask4X4 >>= 1; + mask4X4Int >>= 1; } } private static void FilterSelectivelyHoriz( ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl) { int count; - for (uint mask = mask16x16 | mask8x8 | mask4x4 | mask4x4Int; mask != 0; mask >>= count) + for (uint mask = mask16X16 | mask8X8 | mask4X4 | mask4X4Int; mask != 0; mask >>= count) { count = 1; if ((mask & 1) != 0) { LoopFilterThresh lfi = lfthr[lfl[0]]; - if ((mask16x16 & 1) != 0) + if ((mask16X16 & 1) != 0) { - if ((mask16x16 & 3) == 3) + if ((mask16X16 & 3) == 3) { LoopFilterAuto.LpfHorizontal16Dual(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); @@ -944,9 +944,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfi.HevThr.AsSpan()); } } - else if ((mask8x8 & 1) != 0) + else if ((mask8X8 & 1) != 0) { - if ((mask8x8 & 3) == 3) + if ((mask8X8 & 3) == 3) { // Next block's thresholds. LoopFilterThresh lfin = lfthr[lfl[1]]; @@ -961,7 +961,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); - if ((mask4x4Int & 3) == 3) + if ((mask4X4Int & 3) == 3) { LoopFilterAuto.LpfHorizontal4Dual( s.Slice(4 * pitch), @@ -973,12 +973,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); } - else if ((mask4x4Int & 1) != 0) + else if ((mask4X4Int & 1) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } - else if ((mask4x4Int & 2) != 0) + else if ((mask4X4Int & 2) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(8 + (4 * pitch)), pitch, lfin.Mblim.AsSpan(), lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); @@ -991,16 +991,16 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 LoopFilterAuto.LpfHorizontal8(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } } } - else if ((mask4x4 & 1) != 0) + else if ((mask4X4 & 1) != 0) { - if ((mask4x4 & 3) == 3) + if ((mask4X4 & 3) == 3) { // Next block's thresholds. LoopFilterThresh lfin = lfthr[lfl[1]]; @@ -1015,7 +1015,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); - if ((mask4x4Int & 3) == 3) + if ((mask4X4Int & 3) == 3) { LoopFilterAuto.LpfHorizontal4Dual( s.Slice(4 * pitch), @@ -1027,12 +1027,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); } - else if ((mask4x4Int & 1) != 0) + else if ((mask4X4Int & 1) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } - else if ((mask4x4Int & 2) != 0) + else if ((mask4X4Int & 2) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(8 + (4 * pitch)), pitch, lfin.Mblim.AsSpan(), lfin.Lim.AsSpan(), lfin.HevThr.AsSpan()); @@ -1045,7 +1045,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 LoopFilterAuto.LpfHorizontal4(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterAuto.LpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); @@ -1061,36 +1061,36 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 s = s.Slice(8 * count); lfl = lfl.Slice(count); - mask16x16 >>= count; - mask8x8 >>= count; - mask4x4 >>= count; - mask4x4Int >>= count; + mask16X16 >>= count; + mask8X8 >>= count; + mask4X4 >>= count; + mask4X4Int >>= count; } } private static void HighbdFilterSelectivelyHoriz( ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl, int bd) { int count; - for (uint mask = mask16x16 | mask8x8 | mask4x4 | mask4x4Int; mask != 0; mask >>= count) + for (uint mask = mask16X16 | mask8X8 | mask4X4 | mask4X4Int; mask != 0; mask >>= count) { count = 1; if ((mask & 1) != 0) { LoopFilterThresh lfi = lfthr[lfl[0]]; - if ((mask16x16 & 1) != 0) + if ((mask16X16 & 1) != 0) { - if ((mask16x16 & 3) == 3) + if ((mask16X16 & 3) == 3) { LoopFilterScalar.HighBdLpfHorizontal16Dual(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); @@ -1102,9 +1102,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 bd); } } - else if ((mask8x8 & 1) != 0) + else if ((mask8X8 & 1) != 0) { - if ((mask8x8 & 3) == 3) + if ((mask8X8 & 3) == 3) { // Next block's thresholds. LoopFilterThresh lfin = lfthr[lfl[1]]; @@ -1120,7 +1120,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.HevThr[0], bd); - if ((mask4x4Int & 3) == 3) + if ((mask4X4Int & 3) == 3) { LoopFilterScalar.HighBdLpfHorizontal4Dual( s.Slice(4 * pitch), @@ -1133,12 +1133,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.HevThr[0], bd); } - else if ((mask4x4Int & 1) != 0) + else if ((mask4X4Int & 1) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } - else if ((mask4x4Int & 2) != 0) + else if ((mask4X4Int & 2) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(8 + (4 * pitch)), pitch, lfin.Mblim[0], lfin.Lim[0], lfin.HevThr[0], bd); @@ -1151,16 +1151,16 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 LoopFilterScalar.HighBdLpfHorizontal8(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } } } - else if ((mask4x4 & 1) != 0) + else if ((mask4X4 & 1) != 0) { - if ((mask4x4 & 3) == 3) + if ((mask4X4 & 3) == 3) { // Next block's thresholds. LoopFilterThresh lfin = lfthr[lfl[1]]; @@ -1176,7 +1176,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.HevThr[0], bd); - if ((mask4x4Int & 3) == 3) + if ((mask4X4Int & 3) == 3) { LoopFilterScalar.HighBdLpfHorizontal4Dual( s.Slice(4 * pitch), @@ -1189,12 +1189,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 lfin.HevThr[0], bd); } - else if ((mask4x4Int & 1) != 0) + else if ((mask4X4Int & 1) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } - else if ((mask4x4Int & 2) != 0) + else if ((mask4X4Int & 2) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(8 + (4 * pitch)), pitch, lfin.Mblim[0], lfin.Lim[0], lfin.HevThr[0], bd); @@ -1207,7 +1207,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 LoopFilterScalar.HighBdLpfHorizontal4(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterScalar.HighBdLpfHorizontal4(s.Slice(4 * pitch), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); @@ -1223,47 +1223,47 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 s = s.Slice(8 * count); lfl = lfl.Slice(count); - mask16x16 >>= count; - mask8x8 >>= count; - mask4x4 >>= count; - mask4x4Int >>= count; + mask16X16 >>= count; + mask8X8 >>= count; + mask4X4 >>= count; + mask4X4Int >>= count; } } private static void FilterSelectivelyVert( ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl) { - for (uint mask = mask16x16 | mask8x8 | mask4x4 | mask4x4Int; mask != 0; mask >>= 1) + for (uint mask = mask16X16 | mask8X8 | mask4X4 | mask4X4Int; mask != 0; mask >>= 1) { LoopFilterThresh lfi = lfthr[lfl[0]]; if ((mask & 1) != 0) { - if ((mask16x16 & 1) != 0) + if ((mask16X16 & 1) != 0) { LoopFilterAuto.LpfVertical16(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } - else if ((mask8x8 & 1) != 0) + else if ((mask8X8 & 1) != 0) { LoopFilterAuto.LpfVertical8(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } - else if ((mask4x4 & 1) != 0) + else if ((mask4X4 & 1) != 0) { LoopFilterAuto.LpfVertical4(s, pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); } } - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterAuto.LpfVertical4(s.Slice(4), pitch, lfi.Mblim.AsSpan(), lfi.Lim.AsSpan(), lfi.HevThr.AsSpan()); @@ -1271,67 +1271,67 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 s = s.Slice(8); lfl = lfl.Slice(1); - mask16x16 >>= 1; - mask8x8 >>= 1; - mask4x4 >>= 1; - mask4x4Int >>= 1; + mask16X16 >>= 1; + mask8X8 >>= 1; + mask4X4 >>= 1; + mask4X4Int >>= 1; } } private static void HighbdFilterSelectivelyVert( ArrayPtr s, int pitch, - uint mask16x16, - uint mask8x8, - uint mask4x4, - uint mask4x4Int, + uint mask16X16, + uint mask8X8, + uint mask4X4, + uint mask4X4Int, ReadOnlySpan lfthr, ReadOnlySpan lfl, int bd) { - for (uint mask = mask16x16 | mask8x8 | mask4x4 | mask4x4Int; mask != 0; mask >>= 1) + for (uint mask = mask16X16 | mask8X8 | mask4X4 | mask4X4Int; mask != 0; mask >>= 1) { LoopFilterThresh lfi = lfthr[lfl[0]]; if ((mask & 1) != 0) { - if ((mask16x16 & 1) != 0) + if ((mask16X16 & 1) != 0) { LoopFilterScalar.HighBdLpfVertical16(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } - else if ((mask8x8 & 1) != 0) + else if ((mask8X8 & 1) != 0) { LoopFilterScalar.HighBdLpfVertical8(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } - else if ((mask4x4 & 1) != 0) + else if ((mask4X4 & 1) != 0) { LoopFilterScalar.HighBdLpfVertical4(s, pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } } - if ((mask4x4Int & 1) != 0) + if ((mask4X4Int & 1) != 0) { LoopFilterScalar.HighBdLpfVertical4(s.Slice(4), pitch, lfi.Mblim[0], lfi.Lim[0], lfi.HevThr[0], bd); } s = s.Slice(8); lfl = lfl.Slice(1); - mask16x16 >>= 1; - mask8x8 >>= 1; - mask4x4 >>= 1; - mask4x4Int >>= 1; + mask16X16 >>= 1; + mask8X8 >>= 1; + mask4X4 >>= 1; + mask4X4Int >>= 1; } } - private static readonly byte[] Num4x4BlocksWideLookup = { 1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16 }; - private static readonly byte[] Num4x4BlocksHighLookup = { 1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16 }; - private static readonly byte[] Num8x8BlocksWideLookup = { 1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8 }; - private static readonly byte[] Num8x8BlocksHighLookup = { 1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8 }; + private static readonly byte[] _num4X4BlocksWideLookup = [1, 1, 2, 2, 2, 4, 4, 4, 8, 8, 8, 16, 16]; + private static readonly byte[] _num4X4BlocksHighLookup = [1, 2, 1, 2, 4, 2, 4, 8, 4, 8, 16, 8, 16]; + private static readonly byte[] _num8X8BlocksWideLookup = [1, 1, 1, 1, 1, 2, 2, 2, 4, 4, 4, 8, 8]; + private static readonly byte[] _num8X8BlocksHighLookup = [1, 1, 1, 1, 2, 1, 2, 4, 2, 4, 8, 4, 8]; private static void FilterBlockPlaneNon420( ref Vp9Common cm, ref MacroBlockDPlane plane, - ArrayPtr> mi8x8, + ArrayPtr> mi8X8, int miRow, int miCol) { @@ -1342,35 +1342,35 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 int rowStepStride = cm.MiStride * rowStep; ref Buf2D dst = ref plane.Dst; ArrayPtr dst0 = dst.Buf; - Span mask16x16 = stackalloc int[Constants.MiBlockSize]; - Span mask8x8 = stackalloc int[Constants.MiBlockSize]; - Span mask4x4 = stackalloc int[Constants.MiBlockSize]; - Span mask4x4Int = stackalloc int[Constants.MiBlockSize]; + Span mask16X16 = stackalloc int[Constants.MiBlockSize]; + Span mask8X8 = stackalloc int[Constants.MiBlockSize]; + Span mask4X4 = stackalloc int[Constants.MiBlockSize]; + Span mask4X4Int = stackalloc int[Constants.MiBlockSize]; Span lfl = stackalloc byte[Constants.MiBlockSize * Constants.MiBlockSize]; for (int r = 0; r < Constants.MiBlockSize && miRow + r < cm.MiRows; r += rowStep) { - uint mask16x16C = 0; - uint mask8x8C = 0; - uint mask4x4C = 0; + uint mask16X16C = 0; + uint mask8X8C = 0; + uint mask4X4C = 0; uint borderMask; // Determine the vertical edges that need filtering for (int c = 0; c < Constants.MiBlockSize && miCol + c < cm.MiCols; c += colStep) { - ref ModeInfo mi = ref mi8x8[c].Value; + ref ModeInfo mi = ref mi8X8[c].Value; BlockSize sbType = mi.SbType; bool skipThis = mi.Skip != 0 && mi.IsInterBlock(); // left edge of current unit is block/partition edge -> no skip - bool blockEdgeLeft = Num4x4BlocksWideLookup[(int)sbType] <= 1 || (c & (Num8x8BlocksWideLookup[(int)sbType] - 1)) == 0; + bool blockEdgeLeft = _num4X4BlocksWideLookup[(int)sbType] <= 1 || (c & (_num8X8BlocksWideLookup[(int)sbType] - 1)) == 0; bool skipThisC = skipThis && !blockEdgeLeft; // top edge of current unit is block/partition edge -> no skip - bool blockEdgeAbove = Num4x4BlocksHighLookup[(int)sbType] <= 1 || (r & (Num8x8BlocksHighLookup[(int)sbType] - 1)) == 0; + bool blockEdgeAbove = _num4X4BlocksHighLookup[(int)sbType] <= 1 || (r & (_num8X8BlocksHighLookup[(int)sbType] - 1)) == 0; bool skipThisR = skipThis && !blockEdgeAbove; TxSize txSize = mi.GetUvTxSize(ref plane); - bool skipBorder4x4C = ssX != 0 && miCol + c == cm.MiCols - 1; - bool skipBorder4x4R = ssY != 0 && miRow + r == cm.MiRows - 1; + bool skipBorder4X4C = ssX != 0 && miCol + c == cm.MiCols - 1; + bool skipBorder4X4R = ssY != 0 && miRow + r == cm.MiRows - 1; // Filter level can vary per MI if ((lfl[(r << 3) + (c >> ssX)] = GetFilterLevel(ref cm.LfInfo, ref mi)) == 0) @@ -1379,55 +1379,55 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // Build masks based on the transform size of each block - if (txSize == TxSize.Tx32x32) + if (txSize == TxSize.Tx32X32) { if (!skipThisC && ((c >> ssX) & 3) == 0) { - if (!skipBorder4x4C) + if (!skipBorder4X4C) { - mask16x16C |= 1u << (c >> ssX); + mask16X16C |= 1u << (c >> ssX); } else { - mask8x8C |= 1u << (c >> ssX); + mask8X8C |= 1u << (c >> ssX); } } if (!skipThisR && ((r >> ssY) & 3) == 0) { - if (!skipBorder4x4R) + if (!skipBorder4X4R) { - mask16x16[r] |= 1 << (c >> ssX); + mask16X16[r] |= 1 << (c >> ssX); } else { - mask8x8[r] |= 1 << (c >> ssX); + mask8X8[r] |= 1 << (c >> ssX); } } } - else if (txSize == TxSize.Tx16x16) + else if (txSize == TxSize.Tx16X16) { if (!skipThisC && ((c >> ssX) & 1) == 0) { - if (!skipBorder4x4C) + if (!skipBorder4X4C) { - mask16x16C |= 1u << (c >> ssX); + mask16X16C |= 1u << (c >> ssX); } else { - mask8x8C |= 1u << (c >> ssX); + mask8X8C |= 1u << (c >> ssX); } } if (!skipThisR && ((r >> ssY) & 1) == 0) { - if (!skipBorder4x4R) + if (!skipBorder4X4R) { - mask16x16[r] |= 1 << (c >> ssX); + mask16X16[r] |= 1 << (c >> ssX); } else { - mask8x8[r] |= 1 << (c >> ssX); + mask8X8[r] |= 1 << (c >> ssX); } } } @@ -1436,31 +1436,31 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // force 8x8 filtering on 32x32 boundaries if (!skipThisC) { - if (txSize == TxSize.Tx8x8 || ((c >> ssX) & 3) == 0) + if (txSize == TxSize.Tx8X8 || ((c >> ssX) & 3) == 0) { - mask8x8C |= 1u << (c >> ssX); + mask8X8C |= 1u << (c >> ssX); } else { - mask4x4C |= 1u << (c >> ssX); + mask4X4C |= 1u << (c >> ssX); } } if (!skipThisR) { - if (txSize == TxSize.Tx8x8 || ((r >> ssY) & 3) == 0) + if (txSize == TxSize.Tx8X8 || ((r >> ssY) & 3) == 0) { - mask8x8[r] |= 1 << (c >> ssX); + mask8X8[r] |= 1 << (c >> ssX); } else { - mask4x4[r] |= 1 << (c >> ssX); + mask4X4[r] |= 1 << (c >> ssX); } } - if (!skipThis && txSize < TxSize.Tx8x8 && !skipBorder4x4C) + if (!skipThis && txSize < TxSize.Tx8X8 && !skipBorder4X4C) { - mask4x4Int[r] |= 1 << (c >> ssX); + mask4X4Int[r] |= 1 << (c >> ssX); } } } @@ -1473,10 +1473,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 HighbdFilterSelectivelyVert( ConvertToUshortPtr(dst.Buf), dst.Stride, - mask16x16C & borderMask, - mask8x8C & borderMask, - mask4x4C & borderMask, - (uint)mask4x4Int[r], + mask16X16C & borderMask, + mask8X8C & borderMask, + mask4X4C & borderMask, + (uint)mask4X4Int[r], cm.LfInfo.Lfthr.AsSpan(), lfl.Slice(r << 3), (int)cm.BitDepth); @@ -1486,40 +1486,40 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 FilterSelectivelyVert( dst.Buf, dst.Stride, - mask16x16C & borderMask, - mask8x8C & borderMask, - mask4x4C & borderMask, - (uint)mask4x4Int[r], + mask16X16C & borderMask, + mask8X8C & borderMask, + mask4X4C & borderMask, + (uint)mask4X4Int[r], cm.LfInfo.Lfthr.AsSpan(), lfl.Slice(r << 3)); } dst.Buf = dst.Buf.Slice(8 * dst.Stride); - mi8x8 = mi8x8.Slice(rowStepStride); + mi8X8 = mi8X8.Slice(rowStepStride); } // Now do horizontal pass dst.Buf = dst0; for (int r = 0; r < Constants.MiBlockSize && miRow + r < cm.MiRows; r += rowStep) { - bool skipBorder4x4R = ssY != 0 && miRow + r == cm.MiRows - 1; - uint mask4x4IntR = skipBorder4x4R ? 0u : (uint)mask4x4Int[r]; + bool skipBorder4X4R = ssY != 0 && miRow + r == cm.MiRows - 1; + uint mask4X4IntR = skipBorder4X4R ? 0u : (uint)mask4X4Int[r]; - uint mask16x16R; - uint mask8x8R; - uint mask4x4R; + uint mask16X16R; + uint mask8X8R; + uint mask4X4R; if (miRow + r == 0) { - mask16x16R = 0; - mask8x8R = 0; - mask4x4R = 0; + mask16X16R = 0; + mask8X8R = 0; + mask4X4R = 0; } else { - mask16x16R = (uint)mask16x16[r]; - mask8x8R = (uint)mask8x8[r]; - mask4x4R = (uint)mask4x4[r]; + mask16X16R = (uint)mask16X16[r]; + mask8X8R = (uint)mask8X8[r]; + mask4X4R = (uint)mask4X4[r]; } if (cm.UseHighBitDepth) @@ -1527,10 +1527,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 HighbdFilterSelectivelyHoriz( ConvertToUshortPtr(dst.Buf), dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - mask4x4IntR, + mask16X16R, + mask8X8R, + mask4X4R, + mask4X4IntR, cm.LfInfo.Lfthr.AsSpan(), lfl.Slice(r << 3), (int)cm.BitDepth); @@ -1540,10 +1540,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 FilterSelectivelyHoriz( dst.Buf, dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - mask4x4IntR, + mask16X16R, + mask8X8R, + mask4X4R, + mask4X4IntR, cm.LfInfo.Lfthr.AsSpan(), lfl.Slice(r << 3)); } @@ -1557,10 +1557,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { ref Buf2D dst = ref plane.Dst; ArrayPtr dst0 = dst.Buf; - ulong mask16x16 = lfm.LeftY[(int)TxSize.Tx16x16]; - ulong mask8x8 = lfm.LeftY[(int)TxSize.Tx8x8]; - ulong mask4x4 = lfm.LeftY[(int)TxSize.Tx4x4]; - ulong mask4x4Int = lfm.Int4x4Y; + ulong mask16X16 = lfm.LeftY[(int)TxSize.Tx16X16]; + ulong mask8X8 = lfm.LeftY[(int)TxSize.Tx8X8]; + ulong mask4X4 = lfm.LeftY[(int)TxSize.Tx4X4]; + ulong mask4X4Int = lfm.Int4X4Y; Debug.Assert(plane.SubsamplingX == 0 && plane.SubsamplingY == 0); @@ -1574,10 +1574,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 plane.SubsamplingX, ConvertToUshortPtr(dst.Buf), dst.Stride, - (uint)mask16x16, - (uint)mask8x8, - (uint)mask4x4, - (uint)mask4x4Int, + (uint)mask16X16, + (uint)mask8X8, + (uint)mask4X4, + (uint)mask4X4Int, cm.LfInfo.Lfthr.AsSpan(), lfm.LflY.AsSpan().Slice(r << 3), (int)cm.BitDepth); @@ -1589,45 +1589,45 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 plane.SubsamplingX, dst.Buf, dst.Stride, - (uint)mask16x16, - (uint)mask8x8, - (uint)mask4x4, - (uint)mask4x4Int, + (uint)mask16X16, + (uint)mask8X8, + (uint)mask4X4, + (uint)mask4X4Int, cm.LfInfo.Lfthr.AsSpan(), lfm.LflY.AsSpan().Slice(r << 3)); } dst.Buf = dst.Buf.Slice(16 * dst.Stride); - mask16x16 >>= 16; - mask8x8 >>= 16; - mask4x4 >>= 16; - mask4x4Int >>= 16; + mask16X16 >>= 16; + mask8X8 >>= 16; + mask4X4 >>= 16; + mask4X4Int >>= 16; } // Horizontal pass dst.Buf = dst0; - mask16x16 = lfm.AboveY[(int)TxSize.Tx16x16]; - mask8x8 = lfm.AboveY[(int)TxSize.Tx8x8]; - mask4x4 = lfm.AboveY[(int)TxSize.Tx4x4]; - mask4x4Int = lfm.Int4x4Y; + mask16X16 = lfm.AboveY[(int)TxSize.Tx16X16]; + mask8X8 = lfm.AboveY[(int)TxSize.Tx8X8]; + mask4X4 = lfm.AboveY[(int)TxSize.Tx4X4]; + mask4X4Int = lfm.Int4X4Y; for (int r = 0; r < Constants.MiBlockSize && miRow + r < cm.MiRows; r++) { - uint mask16x16R; - uint mask8x8R; - uint mask4x4R; + uint mask16X16R; + uint mask8X8R; + uint mask4X4R; if (miRow + r == 0) { - mask16x16R = 0; - mask8x8R = 0; - mask4x4R = 0; + mask16X16R = 0; + mask8X8R = 0; + mask4X4R = 0; } else { - mask16x16R = (uint)mask16x16 & 0xff; - mask8x8R = (uint)mask8x8 & 0xff; - mask4x4R = (uint)mask4x4 & 0xff; + mask16X16R = (uint)mask16X16 & 0xff; + mask8X8R = (uint)mask8X8 & 0xff; + mask4X4R = (uint)mask4X4 & 0xff; } if (cm.UseHighBitDepth) @@ -1635,10 +1635,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 HighbdFilterSelectivelyHoriz( ConvertToUshortPtr(dst.Buf), dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - (uint)mask4x4Int & 0xff, + mask16X16R, + mask8X8R, + mask4X4R, + (uint)mask4X4Int & 0xff, cm.LfInfo.Lfthr.AsSpan(), lfm.LflY.AsSpan().Slice(r << 3), (int)cm.BitDepth); @@ -1648,19 +1648,19 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 FilterSelectivelyHoriz( dst.Buf, dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - (uint)mask4x4Int & 0xff, + mask16X16R, + mask8X8R, + mask4X4R, + (uint)mask4X4Int & 0xff, cm.LfInfo.Lfthr.AsSpan(), lfm.LflY.AsSpan().Slice(r << 3)); } dst.Buf = dst.Buf.Slice(8 * dst.Stride); - mask16x16 >>= 8; - mask8x8 >>= 8; - mask4x4 >>= 8; - mask4x4Int >>= 8; + mask16X16 >>= 8; + mask8X8 >>= 8; + mask4X4 >>= 8; + mask4X4Int >>= 8; } } @@ -1672,10 +1672,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 Span lflUv = stackalloc byte[16]; - ushort mask16x16 = lfm.LeftUv[(int)TxSize.Tx16x16]; - ushort mask8x8 = lfm.LeftUv[(int)TxSize.Tx8x8]; - ushort mask4x4 = lfm.LeftUv[(int)TxSize.Tx4x4]; - ushort mask4x4Int = lfm.Int4x4Uv; + ushort mask16X16 = lfm.LeftUv[(int)TxSize.Tx16X16]; + ushort mask8X8 = lfm.LeftUv[(int)TxSize.Tx8X8]; + ushort mask4X4 = lfm.LeftUv[(int)TxSize.Tx4X4]; + ushort mask4X4Int = lfm.Int4X4Uv; Debug.Assert(plane.SubsamplingX == 1 && plane.SubsamplingY == 1); @@ -1695,10 +1695,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 plane.SubsamplingX, ConvertToUshortPtr(dst.Buf), dst.Stride, - mask16x16, - mask8x8, - mask4x4, - mask4x4Int, + mask16X16, + mask8X8, + mask4X4, + mask4X4Int, cm.LfInfo.Lfthr.AsSpan(), lflUv.Slice(r << 1), (int)cm.BitDepth); @@ -1710,47 +1710,47 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 plane.SubsamplingX, dst.Buf, dst.Stride, - mask16x16, - mask8x8, - mask4x4, - mask4x4Int, + mask16X16, + mask8X8, + mask4X4, + mask4X4Int, cm.LfInfo.Lfthr.AsSpan(), lflUv.Slice(r << 1)); } dst.Buf = dst.Buf.Slice(16 * dst.Stride); - mask16x16 >>= 8; - mask8x8 >>= 8; - mask4x4 >>= 8; - mask4x4Int >>= 8; + mask16X16 >>= 8; + mask8X8 >>= 8; + mask4X4 >>= 8; + mask4X4Int >>= 8; } // Horizontal pass dst.Buf = dst0; - mask16x16 = lfm.AboveUv[(int)TxSize.Tx16x16]; - mask8x8 = lfm.AboveUv[(int)TxSize.Tx8x8]; - mask4x4 = lfm.AboveUv[(int)TxSize.Tx4x4]; - mask4x4Int = lfm.Int4x4Uv; + mask16X16 = lfm.AboveUv[(int)TxSize.Tx16X16]; + mask8X8 = lfm.AboveUv[(int)TxSize.Tx8X8]; + mask4X4 = lfm.AboveUv[(int)TxSize.Tx4X4]; + mask4X4Int = lfm.Int4X4Uv; for (int r = 0; r < Constants.MiBlockSize && miRow + r < cm.MiRows; r += 2) { - bool skipBorder4x4R = miRow + r == cm.MiRows - 1; - uint mask4x4IntR = skipBorder4x4R ? 0u : (uint)mask4x4Int & 0xf; - uint mask16x16R; - uint mask8x8R; - uint mask4x4R; + bool skipBorder4X4R = miRow + r == cm.MiRows - 1; + uint mask4X4IntR = skipBorder4X4R ? 0u : (uint)mask4X4Int & 0xf; + uint mask16X16R; + uint mask8X8R; + uint mask4X4R; if (miRow + r == 0) { - mask16x16R = 0; - mask8x8R = 0; - mask4x4R = 0; + mask16X16R = 0; + mask8X8R = 0; + mask4X4R = 0; } else { - mask16x16R = (uint)mask16x16 & 0xf; - mask8x8R = (uint)mask8x8 & 0xf; - mask4x4R = (uint)mask4x4 & 0xf; + mask16X16R = (uint)mask16X16 & 0xf; + mask8X8R = (uint)mask8X8 & 0xf; + mask4X4R = (uint)mask4X4 & 0xf; } if (cm.UseHighBitDepth) @@ -1758,10 +1758,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 HighbdFilterSelectivelyHoriz( ConvertToUshortPtr(dst.Buf), dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - mask4x4IntR, + mask16X16R, + mask8X8R, + mask4X4R, + mask4X4IntR, cm.LfInfo.Lfthr.AsSpan(), lflUv.Slice(r << 1), (int)cm.BitDepth); @@ -1771,19 +1771,19 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 FilterSelectivelyHoriz( dst.Buf, dst.Stride, - mask16x16R, - mask8x8R, - mask4x4R, - mask4x4IntR, + mask16X16R, + mask8X8R, + mask4X4R, + mask4X4IntR, cm.LfInfo.Lfthr.AsSpan(), lflUv.Slice(r << 1)); } dst.Buf = dst.Buf.Slice(8 * dst.Stride); - mask16x16 >>= 4; - mask8x8 >>= 4; - mask4x4 >>= 4; - mask4x4Int >>= 4; + mask16X16 >>= 4; + mask8X8 >>= 4; + mask4X4 >>= 4; + mask4X4Int >>= 4; } } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Luts.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Luts.cs index f21461304..d54dbeec5 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Luts.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Luts.cs @@ -6,179 +6,182 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { internal static class Luts { - public static ReadOnlySpan SizeGroupLookup => new byte[] { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3 }; + public static ReadOnlySpan SizeGroupLookup => [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3]; public static readonly BlockSize[][] SubsizeLookup = new BlockSize[][] { - new BlockSize[] - { // PARTITION_NONE - BlockSize.Block4x4, BlockSize.Block4x8, BlockSize.Block8x4, BlockSize.Block8x8, BlockSize.Block8x16, BlockSize.Block16x8, - BlockSize.Block16x16, BlockSize.Block16x32, BlockSize.Block32x16, BlockSize.Block32x32, BlockSize.Block32x64, - BlockSize.Block64x32, BlockSize.Block64x64 - }, - new BlockSize[] - { // PARTITION_HORZ - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block8x4, BlockSize.BlockInvalid, - BlockSize.BlockInvalid, BlockSize.Block16x8, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32x16, - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block64x32 - }, - new BlockSize[] - { // PARTITION_VERT - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block4x8, BlockSize.BlockInvalid, - BlockSize.BlockInvalid, BlockSize.Block8x16, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block16x32, - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32x64 - }, - new BlockSize[] - { // PARTITION_SPLIT - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block4x4, BlockSize.BlockInvalid, - BlockSize.BlockInvalid, BlockSize.Block8x8, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block16x16, - BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32x32 - } + [ // PARTITION_NONE + BlockSize.Block4X4, BlockSize.Block4X8, BlockSize.Block8X4, BlockSize.Block8X8, BlockSize.Block8X16, BlockSize.Block16X8, + BlockSize.Block16X16, BlockSize.Block16X32, BlockSize.Block32X16, BlockSize.Block32X32, BlockSize.Block32X64, + BlockSize.Block64X32, BlockSize.Block64X64 + ], + [ // PARTITION_HORZ + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block8X4, BlockSize.BlockInvalid, + BlockSize.BlockInvalid, BlockSize.Block16X8, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32X16, + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block64X32 + ], + [ // PARTITION_VERT + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block4X8, BlockSize.BlockInvalid, + BlockSize.BlockInvalid, BlockSize.Block8X16, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block16X32, + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32X64 + ], + [ // PARTITION_SPLIT + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block4X4, BlockSize.BlockInvalid, + BlockSize.BlockInvalid, BlockSize.Block8X8, BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block16X16, + BlockSize.BlockInvalid, BlockSize.BlockInvalid, BlockSize.Block32X32 + ] }; - public static readonly TxSize[] MaxTxSizeLookup = new TxSize[] - { - TxSize.Tx4x4, TxSize.Tx4x4, TxSize.Tx4x4, TxSize.Tx8x8, TxSize.Tx8x8, TxSize.Tx8x8, TxSize.Tx16x16, - TxSize.Tx16x16, TxSize.Tx16x16, TxSize.Tx32x32, TxSize.Tx32x32, TxSize.Tx32x32, TxSize.Tx32x32 - }; + public static readonly TxSize[] MaxTxSizeLookup = + [ + TxSize.Tx4X4, TxSize.Tx4X4, TxSize.Tx4X4, TxSize.Tx8X8, TxSize.Tx8X8, TxSize.Tx8X8, TxSize.Tx16X16, + TxSize.Tx16X16, TxSize.Tx16X16, TxSize.Tx32X32, TxSize.Tx32X32, TxSize.Tx32X32, TxSize.Tx32X32 + ]; - public static readonly TxSize[] TxModeToBiggestTxSize = new TxSize[] - { - TxSize.Tx4x4, // ONLY_4X4 - TxSize.Tx8x8, // ALLOW_8X8 - TxSize.Tx16x16, // ALLOW_16X16 - TxSize.Tx32x32, // ALLOW_32X32 - TxSize.Tx32x32, // TX_MODE_SELECT - }; + public static readonly TxSize[] TxModeToBiggestTxSize = + [ + TxSize.Tx4X4, // ONLY_4X4 + TxSize.Tx8X8, // ALLOW_8X8 + TxSize.Tx16X16, // ALLOW_16X16 + TxSize.Tx32X32, // ALLOW_32X32 + TxSize.Tx32X32 // TX_MODE_SELECT + ]; - public static readonly BlockSize[][][] SsSizeLookup = new BlockSize[][][] - { + public static readonly BlockSize[][][] SsSizeLookup = + [ // ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1 // ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1 - new BlockSize[][] { new BlockSize[] { BlockSize.Block4x4, BlockSize.BlockInvalid }, new BlockSize[] { BlockSize.BlockInvalid, BlockSize.BlockInvalid } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block4x8, BlockSize.Block4x4 }, new BlockSize[] { BlockSize.BlockInvalid, BlockSize.BlockInvalid } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block8x4, BlockSize.BlockInvalid }, new BlockSize[] { BlockSize.Block4x4, BlockSize.BlockInvalid } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block8x8, BlockSize.Block8x4 }, new BlockSize[] { BlockSize.Block4x8, BlockSize.Block4x4 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block8x16, BlockSize.Block8x8 }, new BlockSize[] { BlockSize.BlockInvalid, BlockSize.Block4x8 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block16x8, BlockSize.BlockInvalid }, new BlockSize[] { BlockSize.Block8x8, BlockSize.Block8x4 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block16x16, BlockSize.Block16x8 }, new BlockSize[] { BlockSize.Block8x16, BlockSize.Block8x8 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block16x32, BlockSize.Block16x16 }, new BlockSize[] { BlockSize.BlockInvalid, BlockSize.Block8x16 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block32x16, BlockSize.BlockInvalid }, new BlockSize[] { BlockSize.Block16x16, BlockSize.Block16x8 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block32x32, BlockSize.Block32x16 }, new BlockSize[] { BlockSize.Block16x32, BlockSize.Block16x16 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block32x64, BlockSize.Block32x32 }, new BlockSize[] { BlockSize.BlockInvalid, BlockSize.Block16x32 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block64x32, BlockSize.BlockInvalid }, new BlockSize[] { BlockSize.Block32x32, BlockSize.Block32x16 } }, - new BlockSize[][] { new BlockSize[] { BlockSize.Block64x64, BlockSize.Block64x32 }, new BlockSize[] { BlockSize.Block32x64, BlockSize.Block32x32 } }, - }; + new BlockSize[][] { [BlockSize.Block4X4, BlockSize.BlockInvalid], [BlockSize.BlockInvalid, BlockSize.BlockInvalid + ] + }, + new BlockSize[][] { [BlockSize.Block4X8, BlockSize.Block4X4], [BlockSize.BlockInvalid, BlockSize.BlockInvalid + ] + }, + new BlockSize[][] { [BlockSize.Block8X4, BlockSize.BlockInvalid], [BlockSize.Block4X4, BlockSize.BlockInvalid + ] + }, + new BlockSize[][] { [BlockSize.Block8X8, BlockSize.Block8X4], [BlockSize.Block4X8, BlockSize.Block4X4] }, + new BlockSize[][] { [BlockSize.Block8X16, BlockSize.Block8X8], [BlockSize.BlockInvalid, BlockSize.Block4X8] + }, + new BlockSize[][] { [BlockSize.Block16X8, BlockSize.BlockInvalid], [BlockSize.Block8X8, BlockSize.Block8X4] + }, + new BlockSize[][] { [BlockSize.Block16X16, BlockSize.Block16X8], [BlockSize.Block8X16, BlockSize.Block8X8] }, + new BlockSize[][] { [BlockSize.Block16X32, BlockSize.Block16X16], [BlockSize.BlockInvalid, BlockSize.Block8X16 + ] + }, + new BlockSize[][] { [BlockSize.Block32X16, BlockSize.BlockInvalid], [BlockSize.Block16X16, BlockSize.Block16X8 + ] + }, + new BlockSize[][] { [BlockSize.Block32X32, BlockSize.Block32X16], [BlockSize.Block16X32, BlockSize.Block16X16 + ] + }, + new BlockSize[][] { [BlockSize.Block32X64, BlockSize.Block32X32], [BlockSize.BlockInvalid, BlockSize.Block16X32 + ] + }, + new BlockSize[][] { [BlockSize.Block64X32, BlockSize.BlockInvalid], [BlockSize.Block32X32, BlockSize.Block32X16 + ] + }, + new BlockSize[][] { [BlockSize.Block64X64, BlockSize.Block64X32], [BlockSize.Block32X64, BlockSize.Block32X32 + ] + } + ]; - public static readonly TxSize[][][][] UvTxsizeLookup = new TxSize[][][][] - { - // ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1 + public static readonly TxSize[][][][] UvTxsizeLookup = + [ + // ss_x == 0 ss_x == 0 ss_x == 1 ss_x == 1 // ss_y == 0 ss_y == 1 ss_y == 0 ss_y == 1 - new TxSize[][][] - { - // BLOCK_4X4 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - }, - new TxSize[][][] - { - // BLOCK_4x8 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - }, - new TxSize[][][] - { - // BLOCK_8x4 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - }, - new TxSize[][][] - { - // BLOCK_8X8 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - }, - new TxSize[][][] - { - // BLOCK_8x16 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - }, - new TxSize[][][] - { - // BLOCK_16x8 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - }, - new TxSize[][][] - { - // BLOCK_16X16 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - }, - new TxSize[][][] - { - // BLOCK_16x32 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - }, - new TxSize[][][] - { - // BLOCK_32x16 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx8x8 } }, - }, - new TxSize[][][] - { - // BLOCK_32X32 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx32x32, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - }, - new TxSize[][][] - { - // BLOCK_32x64 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx32x32, TxSize.Tx32x32 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - }, - new TxSize[][][] - { - // BLOCK_64x32 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx32x32, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx32x32, TxSize.Tx16x16 } }, - }, - new TxSize[][][] - { - // BLOCK_64x64 - new TxSize[][] { new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 }, new TxSize[] { TxSize.Tx4x4, TxSize.Tx4x4 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 }, new TxSize[] { TxSize.Tx8x8, TxSize.Tx8x8 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 }, new TxSize[] { TxSize.Tx16x16, TxSize.Tx16x16 } }, - new TxSize[][] { new TxSize[] { TxSize.Tx32x32, TxSize.Tx32x32 }, new TxSize[] { TxSize.Tx32x32, TxSize.Tx32x32 } }, - }, - }; + [ + // BLOCK_4X4 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] } + ], + [ + // BLOCK_4x8 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] } + ], + [ + // BLOCK_8x4 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] } + ], + [ + // BLOCK_8X8 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] } + ], + [ + // BLOCK_8x16 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx4X4, TxSize.Tx4X4] } + ], + [ + // BLOCK_16x8 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx8X8, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx4X4], [TxSize.Tx8X8, TxSize.Tx8X8] } + ], + [ + // BLOCK_16X16 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] } + ], + [ + // BLOCK_16x32 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx8X8, TxSize.Tx8X8] } + ], + [ + // BLOCK_32x16 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx8X8], [TxSize.Tx16X16, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx8X8], [TxSize.Tx16X16, TxSize.Tx8X8] } + ], + [ + // BLOCK_32X32 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx16X16, TxSize.Tx16X16] }, + new TxSize[][] { [TxSize.Tx32X32, TxSize.Tx16X16], [TxSize.Tx16X16, TxSize.Tx16X16] } + ], + [ + // BLOCK_32x64 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx16X16, TxSize.Tx16X16] }, + new TxSize[][] { [TxSize.Tx32X32, TxSize.Tx32X32], [TxSize.Tx16X16, TxSize.Tx16X16] } + ], + [ + // BLOCK_64x32 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx16X16, TxSize.Tx16X16] }, + new TxSize[][] { [TxSize.Tx32X32, TxSize.Tx16X16], [TxSize.Tx32X32, TxSize.Tx16X16] } + ], + [ + // BLOCK_64x64 + new TxSize[][] { [TxSize.Tx4X4, TxSize.Tx4X4], [TxSize.Tx4X4, TxSize.Tx4X4] }, + new TxSize[][] { [TxSize.Tx8X8, TxSize.Tx8X8], [TxSize.Tx8X8, TxSize.Tx8X8] }, + new TxSize[][] { [TxSize.Tx16X16, TxSize.Tx16X16], [TxSize.Tx16X16, TxSize.Tx16X16] }, + new TxSize[][] { [TxSize.Tx32X32, TxSize.Tx32X32], [TxSize.Tx32X32, TxSize.Tx32X32] } + ] + ]; public struct PartitionContextPair { @@ -195,27 +198,27 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Generates 4 bit field in which each bit set to 1 represents // a blocksize partition 1111 means we split 64x64, 32x32, 16x16 // and 8x8. 1000 means we just split the 64x64 to 32x32 - public static readonly PartitionContextPair[] PartitionContextLookup = new PartitionContextPair[] - { - new PartitionContextPair(15, 15), // 4X4 - {0b1111, 0b1111} - new PartitionContextPair(15, 14), // 4x8 - {0b1111, 0b1110} - new PartitionContextPair(14, 15), // 8x4 - {0b1110, 0b1111} - new PartitionContextPair(14, 14), // 8X8 - {0b1110, 0b1110} - new PartitionContextPair(14, 12), // 8x16 - {0b1110, 0b1100} - new PartitionContextPair(12, 14), // 16x8 - {0b1100, 0b1110} - new PartitionContextPair(12, 12), // 16X16 - {0b1100, 0b1100} - new PartitionContextPair(12, 8), // 16x32 - {0b1100, 0b1000} - new PartitionContextPair(8, 12), // 32x16 - {0b1000, 0b1100} - new PartitionContextPair(8, 8), // 32X32 - {0b1000, 0b1000} - new PartitionContextPair(8, 0), // 32x64 - {0b1000, 0b0000} - new PartitionContextPair(0, 8), // 64x32 - {0b0000, 0b1000} - new PartitionContextPair(0, 0), // 64x64 - {0b0000, 0b0000} - }; + public static readonly PartitionContextPair[] PartitionContextLookup = + [ + new(15, 15), // 4X4 - {0b1111, 0b1111} + new(15, 14), // 4x8 - {0b1111, 0b1110} + new(14, 15), // 8x4 - {0b1110, 0b1111} + new(14, 14), // 8X8 - {0b1110, 0b1110} + new(14, 12), // 8x16 - {0b1110, 0b1100} + new(12, 14), // 16x8 - {0b1100, 0b1110} + new(12, 12), // 16X16 - {0b1100, 0b1100} + new(12, 8), // 16x32 - {0b1100, 0b1000} + new(8, 12), // 32x16 - {0b1000, 0b1100} + new(8, 8), // 32X32 - {0b1000, 0b1000} + new(8, 0), // 32x64 - {0b1000, 0b0000} + new(0, 8), // 64x32 - {0b0000, 0b1000} + new(0, 0) // 64x64 - {0b0000, 0b0000} + ]; // Filter - private static readonly Array8[] BilinearFilters = new Array8[] - { + private static readonly Array8[] _bilinearFilters = + [ NewArray8Short(0, 0, 0, 128, 0, 0, 0, 0), NewArray8Short(0, 0, 0, 120, 8, 0, 0, 0), NewArray8Short(0, 0, 0, 112, 16, 0, 0, 0), NewArray8Short(0, 0, 0, 104, 24, 0, 0, 0), NewArray8Short(0, 0, 0, 96, 32, 0, 0, 0), NewArray8Short(0, 0, 0, 88, 40, 0, 0, 0), @@ -224,11 +227,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 NewArray8Short(0, 0, 0, 48, 80, 0, 0, 0), NewArray8Short(0, 0, 0, 40, 88, 0, 0, 0), NewArray8Short(0, 0, 0, 32, 96, 0, 0, 0), NewArray8Short(0, 0, 0, 24, 104, 0, 0, 0), NewArray8Short(0, 0, 0, 16, 112, 0, 0, 0), NewArray8Short(0, 0, 0, 8, 120, 0, 0, 0) - }; + ]; // Lagrangian interpolation filter - private static readonly Array8[] SubPelFilters8 = new Array8[] - { + private static readonly Array8[] _subPelFilters8 = + [ NewArray8Short(0, 0, 0, 128, 0, 0, 0, 0), NewArray8Short(0, 1, -5, 126, 8, -3, 1, 0), NewArray8Short(-1, 3, -10, 122, 18, -6, 2, 0), NewArray8Short(-1, 4, -13, 118, 27, -9, 3, -1), NewArray8Short(-1, 4, -16, 112, 37, -11, 4, -1), NewArray8Short(-1, 5, -18, 105, 48, -14, 4, -1), @@ -237,11 +240,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 NewArray8Short(-1, 5, -16, 58, 97, -19, 5, -1), NewArray8Short(-1, 4, -14, 48, 105, -18, 5, -1), NewArray8Short(-1, 4, -11, 37, 112, -16, 4, -1), NewArray8Short(-1, 3, -9, 27, 118, -13, 4, -1), NewArray8Short(0, 2, -6, 18, 122, -10, 3, -1), NewArray8Short(0, 1, -3, 8, 126, -5, 1, 0) - }; + ]; // DCT based filter - private static readonly Array8[] SubPelFilters8S = new Array8[] - { + private static readonly Array8[] _subPelFilters8S = + [ NewArray8Short(0, 0, 0, 128, 0, 0, 0, 0), NewArray8Short(-1, 3, -7, 127, 8, -3, 1, 0), NewArray8Short(-2, 5, -13, 125, 17, -6, 3, -1), NewArray8Short(-3, 7, -17, 121, 27, -10, 5, -2), NewArray8Short(-4, 9, -20, 115, 37, -13, 6, -2), NewArray8Short(-4, 10, -23, 108, 48, -16, 8, -3), @@ -250,11 +253,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 NewArray8Short(-3, 9, -19, 59, 100, -24, 10, -4), NewArray8Short(-3, 8, -16, 48, 108, -23, 10, -4), NewArray8Short(-2, 6, -13, 37, 115, -20, 9, -4), NewArray8Short(-2, 5, -10, 27, 121, -17, 7, -3), NewArray8Short(-1, 3, -6, 17, 125, -13, 5, -2), NewArray8Short(0, 1, -3, 8, 127, -7, 3, -1) - }; + ]; // freqmultiplier = 0.5 - private static readonly Array8[] SubPelFilters8Lp = new Array8[] - { + private static readonly Array8[] _subPelFilters8Lp = + [ NewArray8Short(0, 0, 0, 128, 0, 0, 0, 0), NewArray8Short(-3, -1, 32, 64, 38, 1, -3, 0), NewArray8Short(-2, -2, 29, 63, 41, 2, -3, 0), NewArray8Short(-2, -2, 26, 63, 43, 4, -4, 0), NewArray8Short(-2, -3, 24, 62, 46, 5, -4, 0), NewArray8Short(-2, -3, 21, 60, 49, 7, -4, 0), @@ -263,72 +266,73 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 NewArray8Short(0, -4, 9, 51, 59, 18, -4, -1), NewArray8Short(0, -4, 7, 49, 60, 21, -3, -2), NewArray8Short(0, -4, 5, 46, 62, 24, -3, -2), NewArray8Short(0, -4, 4, 43, 63, 26, -2, -2), NewArray8Short(0, -3, 2, 41, 63, 29, -2, -2), NewArray8Short(0, -3, 1, 38, 64, 32, -1, -3) - }; + ]; private static Array8 NewArray8Short(short e0, short e1, short e2, short e3, short e4, short e5, short e6, short e7) { - Array8 output = new Array8(); - - output[0] = e0; - output[1] = e1; - output[2] = e2; - output[3] = e3; - output[4] = e4; - output[5] = e5; - output[6] = e6; - output[7] = e7; + Array8 output = new() + { + [0] = e0, + [1] = e1, + [2] = e2, + [3] = e3, + [4] = e4, + [5] = e5, + [6] = e6, + [7] = e7 + }; return output; } - public static readonly Array8[][] FilterKernels = new Array8[][] - { - SubPelFilters8, SubPelFilters8Lp, SubPelFilters8S, BilinearFilters - }; + public static readonly Array8[][] FilterKernels = + [ + _subPelFilters8, _subPelFilters8Lp, _subPelFilters8S, _bilinearFilters + ]; // Scan - private static readonly short[] DefaultScan4X4 = new short[] - { - 0, 4, 1, 5, 8, 2, 12, 9, 3, 6, 13, 10, 7, 14, 11, 15, - }; + private static readonly short[] _defaultScan4X4 = + [ + 0, 4, 1, 5, 8, 2, 12, 9, 3, 6, 13, 10, 7, 14, 11, 15 + ]; - private static readonly short[] ColScan4X4 = new short[] - { - 0, 4, 8, 1, 12, 5, 9, 2, 13, 6, 10, 3, 7, 14, 11, 15, - }; + private static readonly short[] _colScan4X4 = + [ + 0, 4, 8, 1, 12, 5, 9, 2, 13, 6, 10, 3, 7, 14, 11, 15 + ]; - private static readonly short[] RowScan4X4 = new short[] - { - 0, 1, 4, 2, 5, 3, 6, 8, 9, 7, 12, 10, 13, 11, 14, 15, - }; + private static readonly short[] _rowScan4X4 = + [ + 0, 1, 4, 2, 5, 3, 6, 8, 9, 7, 12, 10, 13, 11, 14, 15 + ]; - private static readonly short[] DefaultScan8X8 = new short[] - { + private static readonly short[] _defaultScan8X8 = + [ 0, 8, 1, 16, 9, 2, 17, 24, 10, 3, 18, 25, 32, 11, 4, 26, 33, 19, 40, 12, 34, 27, 5, 41, 20, 48, 13, 35, 42, 28, 21, 6, 49, 56, 36, 43, 29, 7, 14, 50, 57, 44, 22, 37, 15, 51, 58, 30, - 45, 23, 52, 59, 38, 31, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63, - }; + 45, 23, 52, 59, 38, 31, 60, 53, 46, 39, 61, 54, 47, 62, 55, 63 + ]; - private static readonly short[] ColScan8X8 = new short[] - { + private static readonly short[] _colScan8X8 = + [ 0, 8, 16, 1, 24, 9, 32, 17, 2, 40, 25, 10, 33, 18, 48, 3, 26, 41, 11, 56, 19, 34, 4, 49, 27, 42, 12, 35, 20, 57, 50, 28, 5, 43, 13, 36, 58, 51, 21, 44, 6, 29, 59, 37, 14, 52, 22, 7, - 45, 60, 30, 15, 38, 53, 23, 46, 31, 61, 39, 54, 47, 62, 55, 63, - }; + 45, 60, 30, 15, 38, 53, 23, 46, 31, 61, 39, 54, 47, 62, 55, 63 + ]; - private static readonly short[] RowScan8X8 = new short[] - { + private static readonly short[] _rowScan8X8 = + [ 0, 1, 2, 8, 9, 3, 16, 10, 4, 17, 11, 24, 5, 18, 25, 12, 19, 26, 32, 6, 13, 20, 33, 27, 7, 34, 40, 21, 28, 41, 14, 35, 48, 42, 29, 36, 49, 22, 43, 15, 56, 37, 50, 44, 30, 57, 23, 51, - 58, 45, 38, 52, 31, 59, 53, 46, 60, 39, 61, 47, 54, 55, 62, 63, - }; + 58, 45, 38, 52, 31, 59, 53, 46, 60, 39, 61, 47, 54, 55, 62, 63 + ]; - private static readonly short[] DefaultScan16X16 = new short[] - { + private static readonly short[] _defaultScan16X16 = + [ 0, 16, 1, 32, 17, 2, 48, 33, 18, 3, 64, 34, 49, 19, 65, 80, 50, 4, 35, 66, 20, 81, 96, 51, 5, 36, 82, 97, 67, 112, 21, 52, 98, 37, 83, 113, 6, 68, 128, 53, 22, 99, 114, 84, 7, @@ -346,11 +350,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 172, 110, 247, 157, 79, 218, 203, 126, 233, 188, 248, 95, 173, 142, 219, 111, 249, 234, 158, 127, 189, 204, 250, 235, 143, 174, 220, 205, 159, 251, 190, 221, 175, 236, 237, 191, 206, 252, 222, 253, 207, 238, 223, 254, 239, - 255, - }; + 255 + ]; - private static readonly short[] ColScan16X16 = new short[] - { + private static readonly short[] _colScan16X16 = + [ 0, 16, 32, 48, 1, 64, 17, 80, 33, 96, 49, 2, 65, 112, 18, 81, 34, 128, 50, 97, 3, 66, 144, 19, 113, 35, 82, 160, 98, 51, 129, 4, 67, 176, 20, 114, 145, 83, 36, 99, 130, 52, 192, 5, 161, @@ -368,11 +372,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 78, 203, 31, 141, 234, 94, 47, 188, 63, 157, 110, 250, 219, 79, 126, 204, 173, 142, 95, 189, 111, 235, 158, 220, 251, 127, 174, 143, 205, 236, 159, 190, 221, 252, 175, 206, 237, 191, 253, 222, 238, 207, 254, 223, 239, - 255, - }; + 255 + ]; - private static readonly short[] RowScan16X16 = new short[] - { + private static readonly short[] _rowScan16X16 = + [ 0, 1, 2, 16, 3, 17, 4, 18, 32, 5, 33, 19, 6, 34, 48, 20, 49, 7, 35, 21, 50, 64, 8, 36, 65, 22, 51, 37, 80, 9, 66, 52, 23, 38, 81, 67, 10, 53, 24, 82, 68, 96, 39, 11, 54, @@ -390,11 +394,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 217, 231, 95, 246, 232, 126, 203, 247, 233, 173, 218, 142, 111, 158, 188, 248, 127, 234, 219, 249, 189, 204, 143, 174, 159, 250, 235, 205, 220, 175, 190, 251, 221, 191, 206, 236, 207, 237, 252, 222, 253, 223, 238, 239, 254, - 255, - }; + 255 + ]; - private static readonly short[] DefaultScan32X32 = new short[] - { + private static readonly short[] _defaultScan32X32 = + [ 0, 32, 1, 64, 33, 2, 96, 65, 34, 128, 3, 97, 66, 160, 129, 35, 98, 4, 67, 130, 161, 192, 36, 99, 224, 5, 162, 193, 68, 131, 37, 100, 225, 194, 256, 163, 69, 132, 6, @@ -473,64 +477,64 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 767, 920, 796, 952, 921, 828, 797, 984, 953, 922, 860, 829, 798, 1016, 985, 954, 923, 892, 861, 830, 799, 1017, 986, 955, 893, 862, 831, 1018, 987, 894, 863, 1019, 895, 924, 956, 925, 988, 957, 926, - 1020, 989, 958, 927, 1021, 990, 959, 1022, 991, 1023, - }; + 1020, 989, 958, 927, 1021, 990, 959, 1022, 991, 1023 + ]; // Neighborhood 2-tuples for various scans and blocksizes, // in {top, left} order for each position in corresponding scan order. - private static readonly short[] DefaultScan4X4Neighbors = new short[] - { + private static readonly short[] _defaultScan4X4Neighbors = + [ 0, 0, 0, 0, 0, 0, 1, 4, 4, 4, 1, 1, 8, 8, 5, 8, 2, - 2, 2, 5, 9, 12, 6, 9, 3, 6, 10, 13, 7, 10, 11, 14, 0, 0, - }; + 2, 2, 5, 9, 12, 6, 9, 3, 6, 10, 13, 7, 10, 11, 14, 0, 0 + ]; - private static readonly short[] ColScan4X4Neighbors = new short[] - { + private static readonly short[] _colScan4X4Neighbors = + [ 0, 0, 0, 0, 4, 4, 0, 0, 8, 8, 1, 1, 5, 5, 1, 1, 9, - 9, 2, 2, 6, 6, 2, 2, 3, 3, 10, 10, 7, 7, 11, 11, 0, 0, - }; + 9, 2, 2, 6, 6, 2, 2, 3, 3, 10, 10, 7, 7, 11, 11, 0, 0 + ]; - private static readonly short[] RowScan4X4Neighbors = new short[] - { + private static readonly short[] _rowScan4X4Neighbors = + [ 0, 0, 0, 0, 0, 0, 1, 1, 4, 4, 2, 2, 5, 5, 4, 4, 8, - 8, 6, 6, 8, 8, 9, 9, 12, 12, 10, 10, 13, 13, 14, 14, 0, 0, - }; + 8, 6, 6, 8, 8, 9, 9, 12, 12, 10, 10, 13, 13, 14, 14, 0, 0 + ]; - private static readonly short[] ColScan8X8Neighbors = new short[] - { + private static readonly short[] _colScan8X8Neighbors = + [ 0, 0, 0, 0, 8, 8, 0, 0, 16, 16, 1, 1, 24, 24, 9, 9, 1, 1, 32, 32, 17, 17, 2, 2, 25, 25, 10, 10, 40, 40, 2, 2, 18, 18, 33, 33, 3, 3, 48, 48, 11, 11, 26, 26, 3, 3, 41, 41, 19, 19, 34, 34, 4, 4, 27, 27, 12, 12, 49, 49, 42, 42, 20, 20, 4, 4, 35, 35, 5, 5, 28, 28, 50, 50, 43, 43, 13, 13, 36, 36, 5, 5, 21, 21, 51, 51, 29, 29, 6, 6, 44, 44, 14, 14, 6, 6, 37, 37, 52, 52, 22, 22, 7, 7, 30, 30, 45, 45, 15, 15, 38, 38, 23, 23, - 53, 53, 31, 31, 46, 46, 39, 39, 54, 54, 47, 47, 55, 55, 0, 0, - }; + 53, 53, 31, 31, 46, 46, 39, 39, 54, 54, 47, 47, 55, 55, 0, 0 + ]; - private static readonly short[] RowScan8X8Neighbors = new short[] - { + private static readonly short[] _rowScan8X8Neighbors = + [ 0, 0, 0, 0, 1, 1, 0, 0, 8, 8, 2, 2, 8, 8, 9, 9, 3, 3, 16, 16, 10, 10, 16, 16, 4, 4, 17, 17, 24, 24, 11, 11, 18, 18, 25, 25, 24, 24, 5, 5, 12, 12, 19, 19, 32, 32, 26, 26, 6, 6, 33, 33, 32, 32, 20, 20, 27, 27, 40, 40, 13, 13, 34, 34, 40, 40, 41, 41, 28, 28, 35, 35, 48, 48, 21, 21, 42, 42, 14, 14, 48, 48, 36, 36, 49, 49, 43, 43, 29, 29, 56, 56, 22, 22, 50, 50, 57, 57, 44, 44, 37, 37, 51, 51, 30, 30, 58, 58, 52, 52, 45, 45, 59, 59, - 38, 38, 60, 60, 46, 46, 53, 53, 54, 54, 61, 61, 62, 62, 0, 0, - }; + 38, 38, 60, 60, 46, 46, 53, 53, 54, 54, 61, 61, 62, 62, 0, 0 + ]; - private static readonly short[] DefaultScan8X8Neighbors = new short[] - { + private static readonly short[] _defaultScan8X8Neighbors = + [ 0, 0, 0, 0, 0, 0, 8, 8, 1, 8, 1, 1, 9, 16, 16, 16, 2, 9, 2, 2, 10, 17, 17, 24, 24, 24, 3, 10, 3, 3, 18, 25, 25, 32, 11, 18, 32, 32, 4, 11, 26, 33, 19, 26, 4, 4, 33, 40, 12, 19, 40, 40, 5, 12, 27, 34, 34, 41, 20, 27, 13, 20, 5, 5, 41, 48, 48, 48, 28, 35, 35, 42, 21, 28, 6, 6, 6, 13, 42, 49, 49, 56, 36, 43, 14, 21, 29, 36, 7, 14, 43, 50, 50, 57, 22, 29, 37, 44, 15, 22, 44, 51, 51, 58, 30, 37, 23, 30, 52, 59, 45, 52, 38, 45, - 31, 38, 53, 60, 46, 53, 39, 46, 54, 61, 47, 54, 55, 62, 0, 0, - }; + 31, 38, 53, 60, 46, 53, 39, 46, 54, 61, 47, 54, 55, 62, 0, 0 + ]; - private static readonly short[] ColScan16X16Neighbors = new short[] - { + private static readonly short[] _colScan16X16Neighbors = + [ 0, 0, 0, 0, 16, 16, 32, 32, 0, 0, 48, 48, 1, 1, 64, 64, 17, 17, 80, 80, 33, 33, 1, 1, 49, 49, 96, 96, 2, 2, 65, 65, 18, 18, 112, 112, 34, 34, 81, 81, 2, 2, 50, 50, 128, @@ -565,11 +569,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 142, 204, 204, 235, 235, 111, 111, 158, 158, 127, 127, 189, 189, 220, 220, 143, 143, 174, 174, 205, 205, 236, 236, 159, 159, 190, 190, 221, 221, 175, 175, 237, 237, 206, 206, 222, 222, 191, 191, 238, 238, 207, 207, 223, 223, - 239, 239, 0, 0, - }; + 239, 239, 0, 0 + ]; - private static readonly short[] RowScan16X16Neighbors = new short[] - { + private static readonly short[] _rowScan16X16Neighbors = + [ 0, 0, 0, 0, 1, 1, 0, 0, 2, 2, 16, 16, 3, 3, 17, 17, 16, 16, 4, 4, 32, 32, 18, 18, 5, 5, 33, 33, 32, 32, 19, 19, 48, 48, 6, 6, 34, 34, 20, 20, 49, 49, 48, 48, 7, @@ -604,11 +608,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 142, 173, 173, 158, 158, 249, 249, 234, 234, 204, 204, 219, 219, 174, 174, 189, 189, 250, 250, 220, 220, 190, 190, 205, 205, 235, 235, 206, 206, 236, 236, 251, 251, 221, 221, 252, 252, 222, 222, 237, 237, 238, 238, 253, 253, - 254, 254, 0, 0, - }; + 254, 254, 0, 0 + ]; - private static readonly short[] DefaultScan16X16Neighbors = new short[] - { + private static readonly short[] _defaultScan16X16Neighbors = + [ 0, 0, 0, 0, 0, 0, 16, 16, 1, 16, 1, 1, 32, 32, 17, 32, 2, 17, 2, 2, 48, 48, 18, 33, 33, 48, 3, 18, 49, 64, 64, 64, 34, 49, 3, 3, 19, 34, 50, 65, 4, 19, 65, 80, 80, @@ -643,11 +647,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 249, 219, 234, 127, 142, 158, 173, 204, 219, 189, 204, 143, 158, 235, 250, 174, 189, 205, 220, 159, 174, 220, 235, 221, 236, 175, 190, 190, 205, 236, 251, 206, 221, 237, 252, 191, 206, 222, 237, 207, 222, 238, 253, 223, 238, - 239, 254, 0, 0, - }; + 239, 254, 0, 0 + ]; - private static readonly short[] DefaultScan32X32Neighbors = new short[] - { + private static readonly short[] _defaultScan32X32Neighbors = + [ 0, 0, 0, 0, 0, 0, 32, 32, 1, 32, 1, 1, 64, 64, 33, 64, 2, 33, 96, 96, 2, 2, 65, 96, 34, 65, 128, 128, 97, 128, 3, 34, 66, 97, 3, 3, 35, 66, 98, 129, 129, 160, @@ -794,50 +798,50 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 799, 830, 986, 1017, 955, 986, 862, 893, 831, 862, 987, 1018, 863, 894, 892, 923, 924, 955, 893, 924, 956, 987, 925, 956, 894, 925, 988, 1019, 957, 988, 926, 957, 895, 926, 989, 1020, 958, 989, 927, 958, 990, 1021, - 959, 990, 991, 1022, 0, 0, - }; + 959, 990, 991, 1022, 0, 0 + ]; - private static readonly short[] DefaultIscan4X4 = new short[] - { - 0, 2, 5, 8, 1, 3, 9, 12, 4, 7, 11, 14, 6, 10, 13, 15, - }; + private static readonly short[] _defaultIscan4X4 = + [ + 0, 2, 5, 8, 1, 3, 9, 12, 4, 7, 11, 14, 6, 10, 13, 15 + ]; - private static readonly short[] ColIscan4X4 = new short[] - { - 0, 3, 7, 11, 1, 5, 9, 12, 2, 6, 10, 14, 4, 8, 13, 15, - }; + private static readonly short[] _colIscan4X4 = + [ + 0, 3, 7, 11, 1, 5, 9, 12, 2, 6, 10, 14, 4, 8, 13, 15 + ]; - private static readonly short[] RowIscan4X4 = new short[] - { - 0, 1, 3, 5, 2, 4, 6, 9, 7, 8, 11, 13, 10, 12, 14, 15, - }; + private static readonly short[] _rowIscan4X4 = + [ + 0, 1, 3, 5, 2, 4, 6, 9, 7, 8, 11, 13, 10, 12, 14, 15 + ]; - private static readonly short[] ColIscan8X8 = new short[] - { + private static readonly short[] _colIscan8X8 = + [ 0, 3, 8, 15, 22, 32, 40, 47, 1, 5, 11, 18, 26, 34, 44, 51, 2, 7, 13, 20, 28, 38, 46, 54, 4, 10, 16, 24, 31, 41, 50, 56, 6, 12, 21, 27, 35, 43, 52, 58, 9, 17, 25, 33, 39, 48, 55, 60, - 14, 23, 30, 37, 45, 53, 59, 62, 19, 29, 36, 42, 49, 57, 61, 63, - }; + 14, 23, 30, 37, 45, 53, 59, 62, 19, 29, 36, 42, 49, 57, 61, 63 + ]; - private static readonly short[] RowIscan8X8 = new short[] - { + private static readonly short[] _rowIscan8X8 = + [ 0, 1, 2, 5, 8, 12, 19, 24, 3, 4, 7, 10, 15, 20, 30, 39, 6, 9, 13, 16, 21, 27, 37, 46, 11, 14, 17, 23, 28, 34, 44, 52, 18, 22, 25, 31, 35, 41, 50, 57, 26, 29, 33, 38, 43, 49, 55, 59, - 32, 36, 42, 47, 51, 54, 60, 61, 40, 45, 48, 53, 56, 58, 62, 63, - }; + 32, 36, 42, 47, 51, 54, 60, 61, 40, 45, 48, 53, 56, 58, 62, 63 + ]; - private static readonly short[] DefaultIscan8X8 = new short[] - { + private static readonly short[] _defaultIscan8X8 = + [ 0, 2, 5, 9, 14, 22, 31, 37, 1, 4, 8, 13, 19, 26, 38, 44, 3, 6, 10, 17, 24, 30, 42, 49, 7, 11, 15, 21, 29, 36, 47, 53, 12, 16, 20, 27, 34, 43, 52, 57, 18, 23, 28, 35, 41, 48, 56, 60, - 25, 32, 39, 45, 50, 55, 59, 62, 33, 40, 46, 51, 54, 58, 61, 63, - }; + 25, 32, 39, 45, 50, 55, 59, 62, 33, 40, 46, 51, 54, 58, 61, 63 + ]; - private static readonly short[] ColIscan16X16 = new short[] - { + private static readonly short[] _colIscan16X16 = + [ 0, 4, 11, 20, 31, 43, 59, 75, 85, 109, 130, 150, 165, 181, 195, 198, 1, 6, 14, 23, 34, 47, 64, 81, 95, 114, 135, 153, 171, 188, 201, 212, 2, 8, 16, 25, 38, 52, 67, 83, 101, 116, 136, 157, 172, 190, 205, 216, @@ -853,11 +857,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 42, 61, 77, 90, 106, 121, 134, 148, 160, 173, 191, 211, 225, 238, 245, 251, 50, 72, 87, 100, 118, 128, 145, 158, 168, 183, 204, 222, 233, 242, 249, 253, 57, 80, 97, 111, 131, 143, 155, 169, 178, 192, 214, 231, 239, 246, 250, 254, - 65, 88, 107, 124, 139, 152, 163, 177, 185, 199, 221, 234, 243, 248, 252, 255, - }; + 65, 88, 107, 124, 139, 152, 163, 177, 185, 199, 221, 234, 243, 248, 252, 255 + ]; - private static readonly short[] RowIscan16X16 = new short[] - { + private static readonly short[] _rowIscan16X16 = + [ 0, 1, 2, 4, 6, 9, 12, 17, 22, 29, 36, 43, 54, 64, 76, 86, 3, 5, 7, 11, 15, 19, 25, 32, 38, 48, 59, 68, 84, 99, 115, 130, 8, 10, 13, 18, 23, 27, 33, 42, 51, 60, 72, 88, 103, @@ -875,11 +879,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 156, 166, 172, 180, 189, 199, 200, 210, 220, 228, 238, 242, 249, 251, 152, 163, 171, 183, 186, 193, 201, 211, 214, 218, 227, 236, 245, 247, 252, 253, 158, 173, 187, 194, 198, 209, 213, 217, 225, 229, 235, 241, 248, 250, 254, - 255, - }; + 255 + ]; - private static readonly short[] DefaultIscan16X16 = new short[] - { + private static readonly short[] _defaultIscan16X16 = + [ 0, 2, 5, 9, 17, 24, 36, 44, 55, 72, 88, 104, 128, 143, 166, 179, 1, 4, 8, 13, 20, 30, 40, 54, 66, 79, 96, 113, 141, 154, 178, 196, 3, 7, 11, 18, 25, 33, 46, 57, 71, 86, 101, 119, 148, @@ -897,11 +901,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 126, 136, 149, 162, 171, 183, 194, 204, 215, 224, 236, 241, 248, 252, 121, 135, 144, 158, 170, 181, 192, 200, 209, 218, 227, 233, 243, 244, 251, 254, 137, 152, 160, 174, 184, 195, 206, 212, 220, 226, 232, 239, 247, 249, 253, - 255, - }; + 255 + ]; - private static readonly short[] DefaultIscan32X32 = new short[] - { + private static readonly short[] _defaultIscan32X32 = + [ 0, 2, 5, 10, 17, 25, 38, 47, 62, 83, 101, 121, 145, 170, 193, 204, 210, 219, 229, 233, 245, 257, 275, 299, 342, 356, 377, 405, 455, 471, 495, 527, 1, 4, 8, 15, 22, 30, 45, @@ -980,8 +984,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 850, 876, 889, 905, 917, 937, 947, 959, 968, 982, 989, 997, 1003, 1011, 1015, 1019, 1022, 496, 528, 552, 568, 618, 646, 667, 681, 724, 748, 766, 778, 814, 834, 849, 859, 888, 904, 916, 924, 946, 958, - 967, 973, 988, 996, 1002, 1006, 1014, 1018, 1021, 1023, - }; + 967, 973, 988, 996, 1002, 1006, 1014, 1018, 1021, 1023 + ]; public class ScanOrder { @@ -997,55 +1001,51 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } } - public static readonly ScanOrder[] DefaultScanOrders = new ScanOrder[] - { - new ScanOrder(DefaultScan4X4, DefaultIscan4X4, DefaultScan4X4Neighbors), - new ScanOrder(DefaultScan8X8, DefaultIscan8X8, DefaultScan8X8Neighbors), - new ScanOrder(DefaultScan16X16, DefaultIscan16X16, DefaultScan16X16Neighbors), - new ScanOrder(DefaultScan32X32, DefaultIscan32X32, DefaultScan32X32Neighbors) - }; + public static readonly ScanOrder[] DefaultScanOrders = + [ + new(_defaultScan4X4, _defaultIscan4X4, _defaultScan4X4Neighbors), + new(_defaultScan8X8, _defaultIscan8X8, _defaultScan8X8Neighbors), + new(_defaultScan16X16, _defaultIscan16X16, _defaultScan16X16Neighbors), + new(_defaultScan32X32, _defaultIscan32X32, _defaultScan32X32Neighbors) + ]; public static readonly ScanOrder[][] ScanOrders = new ScanOrder[][] { - new ScanOrder[] - { // TX_4X4 - new ScanOrder(DefaultScan4X4, DefaultIscan4X4, DefaultScan4X4Neighbors), - new ScanOrder(RowScan4X4, RowIscan4X4, RowScan4X4Neighbors), - new ScanOrder(ColScan4X4, ColIscan4X4, ColScan4X4Neighbors), - new ScanOrder(DefaultScan4X4, DefaultIscan4X4, DefaultScan4X4Neighbors) - }, - new ScanOrder[] - { // TX_8X8 - new ScanOrder(DefaultScan8X8, DefaultIscan8X8, DefaultScan8X8Neighbors), - new ScanOrder(RowScan8X8, RowIscan8X8, RowScan8X8Neighbors), - new ScanOrder(ColScan8X8, ColIscan8X8, ColScan8X8Neighbors), - new ScanOrder(DefaultScan8X8, DefaultIscan8X8, DefaultScan8X8Neighbors) - }, - new ScanOrder[] - { // TX_16X16 - new ScanOrder(DefaultScan16X16, DefaultIscan16X16, DefaultScan16X16Neighbors), - new ScanOrder(RowScan16X16, RowIscan16X16, RowScan16X16Neighbors), - new ScanOrder(ColScan16X16, ColIscan16X16, ColScan16X16Neighbors), - new ScanOrder(DefaultScan16X16, DefaultIscan16X16, DefaultScan16X16Neighbors) - }, - new ScanOrder[] - { // TX_32X32 - new ScanOrder(DefaultScan32X32, DefaultIscan32X32, DefaultScan32X32Neighbors), - new ScanOrder(DefaultScan32X32, DefaultIscan32X32, DefaultScan32X32Neighbors), - new ScanOrder(DefaultScan32X32, DefaultIscan32X32, DefaultScan32X32Neighbors), - new ScanOrder(DefaultScan32X32, DefaultIscan32X32, DefaultScan32X32Neighbors) - } + [ // TX_4X4 + new ScanOrder(_defaultScan4X4, _defaultIscan4X4, _defaultScan4X4Neighbors), + new ScanOrder(_rowScan4X4, _rowIscan4X4, _rowScan4X4Neighbors), + new ScanOrder(_colScan4X4, _colIscan4X4, _colScan4X4Neighbors), + new ScanOrder(_defaultScan4X4, _defaultIscan4X4, _defaultScan4X4Neighbors) + ], + [ // TX_8X8 + new ScanOrder(_defaultScan8X8, _defaultIscan8X8, _defaultScan8X8Neighbors), + new ScanOrder(_rowScan8X8, _rowIscan8X8, _rowScan8X8Neighbors), + new ScanOrder(_colScan8X8, _colIscan8X8, _colScan8X8Neighbors), + new ScanOrder(_defaultScan8X8, _defaultIscan8X8, _defaultScan8X8Neighbors) + ], + [ // TX_16X16 + new ScanOrder(_defaultScan16X16, _defaultIscan16X16, _defaultScan16X16Neighbors), + new ScanOrder(_rowScan16X16, _rowIscan16X16, _rowScan16X16Neighbors), + new ScanOrder(_colScan16X16, _colIscan16X16, _colScan16X16Neighbors), + new ScanOrder(_defaultScan16X16, _defaultIscan16X16, _defaultScan16X16Neighbors) + ], + [ // TX_32X32 + new ScanOrder(_defaultScan32X32, _defaultIscan32X32, _defaultScan32X32Neighbors), + new ScanOrder(_defaultScan32X32, _defaultIscan32X32, _defaultScan32X32Neighbors), + new ScanOrder(_defaultScan32X32, _defaultIscan32X32, _defaultScan32X32Neighbors), + new ScanOrder(_defaultScan32X32, _defaultIscan32X32, _defaultScan32X32Neighbors) + ] }; // Entropy MV - public static readonly sbyte[] MvJointTree = new sbyte[] - { + public static readonly sbyte[] MvJointTree = + [ -(sbyte)MvJointType.Zero, 2, -(sbyte)MvJointType.Hnzvz, 4, -(sbyte)MvJointType.Hzvnz, -(sbyte)MvJointType.Hnzvnz - }; + ]; - public static readonly sbyte[] MvClassTree = new sbyte[] - { + public static readonly sbyte[] MvClassTree = + [ -(sbyte)MvClassType.Class0, 2, -(sbyte)MvClassType.Class1, @@ -1066,26 +1066,27 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 -(sbyte)MvClassType.Class8, -(sbyte)MvClassType.Class9, -(sbyte)MvClassType.Class10 - }; + ]; - public static ReadOnlySpan MvFPTree => new sbyte[] { -0, 2, -1, 4, -2, -3 }; + public static ReadOnlySpan MvFpTree => [-0, 2, -1, 4, -2, -3]; // Entropy - public static ReadOnlySpan Cat1Prob => new byte[] { 159 }; - public static ReadOnlySpan Cat2Prob => new byte[] { 165, 145 }; - public static ReadOnlySpan Cat3Prob => new byte[] { 173, 148, 140 }; - public static ReadOnlySpan Cat4Prob => new byte[] { 176, 155, 140, 135 }; - public static ReadOnlySpan Cat5Prob => new byte[] { 180, 157, 141, 134, 130 }; - public static ReadOnlySpan Cat6Prob => new byte[] { 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 }; + public static ReadOnlySpan Cat1Prob => [159]; + public static ReadOnlySpan Cat2Prob => [165, 145]; + public static ReadOnlySpan Cat3Prob => [173, 148, 140]; + public static ReadOnlySpan Cat4Prob => [176, 155, 140, 135]; + public static ReadOnlySpan Cat5Prob => [180, 157, 141, 134, 130]; + public static ReadOnlySpan Cat6Prob => [254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 + ]; - public static ReadOnlySpan Cat6ProbHigh12 => new byte[] - { + public static ReadOnlySpan Cat6ProbHigh12 => + [ 255, 255, 255, 255, 254, 254, 54, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129 - }; + ]; - private static readonly byte[] CoefbandTrans8X8Plus = new byte[] - { + private static readonly byte[] _coefbandTrans8X8Plus = + [ 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, // Beyond MAXBAND_INDEX+1 all values are filled as 5 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -1126,281 +1127,195 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - }; + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 + ]; - private static ReadOnlySpan CoefbandTrans4X4 => new byte[] - { - 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, - }; + private static ReadOnlySpan CoefbandTrans4X4 => + [ + 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5 + ]; public static ReadOnlySpan GetBandTranslate(TxSize txSize) { - return txSize == TxSize.Tx4x4 ? CoefbandTrans4X4 : CoefbandTrans8X8Plus; + return txSize == TxSize.Tx4X4 ? CoefbandTrans4X4 : _coefbandTrans8X8Plus; } public static readonly byte[][] Pareto8Full = new byte[][] { - new byte[] { 3, 86, 128, 6, 86, 23, 88, 29 }, - new byte[] { 6, 86, 128, 11, 87, 42, 91, 52 }, - new byte[] { 9, 86, 129, 17, 88, 61, 94, 76 }, - new byte[] { 12, 86, 129, 22, 88, 77, 97, 93 }, - new byte[] { 15, 87, 129, 28, 89, 93, 100, 110 }, - new byte[] { 17, 87, 129, 33, 90, 105, 103, 123 }, - new byte[] { 20, 88, 130, 38, 91, 118, 106, 136 }, - new byte[] { 23, 88, 130, 43, 91, 128, 108, 146 }, - new byte[] { 26, 89, 131, 48, 92, 139, 111, 156 }, - new byte[] { 28, 89, 131, 53, 93, 147, 114, 163 }, - new byte[] { 31, 90, 131, 58, 94, 156, 117, 171 }, - new byte[] { 34, 90, 131, 62, 94, 163, 119, 177 }, - new byte[] { 37, 90, 132, 66, 95, 171, 122, 184 }, - new byte[] { 39, 90, 132, 70, 96, 177, 124, 189 }, - new byte[] { 42, 91, 132, 75, 97, 183, 127, 194 }, - new byte[] { 44, 91, 132, 79, 97, 188, 129, 198 }, - new byte[] { 47, 92, 133, 83, 98, 193, 132, 202 }, - new byte[] { 49, 92, 133, 86, 99, 197, 134, 205 }, - new byte[] { 52, 93, 133, 90, 100, 201, 137, 208 }, - new byte[] { 54, 93, 133, 94, 100, 204, 139, 211 }, - new byte[] { 57, 94, 134, 98, 101, 208, 142, 214 }, - new byte[] { 59, 94, 134, 101, 102, 211, 144, 216 }, - new byte[] { 62, 94, 135, 105, 103, 214, 146, 218 }, - new byte[] { 64, 94, 135, 108, 103, 216, 148, 220 }, - new byte[] { 66, 95, 135, 111, 104, 219, 151, 222 }, - new byte[] { 68, 95, 135, 114, 105, 221, 153, 223 }, - new byte[] { 71, 96, 136, 117, 106, 224, 155, 225 }, - new byte[] { 73, 96, 136, 120, 106, 225, 157, 226 }, - new byte[] { 76, 97, 136, 123, 107, 227, 159, 228 }, - new byte[] { 78, 97, 136, 126, 108, 229, 160, 229 }, - new byte[] { 80, 98, 137, 129, 109, 231, 162, 231 }, - new byte[] { 82, 98, 137, 131, 109, 232, 164, 232 }, - new byte[] { 84, 98, 138, 134, 110, 234, 166, 233 }, - new byte[] { 86, 98, 138, 137, 111, 235, 168, 234 }, - new byte[] { 89, 99, 138, 140, 112, 236, 170, 235 }, - new byte[] { 91, 99, 138, 142, 112, 237, 171, 235 }, - new byte[] { 93, 100, 139, 145, 113, 238, 173, 236 }, - new byte[] { 95, 100, 139, 147, 114, 239, 174, 237 }, - new byte[] { 97, 101, 140, 149, 115, 240, 176, 238 }, - new byte[] { 99, 101, 140, 151, 115, 241, 177, 238 }, - new byte[] { 101, 102, 140, 154, 116, 242, 179, 239 }, - new byte[] { 103, 102, 140, 156, 117, 242, 180, 239 }, - new byte[] { 105, 103, 141, 158, 118, 243, 182, 240 }, - new byte[] { 107, 103, 141, 160, 118, 243, 183, 240 }, - new byte[] { 109, 104, 141, 162, 119, 244, 185, 241 }, - new byte[] { 111, 104, 141, 164, 119, 244, 186, 241 }, - new byte[] { 113, 104, 142, 166, 120, 245, 187, 242 }, - new byte[] { 114, 104, 142, 168, 121, 245, 188, 242 }, - new byte[] { 116, 105, 143, 170, 122, 246, 190, 243 }, - new byte[] { 118, 105, 143, 171, 122, 246, 191, 243 }, - new byte[] { 120, 106, 143, 173, 123, 247, 192, 244 }, - new byte[] { 121, 106, 143, 175, 124, 247, 193, 244 }, - new byte[] { 123, 107, 144, 177, 125, 248, 195, 244 }, - new byte[] { 125, 107, 144, 178, 125, 248, 196, 244 }, - new byte[] { 127, 108, 145, 180, 126, 249, 197, 245 }, - new byte[] { 128, 108, 145, 181, 127, 249, 198, 245 }, - new byte[] { 130, 109, 145, 183, 128, 249, 199, 245 }, - new byte[] { 132, 109, 145, 184, 128, 249, 200, 245 }, - new byte[] { 134, 110, 146, 186, 129, 250, 201, 246 }, - new byte[] { 135, 110, 146, 187, 130, 250, 202, 246 }, - new byte[] { 137, 111, 147, 189, 131, 251, 203, 246 }, - new byte[] { 138, 111, 147, 190, 131, 251, 204, 246 }, - new byte[] { 140, 112, 147, 192, 132, 251, 205, 247 }, - new byte[] { 141, 112, 147, 193, 132, 251, 206, 247 }, - new byte[] { 143, 113, 148, 194, 133, 251, 207, 247 }, - new byte[] { 144, 113, 148, 195, 134, 251, 207, 247 }, - new byte[] { 146, 114, 149, 197, 135, 252, 208, 248 }, - new byte[] { 147, 114, 149, 198, 135, 252, 209, 248 }, - new byte[] { 149, 115, 149, 199, 136, 252, 210, 248 }, - new byte[] { 150, 115, 149, 200, 137, 252, 210, 248 }, - new byte[] { 152, 115, 150, 201, 138, 252, 211, 248 }, - new byte[] { 153, 115, 150, 202, 138, 252, 212, 248 }, - new byte[] { 155, 116, 151, 204, 139, 253, 213, 249 }, - new byte[] { 156, 116, 151, 205, 139, 253, 213, 249 }, - new byte[] { 158, 117, 151, 206, 140, 253, 214, 249 }, - new byte[] { 159, 117, 151, 207, 141, 253, 215, 249 }, - new byte[] { 161, 118, 152, 208, 142, 253, 216, 249 }, - new byte[] { 162, 118, 152, 209, 142, 253, 216, 249 }, - new byte[] { 163, 119, 153, 210, 143, 253, 217, 249 }, - new byte[] { 164, 119, 153, 211, 143, 253, 217, 249 }, - new byte[] { 166, 120, 153, 212, 144, 254, 218, 250 }, - new byte[] { 167, 120, 153, 212, 145, 254, 219, 250 }, - new byte[] { 168, 121, 154, 213, 146, 254, 220, 250 }, - new byte[] { 169, 121, 154, 214, 146, 254, 220, 250 }, - new byte[] { 171, 122, 155, 215, 147, 254, 221, 250 }, - new byte[] { 172, 122, 155, 216, 147, 254, 221, 250 }, - new byte[] { 173, 123, 155, 217, 148, 254, 222, 250 }, - new byte[] { 174, 123, 155, 217, 149, 254, 222, 250 }, - new byte[] { 176, 124, 156, 218, 150, 254, 223, 250 }, - new byte[] { 177, 124, 156, 219, 150, 254, 223, 250 }, - new byte[] { 178, 125, 157, 220, 151, 254, 224, 251 }, - new byte[] { 179, 125, 157, 220, 151, 254, 224, 251 }, - new byte[] { 180, 126, 157, 221, 152, 254, 225, 251 }, - new byte[] { 181, 126, 157, 221, 152, 254, 225, 251 }, - new byte[] { 183, 127, 158, 222, 153, 254, 226, 251 }, - new byte[] { 184, 127, 158, 223, 154, 254, 226, 251 }, - new byte[] { 185, 128, 159, 224, 155, 255, 227, 251 }, - new byte[] { 186, 128, 159, 224, 155, 255, 227, 251 }, - new byte[] { 187, 129, 160, 225, 156, 255, 228, 251 }, - new byte[] { 188, 130, 160, 225, 156, 255, 228, 251 }, - new byte[] { 189, 131, 160, 226, 157, 255, 228, 251 }, - new byte[] { 190, 131, 160, 226, 158, 255, 228, 251 }, - new byte[] { 191, 132, 161, 227, 159, 255, 229, 251 }, - new byte[] { 192, 132, 161, 227, 159, 255, 229, 251 }, - new byte[] { 193, 133, 162, 228, 160, 255, 230, 252 }, - new byte[] { 194, 133, 162, 229, 160, 255, 230, 252 }, - new byte[] { 195, 134, 163, 230, 161, 255, 231, 252 }, - new byte[] { 196, 134, 163, 230, 161, 255, 231, 252 }, - new byte[] { 197, 135, 163, 231, 162, 255, 231, 252 }, - new byte[] { 198, 135, 163, 231, 162, 255, 231, 252 }, - new byte[] { 199, 136, 164, 232, 163, 255, 232, 252 }, - new byte[] { 200, 136, 164, 232, 164, 255, 232, 252 }, - new byte[] { 201, 137, 165, 233, 165, 255, 233, 252 }, - new byte[] { 201, 137, 165, 233, 165, 255, 233, 252 }, - new byte[] { 202, 138, 166, 233, 166, 255, 233, 252 }, - new byte[] { 203, 138, 166, 233, 166, 255, 233, 252 }, - new byte[] { 204, 139, 166, 234, 167, 255, 234, 252 }, - new byte[] { 205, 139, 166, 234, 167, 255, 234, 252 }, - new byte[] { 206, 140, 167, 235, 168, 255, 235, 252 }, - new byte[] { 206, 140, 167, 235, 168, 255, 235, 252 }, - new byte[] { 207, 141, 168, 236, 169, 255, 235, 252 }, - new byte[] { 208, 141, 168, 236, 170, 255, 235, 252 }, - new byte[] { 209, 142, 169, 237, 171, 255, 236, 252 }, - new byte[] { 209, 143, 169, 237, 171, 255, 236, 252 }, - new byte[] { 210, 144, 169, 237, 172, 255, 236, 252 }, - new byte[] { 211, 144, 169, 237, 172, 255, 236, 252 }, - new byte[] { 212, 145, 170, 238, 173, 255, 237, 252 }, - new byte[] { 213, 145, 170, 238, 173, 255, 237, 252 }, - new byte[] { 214, 146, 171, 239, 174, 255, 237, 253 }, - new byte[] { 214, 146, 171, 239, 174, 255, 237, 253 }, - new byte[] { 215, 147, 172, 240, 175, 255, 238, 253 }, - new byte[] { 215, 147, 172, 240, 175, 255, 238, 253 }, - new byte[] { 216, 148, 173, 240, 176, 255, 238, 253 }, - new byte[] { 217, 148, 173, 240, 176, 255, 238, 253 }, - new byte[] { 218, 149, 173, 241, 177, 255, 239, 253 }, - new byte[] { 218, 149, 173, 241, 178, 255, 239, 253 }, - new byte[] { 219, 150, 174, 241, 179, 255, 239, 253 }, - new byte[] { 219, 151, 174, 241, 179, 255, 239, 253 }, - new byte[] { 220, 152, 175, 242, 180, 255, 240, 253 }, - new byte[] { 221, 152, 175, 242, 180, 255, 240, 253 }, - new byte[] { 222, 153, 176, 242, 181, 255, 240, 253 }, - new byte[] { 222, 153, 176, 242, 181, 255, 240, 253 }, - new byte[] { 223, 154, 177, 243, 182, 255, 240, 253 }, - new byte[] { 223, 154, 177, 243, 182, 255, 240, 253 }, - new byte[] { 224, 155, 178, 244, 183, 255, 241, 253 }, - new byte[] { 224, 155, 178, 244, 183, 255, 241, 253 }, - new byte[] { 225, 156, 178, 244, 184, 255, 241, 253 }, - new byte[] { 225, 157, 178, 244, 184, 255, 241, 253 }, - new byte[] { 226, 158, 179, 244, 185, 255, 242, 253 }, - new byte[] { 227, 158, 179, 244, 185, 255, 242, 253 }, - new byte[] { 228, 159, 180, 245, 186, 255, 242, 253 }, - new byte[] { 228, 159, 180, 245, 186, 255, 242, 253 }, - new byte[] { 229, 160, 181, 245, 187, 255, 242, 253 }, - new byte[] { 229, 160, 181, 245, 187, 255, 242, 253 }, - new byte[] { 230, 161, 182, 246, 188, 255, 243, 253 }, - new byte[] { 230, 162, 182, 246, 188, 255, 243, 253 }, - new byte[] { 231, 163, 183, 246, 189, 255, 243, 253 }, - new byte[] { 231, 163, 183, 246, 189, 255, 243, 253 }, - new byte[] { 232, 164, 184, 247, 190, 255, 243, 253 }, - new byte[] { 232, 164, 184, 247, 190, 255, 243, 253 }, - new byte[] { 233, 165, 185, 247, 191, 255, 244, 253 }, - new byte[] { 233, 165, 185, 247, 191, 255, 244, 253 }, - new byte[] { 234, 166, 185, 247, 192, 255, 244, 253 }, - new byte[] { 234, 167, 185, 247, 192, 255, 244, 253 }, - new byte[] { 235, 168, 186, 248, 193, 255, 244, 253 }, - new byte[] { 235, 168, 186, 248, 193, 255, 244, 253 }, - new byte[] { 236, 169, 187, 248, 194, 255, 244, 253 }, - new byte[] { 236, 169, 187, 248, 194, 255, 244, 253 }, - new byte[] { 236, 170, 188, 248, 195, 255, 245, 253 }, - new byte[] { 236, 170, 188, 248, 195, 255, 245, 253 }, - new byte[] { 237, 171, 189, 249, 196, 255, 245, 254 }, - new byte[] { 237, 172, 189, 249, 196, 255, 245, 254 }, - new byte[] { 238, 173, 190, 249, 197, 255, 245, 254 }, - new byte[] { 238, 173, 190, 249, 197, 255, 245, 254 }, - new byte[] { 239, 174, 191, 249, 198, 255, 245, 254 }, - new byte[] { 239, 174, 191, 249, 198, 255, 245, 254 }, - new byte[] { 240, 175, 192, 249, 199, 255, 246, 254 }, - new byte[] { 240, 176, 192, 249, 199, 255, 246, 254 }, - new byte[] { 240, 177, 193, 250, 200, 255, 246, 254 }, - new byte[] { 240, 177, 193, 250, 200, 255, 246, 254 }, - new byte[] { 241, 178, 194, 250, 201, 255, 246, 254 }, - new byte[] { 241, 178, 194, 250, 201, 255, 246, 254 }, - new byte[] { 242, 179, 195, 250, 202, 255, 246, 254 }, - new byte[] { 242, 180, 195, 250, 202, 255, 246, 254 }, - new byte[] { 242, 181, 196, 250, 203, 255, 247, 254 }, - new byte[] { 242, 181, 196, 250, 203, 255, 247, 254 }, - new byte[] { 243, 182, 197, 251, 204, 255, 247, 254 }, - new byte[] { 243, 183, 197, 251, 204, 255, 247, 254 }, - new byte[] { 244, 184, 198, 251, 205, 255, 247, 254 }, - new byte[] { 244, 184, 198, 251, 205, 255, 247, 254 }, - new byte[] { 244, 185, 199, 251, 206, 255, 247, 254 }, - new byte[] { 244, 185, 199, 251, 206, 255, 247, 254 }, - new byte[] { 245, 186, 200, 251, 207, 255, 247, 254 }, - new byte[] { 245, 187, 200, 251, 207, 255, 247, 254 }, - new byte[] { 246, 188, 201, 252, 207, 255, 248, 254 }, - new byte[] { 246, 188, 201, 252, 207, 255, 248, 254 }, - new byte[] { 246, 189, 202, 252, 208, 255, 248, 254 }, - new byte[] { 246, 190, 202, 252, 208, 255, 248, 254 }, - new byte[] { 247, 191, 203, 252, 209, 255, 248, 254 }, - new byte[] { 247, 191, 203, 252, 209, 255, 248, 254 }, - new byte[] { 247, 192, 204, 252, 210, 255, 248, 254 }, - new byte[] { 247, 193, 204, 252, 210, 255, 248, 254 }, - new byte[] { 248, 194, 205, 252, 211, 255, 248, 254 }, - new byte[] { 248, 194, 205, 252, 211, 255, 248, 254 }, - new byte[] { 248, 195, 206, 252, 212, 255, 249, 254 }, - new byte[] { 248, 196, 206, 252, 212, 255, 249, 254 }, - new byte[] { 249, 197, 207, 253, 213, 255, 249, 254 }, - new byte[] { 249, 197, 207, 253, 213, 255, 249, 254 }, - new byte[] { 249, 198, 208, 253, 214, 255, 249, 254 }, - new byte[] { 249, 199, 209, 253, 214, 255, 249, 254 }, - new byte[] { 250, 200, 210, 253, 215, 255, 249, 254 }, - new byte[] { 250, 200, 210, 253, 215, 255, 249, 254 }, - new byte[] { 250, 201, 211, 253, 215, 255, 249, 254 }, - new byte[] { 250, 202, 211, 253, 215, 255, 249, 254 }, - new byte[] { 250, 203, 212, 253, 216, 255, 249, 254 }, - new byte[] { 250, 203, 212, 253, 216, 255, 249, 254 }, - new byte[] { 251, 204, 213, 253, 217, 255, 250, 254 }, - new byte[] { 251, 205, 213, 253, 217, 255, 250, 254 }, - new byte[] { 251, 206, 214, 254, 218, 255, 250, 254 }, - new byte[] { 251, 206, 215, 254, 218, 255, 250, 254 }, - new byte[] { 252, 207, 216, 254, 219, 255, 250, 254 }, - new byte[] { 252, 208, 216, 254, 219, 255, 250, 254 }, - new byte[] { 252, 209, 217, 254, 220, 255, 250, 254 }, - new byte[] { 252, 210, 217, 254, 220, 255, 250, 254 }, - new byte[] { 252, 211, 218, 254, 221, 255, 250, 254 }, - new byte[] { 252, 212, 218, 254, 221, 255, 250, 254 }, - new byte[] { 253, 213, 219, 254, 222, 255, 250, 254 }, - new byte[] { 253, 213, 220, 254, 222, 255, 250, 254 }, - new byte[] { 253, 214, 221, 254, 223, 255, 250, 254 }, - new byte[] { 253, 215, 221, 254, 223, 255, 250, 254 }, - new byte[] { 253, 216, 222, 254, 224, 255, 251, 254 }, - new byte[] { 253, 217, 223, 254, 224, 255, 251, 254 }, - new byte[] { 253, 218, 224, 254, 225, 255, 251, 254 }, - new byte[] { 253, 219, 224, 254, 225, 255, 251, 254 }, - new byte[] { 254, 220, 225, 254, 225, 255, 251, 254 }, - new byte[] { 254, 221, 226, 254, 225, 255, 251, 254 }, - new byte[] { 254, 222, 227, 255, 226, 255, 251, 254 }, - new byte[] { 254, 223, 227, 255, 226, 255, 251, 254 }, - new byte[] { 254, 224, 228, 255, 227, 255, 251, 254 }, - new byte[] { 254, 225, 229, 255, 227, 255, 251, 254 }, - new byte[] { 254, 226, 230, 255, 228, 255, 251, 254 }, - new byte[] { 254, 227, 230, 255, 229, 255, 251, 254 }, - new byte[] { 255, 228, 231, 255, 230, 255, 251, 254 }, - new byte[] { 255, 229, 232, 255, 230, 255, 251, 254 }, - new byte[] { 255, 230, 233, 255, 231, 255, 252, 254 }, - new byte[] { 255, 231, 234, 255, 231, 255, 252, 254 }, - new byte[] { 255, 232, 235, 255, 232, 255, 252, 254 }, - new byte[] { 255, 233, 236, 255, 232, 255, 252, 254 }, - new byte[] { 255, 235, 237, 255, 233, 255, 252, 254 }, - new byte[] { 255, 236, 238, 255, 234, 255, 252, 254 }, - new byte[] { 255, 238, 240, 255, 235, 255, 252, 255 }, - new byte[] { 255, 239, 241, 255, 235, 255, 252, 254 }, - new byte[] { 255, 241, 243, 255, 236, 255, 252, 254 }, - new byte[] { 255, 243, 245, 255, 237, 255, 252, 254 }, - new byte[] { 255, 246, 247, 255, 239, 255, 253, 255 }, + [3, 86, 128, 6, 86, 23, 88, 29], [6, 86, 128, 11, 87, 42, 91, 52], [9, 86, 129, 17, 88, 61, 94, 76], [12, 86, 129, 22, 88, 77, 97, 93 + ], + [15, 87, 129, 28, 89, 93, 100, 110], [17, 87, 129, 33, 90, 105, 103, 123], [20, 88, 130, 38, 91, 118, 106, 136 + ], + [23, 88, 130, 43, 91, 128, 108, 146], [26, 89, 131, 48, 92, 139, 111, 156], [28, 89, 131, 53, 93, 147, 114, 163 + ], + [31, 90, 131, 58, 94, 156, 117, 171], [34, 90, 131, 62, 94, 163, 119, 177], [37, 90, 132, 66, 95, 171, 122, 184 + ], + [39, 90, 132, 70, 96, 177, 124, 189], [42, 91, 132, 75, 97, 183, 127, 194], [44, 91, 132, 79, 97, 188, 129, 198 + ], + [47, 92, 133, 83, 98, 193, 132, 202], [49, 92, 133, 86, 99, 197, 134, 205], [52, 93, 133, 90, 100, 201, 137, 208 + ], + [54, 93, 133, 94, 100, 204, 139, 211], [57, 94, 134, 98, 101, 208, 142, 214], [59, 94, 134, 101, 102, 211, 144, 216 + ], + [62, 94, 135, 105, 103, 214, 146, 218], [64, 94, 135, 108, 103, 216, 148, 220], [66, 95, 135, 111, 104, 219, 151, 222 + ], + [68, 95, 135, 114, 105, 221, 153, 223], [71, 96, 136, 117, 106, 224, 155, 225], [73, 96, 136, 120, 106, 225, 157, 226 + ], + [76, 97, 136, 123, 107, 227, 159, 228], [78, 97, 136, 126, 108, 229, 160, 229], [80, 98, 137, 129, 109, 231, 162, 231 + ], + [82, 98, 137, 131, 109, 232, 164, 232], [84, 98, 138, 134, 110, 234, 166, 233], [86, 98, 138, 137, 111, 235, 168, 234 + ], + [89, 99, 138, 140, 112, 236, 170, 235], [91, 99, 138, 142, 112, 237, 171, 235], [93, 100, 139, 145, 113, 238, 173, 236 + ], + [95, 100, 139, 147, 114, 239, 174, 237], [97, 101, 140, 149, 115, 240, 176, 238], [99, 101, 140, 151, 115, 241, 177, 238 + ], + [101, 102, 140, 154, 116, 242, 179, 239], [103, 102, 140, 156, 117, 242, 180, 239], [105, 103, 141, 158, 118, 243, 182, 240 + ], + [107, 103, 141, 160, 118, 243, 183, 240], [109, 104, 141, 162, 119, 244, 185, 241], [111, 104, 141, 164, 119, 244, 186, 241 + ], + [113, 104, 142, 166, 120, 245, 187, 242], [114, 104, 142, 168, 121, 245, 188, 242], [116, 105, 143, 170, 122, 246, 190, 243 + ], + [118, 105, 143, 171, 122, 246, 191, 243], [120, 106, 143, 173, 123, 247, 192, 244], [121, 106, 143, 175, 124, 247, 193, 244 + ], + [123, 107, 144, 177, 125, 248, 195, 244], [125, 107, 144, 178, 125, 248, 196, 244], [127, 108, 145, 180, 126, 249, 197, 245 + ], + [128, 108, 145, 181, 127, 249, 198, 245], [130, 109, 145, 183, 128, 249, 199, 245], [132, 109, 145, 184, 128, 249, 200, 245 + ], + [134, 110, 146, 186, 129, 250, 201, 246], [135, 110, 146, 187, 130, 250, 202, 246], [137, 111, 147, 189, 131, 251, 203, 246 + ], + [138, 111, 147, 190, 131, 251, 204, 246], [140, 112, 147, 192, 132, 251, 205, 247], [141, 112, 147, 193, 132, 251, 206, 247 + ], + [143, 113, 148, 194, 133, 251, 207, 247], [144, 113, 148, 195, 134, 251, 207, 247], [146, 114, 149, 197, 135, 252, 208, 248 + ], + [147, 114, 149, 198, 135, 252, 209, 248], [149, 115, 149, 199, 136, 252, 210, 248], [150, 115, 149, 200, 137, 252, 210, 248 + ], + [152, 115, 150, 201, 138, 252, 211, 248], [153, 115, 150, 202, 138, 252, 212, 248], [155, 116, 151, 204, 139, 253, 213, 249 + ], + [156, 116, 151, 205, 139, 253, 213, 249], [158, 117, 151, 206, 140, 253, 214, 249], [159, 117, 151, 207, 141, 253, 215, 249 + ], + [161, 118, 152, 208, 142, 253, 216, 249], [162, 118, 152, 209, 142, 253, 216, 249], [163, 119, 153, 210, 143, 253, 217, 249 + ], + [164, 119, 153, 211, 143, 253, 217, 249], [166, 120, 153, 212, 144, 254, 218, 250], [167, 120, 153, 212, 145, 254, 219, 250 + ], + [168, 121, 154, 213, 146, 254, 220, 250], [169, 121, 154, 214, 146, 254, 220, 250], [171, 122, 155, 215, 147, 254, 221, 250 + ], + [172, 122, 155, 216, 147, 254, 221, 250], [173, 123, 155, 217, 148, 254, 222, 250], [174, 123, 155, 217, 149, 254, 222, 250 + ], + [176, 124, 156, 218, 150, 254, 223, 250], [177, 124, 156, 219, 150, 254, 223, 250], [178, 125, 157, 220, 151, 254, 224, 251 + ], + [179, 125, 157, 220, 151, 254, 224, 251], [180, 126, 157, 221, 152, 254, 225, 251], [181, 126, 157, 221, 152, 254, 225, 251 + ], + [183, 127, 158, 222, 153, 254, 226, 251], [184, 127, 158, 223, 154, 254, 226, 251], [185, 128, 159, 224, 155, 255, 227, 251 + ], + [186, 128, 159, 224, 155, 255, 227, 251], [187, 129, 160, 225, 156, 255, 228, 251], [188, 130, 160, 225, 156, 255, 228, 251 + ], + [189, 131, 160, 226, 157, 255, 228, 251], [190, 131, 160, 226, 158, 255, 228, 251], [191, 132, 161, 227, 159, 255, 229, 251 + ], + [192, 132, 161, 227, 159, 255, 229, 251], [193, 133, 162, 228, 160, 255, 230, 252], [194, 133, 162, 229, 160, 255, 230, 252 + ], + [195, 134, 163, 230, 161, 255, 231, 252], [196, 134, 163, 230, 161, 255, 231, 252], [197, 135, 163, 231, 162, 255, 231, 252 + ], + [198, 135, 163, 231, 162, 255, 231, 252], [199, 136, 164, 232, 163, 255, 232, 252], [200, 136, 164, 232, 164, 255, 232, 252 + ], + [201, 137, 165, 233, 165, 255, 233, 252], [201, 137, 165, 233, 165, 255, 233, 252], [202, 138, 166, 233, 166, 255, 233, 252 + ], + [203, 138, 166, 233, 166, 255, 233, 252], [204, 139, 166, 234, 167, 255, 234, 252], [205, 139, 166, 234, 167, 255, 234, 252 + ], + [206, 140, 167, 235, 168, 255, 235, 252], [206, 140, 167, 235, 168, 255, 235, 252], [207, 141, 168, 236, 169, 255, 235, 252 + ], + [208, 141, 168, 236, 170, 255, 235, 252], [209, 142, 169, 237, 171, 255, 236, 252], [209, 143, 169, 237, 171, 255, 236, 252 + ], + [210, 144, 169, 237, 172, 255, 236, 252], [211, 144, 169, 237, 172, 255, 236, 252], [212, 145, 170, 238, 173, 255, 237, 252 + ], + [213, 145, 170, 238, 173, 255, 237, 252], [214, 146, 171, 239, 174, 255, 237, 253], [214, 146, 171, 239, 174, 255, 237, 253 + ], + [215, 147, 172, 240, 175, 255, 238, 253], [215, 147, 172, 240, 175, 255, 238, 253], [216, 148, 173, 240, 176, 255, 238, 253 + ], + [217, 148, 173, 240, 176, 255, 238, 253], [218, 149, 173, 241, 177, 255, 239, 253], [218, 149, 173, 241, 178, 255, 239, 253 + ], + [219, 150, 174, 241, 179, 255, 239, 253], [219, 151, 174, 241, 179, 255, 239, 253], [220, 152, 175, 242, 180, 255, 240, 253 + ], + [221, 152, 175, 242, 180, 255, 240, 253], [222, 153, 176, 242, 181, 255, 240, 253], [222, 153, 176, 242, 181, 255, 240, 253 + ], + [223, 154, 177, 243, 182, 255, 240, 253], [223, 154, 177, 243, 182, 255, 240, 253], [224, 155, 178, 244, 183, 255, 241, 253 + ], + [224, 155, 178, 244, 183, 255, 241, 253], [225, 156, 178, 244, 184, 255, 241, 253], [225, 157, 178, 244, 184, 255, 241, 253 + ], + [226, 158, 179, 244, 185, 255, 242, 253], [227, 158, 179, 244, 185, 255, 242, 253], [228, 159, 180, 245, 186, 255, 242, 253 + ], + [228, 159, 180, 245, 186, 255, 242, 253], [229, 160, 181, 245, 187, 255, 242, 253], [229, 160, 181, 245, 187, 255, 242, 253 + ], + [230, 161, 182, 246, 188, 255, 243, 253], [230, 162, 182, 246, 188, 255, 243, 253], [231, 163, 183, 246, 189, 255, 243, 253 + ], + [231, 163, 183, 246, 189, 255, 243, 253], [232, 164, 184, 247, 190, 255, 243, 253], [232, 164, 184, 247, 190, 255, 243, 253 + ], + [233, 165, 185, 247, 191, 255, 244, 253], [233, 165, 185, 247, 191, 255, 244, 253], [234, 166, 185, 247, 192, 255, 244, 253 + ], + [234, 167, 185, 247, 192, 255, 244, 253], [235, 168, 186, 248, 193, 255, 244, 253], [235, 168, 186, 248, 193, 255, 244, 253 + ], + [236, 169, 187, 248, 194, 255, 244, 253], [236, 169, 187, 248, 194, 255, 244, 253], [236, 170, 188, 248, 195, 255, 245, 253 + ], + [236, 170, 188, 248, 195, 255, 245, 253], [237, 171, 189, 249, 196, 255, 245, 254], [237, 172, 189, 249, 196, 255, 245, 254 + ], + [238, 173, 190, 249, 197, 255, 245, 254], [238, 173, 190, 249, 197, 255, 245, 254], [239, 174, 191, 249, 198, 255, 245, 254 + ], + [239, 174, 191, 249, 198, 255, 245, 254], [240, 175, 192, 249, 199, 255, 246, 254], [240, 176, 192, 249, 199, 255, 246, 254 + ], + [240, 177, 193, 250, 200, 255, 246, 254], [240, 177, 193, 250, 200, 255, 246, 254], [241, 178, 194, 250, 201, 255, 246, 254 + ], + [241, 178, 194, 250, 201, 255, 246, 254], [242, 179, 195, 250, 202, 255, 246, 254], [242, 180, 195, 250, 202, 255, 246, 254 + ], + [242, 181, 196, 250, 203, 255, 247, 254], [242, 181, 196, 250, 203, 255, 247, 254], [243, 182, 197, 251, 204, 255, 247, 254 + ], + [243, 183, 197, 251, 204, 255, 247, 254], [244, 184, 198, 251, 205, 255, 247, 254], [244, 184, 198, 251, 205, 255, 247, 254 + ], + [244, 185, 199, 251, 206, 255, 247, 254], [244, 185, 199, 251, 206, 255, 247, 254], [245, 186, 200, 251, 207, 255, 247, 254 + ], + [245, 187, 200, 251, 207, 255, 247, 254], [246, 188, 201, 252, 207, 255, 248, 254], [246, 188, 201, 252, 207, 255, 248, 254 + ], + [246, 189, 202, 252, 208, 255, 248, 254], [246, 190, 202, 252, 208, 255, 248, 254], [247, 191, 203, 252, 209, 255, 248, 254 + ], + [247, 191, 203, 252, 209, 255, 248, 254], [247, 192, 204, 252, 210, 255, 248, 254], [247, 193, 204, 252, 210, 255, 248, 254 + ], + [248, 194, 205, 252, 211, 255, 248, 254], [248, 194, 205, 252, 211, 255, 248, 254], [248, 195, 206, 252, 212, 255, 249, 254 + ], + [248, 196, 206, 252, 212, 255, 249, 254], [249, 197, 207, 253, 213, 255, 249, 254], [249, 197, 207, 253, 213, 255, 249, 254 + ], + [249, 198, 208, 253, 214, 255, 249, 254], [249, 199, 209, 253, 214, 255, 249, 254], [250, 200, 210, 253, 215, 255, 249, 254 + ], + [250, 200, 210, 253, 215, 255, 249, 254], [250, 201, 211, 253, 215, 255, 249, 254], [250, 202, 211, 253, 215, 255, 249, 254 + ], + [250, 203, 212, 253, 216, 255, 249, 254], [250, 203, 212, 253, 216, 255, 249, 254], [251, 204, 213, 253, 217, 255, 250, 254 + ], + [251, 205, 213, 253, 217, 255, 250, 254], [251, 206, 214, 254, 218, 255, 250, 254], [251, 206, 215, 254, 218, 255, 250, 254 + ], + [252, 207, 216, 254, 219, 255, 250, 254], [252, 208, 216, 254, 219, 255, 250, 254], [252, 209, 217, 254, 220, 255, 250, 254 + ], + [252, 210, 217, 254, 220, 255, 250, 254], [252, 211, 218, 254, 221, 255, 250, 254], [252, 212, 218, 254, 221, 255, 250, 254 + ], + [253, 213, 219, 254, 222, 255, 250, 254], [253, 213, 220, 254, 222, 255, 250, 254], [253, 214, 221, 254, 223, 255, 250, 254 + ], + [253, 215, 221, 254, 223, 255, 250, 254], [253, 216, 222, 254, 224, 255, 251, 254], [253, 217, 223, 254, 224, 255, 251, 254 + ], + [253, 218, 224, 254, 225, 255, 251, 254], [253, 219, 224, 254, 225, 255, 251, 254], [254, 220, 225, 254, 225, 255, 251, 254 + ], + [254, 221, 226, 254, 225, 255, 251, 254], [254, 222, 227, 255, 226, 255, 251, 254], [254, 223, 227, 255, 226, 255, 251, 254 + ], + [254, 224, 228, 255, 227, 255, 251, 254], [254, 225, 229, 255, 227, 255, 251, 254], [254, 226, 230, 255, 228, 255, 251, 254 + ], + [254, 227, 230, 255, 229, 255, 251, 254], [255, 228, 231, 255, 230, 255, 251, 254], [255, 229, 232, 255, 230, 255, 251, 254 + ], + [255, 230, 233, 255, 231, 255, 252, 254], [255, 231, 234, 255, 231, 255, 252, 254], [255, 232, 235, 255, 232, 255, 252, 254 + ], + [255, 233, 236, 255, 232, 255, 252, 254], [255, 235, 237, 255, 233, 255, 252, 254], [255, 236, 238, 255, 234, 255, 252, 254 + ], + [255, 238, 240, 255, 235, 255, 252, 255], [255, 239, 241, 255, 235, 255, 252, 254], [255, 241, 243, 255, 236, 255, 252, 254 + ], + [255, 243, 245, 255, 237, 255, 252, 254], [255, 246, 247, 255, 239, 255, 253, 255], }; /* Array indices are identical to previously-existing INTRAMODECONTEXTNODES. */ - public static readonly sbyte[] IntraModeTree = new sbyte[] - { + public static readonly sbyte[] IntraModeTree = + [ -(sbyte)PredictionMode.DcPred, 2, /* 0 = DC_NODE */ -(sbyte)PredictionMode.TmPred, 4, /* 1 = TM_NODE */ -(sbyte)PredictionMode.VPred, 6, /* 2 = V_NODE */ @@ -1410,30 +1325,30 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 -(sbyte)PredictionMode.D45Pred, 14, /* 6 = D45_NODE */ -(sbyte)PredictionMode.D63Pred, 16, /* 7 = D63_NODE */ -(sbyte)PredictionMode.D153Pred, -(sbyte)PredictionMode.D207Pred /* 8 = D153_NODE */ - }; + ]; - public static readonly sbyte[] InterModeTree = new sbyte[] - { + public static readonly sbyte[] InterModeTree = + [ -((sbyte)PredictionMode.ZeroMv - (sbyte)PredictionMode. NearestMv), 2, -((sbyte)PredictionMode.NearestMv - (sbyte)PredictionMode.NearestMv), 4, -((sbyte)PredictionMode.NearMv - (sbyte)PredictionMode.NearestMv), -((sbyte)PredictionMode.NewMv - (sbyte)PredictionMode.NearestMv) - }; + ]; - public static readonly sbyte[] PartitionTree = new sbyte[] - { + public static readonly sbyte[] PartitionTree = + [ -(sbyte)PartitionType.PartitionNone, 2, -(sbyte)PartitionType.PartitionHorz, 4, -(sbyte)PartitionType.PartitionVert, -(sbyte)PartitionType.PartitionSplit - }; + ]; - public static readonly sbyte[] SwitchableInterpTree = new sbyte[] - { + public static readonly sbyte[] SwitchableInterpTree = + [ -Constants.EightTap, 2, -Constants.EightTapSmooth, -Constants.EightTapSharp - }; + ]; - public static readonly sbyte[] SegmentTree = new sbyte[] - { + public static readonly sbyte[] SegmentTree = + [ 2, 4, 6, 8, 10, 12, 0, -1, -2, -3, -4, -5, -6, -7 - }; + ]; // MV Ref @@ -1442,8 +1357,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // adding 9 for each intra block, 3 for each zero mv and 1 for each new // motion vector. This single number is then converted into a context // with a single lookup ( CounterToContext ). - public static readonly int[] Mode2Counter = new int[] - { + public static readonly int[] Mode2Counter = + [ 9, // DC_PRED 9, // V_PRED 9, // H_PRED @@ -1457,14 +1372,14 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 0, // NEARESTMV 0, // NEARMV 3, // ZEROMV - 1, // NEWMV - }; + 1 // NEWMV + ]; // There are 3^3 different combinations of 3 counts that can be either 0,1 or // 2. However the actual count can never be greater than 2 so the highest // counter we need is 18. 9 is an invalid counter that's never used. - public static readonly MotionVectorContext[] CounterToContext = new MotionVectorContext[] - { + public static readonly MotionVectorContext[] CounterToContext = + [ MotionVectorContext.BothPredicted, // 0 MotionVectorContext.NewPlusNonIntra, // 1 MotionVectorContext.BothNew, // 2 @@ -1484,127 +1399,153 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 MotionVectorContext.InvalidCase, // 16 MotionVectorContext.InvalidCase, // 17 MotionVectorContext.BothIntra // 18 - }; + ]; public static readonly Position[][] MvRefBlocks = new Position[][] { // 4X4 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, -1 ), new Position( -2, 0 ), new Position( 0, -2 ), new Position( -2, -1 ), new Position( -1, -2 ), - new Position( -2, -2 ) }, + new Position( -2, -2 ) + ], // 4x8 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, -1 ), new Position( -2, 0 ), new Position( 0, -2 ), new Position( -2, -1 ), new Position( -1, -2 ), - new Position( -2, -2 ) }, + new Position( -2, -2 ) + ], // 8x4 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, -1 ), new Position( -2, 0 ), new Position( 0, -2 ), new Position( -2, -1 ), new Position( -1, -2 ), - new Position( -2, -2 ) }, + new Position( -2, -2 ) + ], // 8X8 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, -1 ), new Position( -2, 0 ), new Position( 0, -2 ), new Position( -2, -1 ), new Position( -1, -2 ), - new Position( -2, -2 ) }, + new Position( -2, -2 ) + ], // 8x16 - new Position[] { new Position( 0, -1 ), + [ + new Position( 0, -1 ), new Position( -1, 0 ), new Position( 1, -1 ), new Position( -1, -1 ), new Position( 0, -2 ), new Position( -2, 0 ), new Position( -2, -1 ), - new Position( -1, -2 ) }, + new Position( -1, -2 ) + ], // 16x8 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, 1 ), new Position( -1, -1 ), new Position( -2, 0 ), new Position( 0, -2 ), new Position( -1, -2 ), - new Position( -2, -1 ) }, + new Position( -2, -1 ) + ], // 16X16 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, 1 ), new Position( 1, -1 ), new Position( -1, -1 ), new Position( -3, 0 ), new Position( 0, -3 ), - new Position( -3, -3 ) }, + new Position( -3, -3 ) + ], // 16x32 - new Position[] { new Position( 0, -1 ), + [ + new Position( 0, -1 ), new Position( -1, 0 ), new Position( 2, -1 ), new Position( -1, -1 ), new Position( -1, 1 ), new Position( 0, -3 ), new Position( -3, 0 ), - new Position( -3, -3 ) }, + new Position( -3, -3 ) + ], // 32x16 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, 2 ), new Position( -1, -1 ), new Position( 1, -1 ), new Position( -3, 0 ), new Position( 0, -3 ), - new Position( -3, -3 ) }, + new Position( -3, -3 ) + ], // 32X32 - new Position[] { new Position( -1, 1 ), + [ + new Position( -1, 1 ), new Position( 1, -1 ), new Position( -1, 2 ), new Position( 2, -1 ), new Position( -1, -1 ), new Position( -3, 0 ), new Position( 0, -3 ), - new Position( -3, -3 ) }, + new Position( -3, -3 ) + ], // 32x64 - new Position[] { new Position( 0, -1 ), + [ + new Position( 0, -1 ), new Position( -1, 0 ), new Position( 4, -1 ), new Position( -1, 2 ), new Position( -1, -1 ), new Position( 0, -3 ), new Position( -3, 0 ), - new Position( 2, -1 ) }, + new Position( 2, -1 ) + ], // 64x32 - new Position[] { new Position( -1, 0 ), + [ + new Position( -1, 0 ), new Position( 0, -1 ), new Position( -1, 4 ), new Position( 2, -1 ), new Position( -1, -1 ), new Position( -3, 0 ), new Position( 0, -3 ), - new Position( -1, 2 ) }, + new Position( -1, 2 ) + ], // 64x64 - new Position[] { new Position( -1, 3 ), + [ + new Position( -1, 3 ), new Position( 3, -1 ), new Position( -1, 4 ), new Position( 4, -1 ), new Position( -1, -1 ), new Position( -1, 0 ), new Position( 0, -1 ), - new Position( -1, 6 ) } + new Position( -1, 6 ) + ] }; } } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Prob.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Prob.cs index 98e841ce7..ca6fa351a 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Prob.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Prob.cs @@ -46,10 +46,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } // MODE_MV_MAX_UPDATE_FACTOR (128) * count / MODE_MV_COUNT_SAT; - private static readonly uint[] CountToUpdateFactor = - { + private static readonly uint[] _countToUpdateFactor = + [ 0, 6, 12, 19, 25, 32, 38, 44, 51, 57, 64, 70, 76, 83, 89, 96, 102, 108, 115, 121, 128 - }; + ]; private const int ModeMvCountSat = 20; @@ -62,7 +62,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 } uint count = Math.Min(den, ModeMvCountSat); - uint factor = CountToUpdateFactor[(int)count]; + uint factor = _countToUpdateFactor[(int)count]; byte prob = GetProb(ct[0], den); return WeightedProb(preProb, prob, (int)factor); } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/QuantCommon.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/QuantCommon.cs index 6a0768802..3542c90c4 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/QuantCommon.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/QuantCommon.cs @@ -8,8 +8,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 public const int MaxQ = 255; public const int QindexBits = 8; - private static readonly short[] DcQlookup = - { + private static readonly short[] _dcQlookup = + [ 4, 8, 8, 9, 10, 11, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 23, 24, 25, 26, 26, 27, 28, 29, 30, 31, 32, 32, 33, 34, 35, 36, 37, 38, 38, 39, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 48, 49, 50, 51, 52, 53, 53, 54, 55, 56, 57, 57, 58, 59, 60, 61, 62, 62, 63, 64, 65, 66, 66, 67, 68, 69, 70, 70, 71, 72, @@ -22,10 +22,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 447, 454, 461, 467, 475, 482, 489, 497, 505, 513, 522, 530, 539, 549, 559, 569, 579, 590, 602, 614, 626, 640, 654, 668, 684, 700, 717, 736, 755, 775, 796, 819, 843, 869, 896, 925, 955, 988, 1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336 - }; + ]; - private static readonly short[] DcQlookup10 = - { + private static readonly short[] _dcQlookup10 = + [ 4, 9, 10, 13, 15, 17, 20, 22, 25, 28, 31, 34, 37, 40, 43, 47, 50, 53, 57, 60, 64, 68, 71, 75, 78, 82, 86, 90, 93, 97, 101, 105, 109, 113, 116, 120, 124, 128, 132, 136, 140, 143, 147, 151, 155, 159, 163, 166, 170, 174, 178, 182, 185, 189, 193, 197, 200, 204, 208, 212, 215, 219, 223, 226, 230, 233, 237, 241, @@ -39,10 +39,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 1692, 1717, 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929, 1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197, 2236, 2276, 2319, 2363, 2410, 2458, 2508, 2561, 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102, 3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953, 4089, 4236, 4394, 4559, 4737, 4929, 5130, 5347 - }; + ]; - private static readonly short[] DcQlookup12 = - { + private static readonly short[] _dcQlookup12 = + [ 4, 12, 18, 25, 33, 41, 50, 60, 70, 80, 91, 103, 115, 127, 140, 153, 166, 180, 194, 208, 222, 237, 251, 266, 281, 296, 312, 327, 343, 358, 374, 390, 405, 421, 437, 453, 469, 484, 500, 516, 532, 548, 564, 580, 596, 611, 627, 643, 659, 674, 690, 706, 721, 737, 752, 768, 783, 798, 814, 829, 844, 859, 874, 889, 904, @@ -58,10 +58,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 8214, 8352, 8492, 8635, 8788, 8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245, 10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409, 12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812, 16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387 - }; + ]; - private static readonly short[] AcQlookup = - { + private static readonly short[] _acQlookup = + [ 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, @@ -74,10 +74,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 729, 743, 757, 771, 786, 801, 816, 832, 848, 864, 881, 898, 915, 933, 951, 969, 988, 1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151, 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343, 1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567, 1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828 - }; + ]; - private static readonly short[] AcQlookup10 = - { + private static readonly short[] _acQlookup10 = + [ 4, 9, 11, 13, 16, 18, 21, 24, 27, 30, 33, 37, 40, 44, 48, 51, 55, 59, 63, 67, 71, 75, 79, 83, 88, 92, 96, 100, 105, 109, 114, 118, 122, 127, 131, 136, 140, 145, 149, 154, 158, 163, 168, 172, 177, 181, 186, 190, 195, 199, 204, 208, 213, 217, 222, 226, 231, 235, 240, 244, 249, 253, 258, 262, 267, 271, 275, 280, @@ -92,10 +92,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 3659, 3731, 3803, 3876, 3952, 4028, 4104, 4184, 4264, 4348, 4432, 4516, 4604, 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372, 5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268, 6388, 6512, 6640, 6768, 6900, 7036, 7172, 7312 - }; + ]; - private static readonly short[] AcQlookup12 = - { + private static readonly short[] _acQlookup12 = + [ 4, 13, 19, 27, 35, 44, 54, 64, 75, 87, 99, 112, 126, 139, 154, 168, 183, 199, 214, 230, 247, 263, 280, 297, 314, 331, 349, 366, 384, 402, 420, 438, 456, 475, 493, 511, 530, 548, 567, 586, 604, 623, 642, 660, 679, 698, 716, 735, 753, 772, 791, 809, 828, 846, 865, 884, 902, 920, 939, 957, 976, 994, 1012, 1030, @@ -111,15 +111,15 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 13565, 13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806, 16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414, 18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486, 21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070, 25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247 - }; + ]; public static short DcQuant(int qindex, int delta, BitDepth bitDepth) { switch (bitDepth) { - case BitDepth.Bits8: return DcQlookup[Math.Clamp(qindex + delta, 0, MaxQ)]; - case BitDepth.Bits10: return DcQlookup10[Math.Clamp(qindex + delta, 0, MaxQ)]; - case BitDepth.Bits12: return DcQlookup12[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits8: return _dcQlookup[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits10: return _dcQlookup10[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits12: return _dcQlookup12[Math.Clamp(qindex + delta, 0, MaxQ)]; default: Debug.Assert(false, "bitDepth should be Bits8, Bits10 or Bits12"); return -1; @@ -130,9 +130,9 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 { switch (bitDepth) { - case BitDepth.Bits8: return AcQlookup[Math.Clamp(qindex + delta, 0, MaxQ)]; - case BitDepth.Bits10: return AcQlookup10[Math.Clamp(qindex + delta, 0, MaxQ)]; - case BitDepth.Bits12: return AcQlookup12[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits8: return _acQlookup[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits10: return _acQlookup10[Math.Clamp(qindex + delta, 0, MaxQ)]; + case BitDepth.Bits12: return _acQlookup12[Math.Clamp(qindex + delta, 0, MaxQ)]; default: Debug.Assert(false, "bitDepth should be Bits8, Bits10 or Bits12"); return -1; diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/ReconIntra.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/ReconIntra.cs index 332d9754f..877469787 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/ReconIntra.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/ReconIntra.cs @@ -8,7 +8,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 internal static class ReconIntra { public static readonly TxType[] IntraModeToTxTypeLookup = - { + [ TxType.DctDct, // DC TxType.AdstDct, // V TxType.DctAdst, // H @@ -19,14 +19,14 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 TxType.DctAdst, // D207 TxType.AdstDct, // D63 TxType.AdstAdst // TM - }; + ]; private const int NeedLeft = 1 << 1; private const int NeedAbove = 1 << 2; private const int NeedAboveRight = 1 << 3; - private static ReadOnlySpan ExtendModes => new byte[] - { + private static ReadOnlySpan ExtendModes => + [ NeedAbove | NeedLeft, // DC NeedAbove, // V NeedLeft, // H @@ -37,123 +37,103 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 NeedLeft, // D207 NeedAboveRight, // D63 NeedLeft | NeedAbove // TM - }; + ]; private unsafe delegate void IntraPredFn(byte* dst, int stride, byte* above, byte* left); - private static readonly unsafe IntraPredFn[][] Pred = - { - new IntraPredFn[] { null, null, null, null }, - new IntraPredFn[] { VPredictor4x4, VPredictor8x8, VPredictor16x16, VPredictor32x32 }, - new IntraPredFn[] { HPredictor4x4, HPredictor8x8, HPredictor16x16, HPredictor32x32 }, - new IntraPredFn[] { D45Predictor4x4, D45Predictor8x8, D45Predictor16x16, D45Predictor32x32 }, - new IntraPredFn[] { D135Predictor4x4, D135Predictor8x8, D135Predictor16x16, D135Predictor32x32 }, - new IntraPredFn[] { D117Predictor4x4, D117Predictor8x8, D117Predictor16x16, D117Predictor32x32 }, - new IntraPredFn[] { D153Predictor4x4, D153Predictor8x8, D153Predictor16x16, D153Predictor32x32 }, - new IntraPredFn[] { D207Predictor4x4, D207Predictor8x8, D207Predictor16x16, D207Predictor32x32 }, - new IntraPredFn[] { D63Predictor4x4, D63Predictor8x8, D63Predictor16x16, D63Predictor32x32 }, - new IntraPredFn[] { TmPredictor4x4, TmPredictor8x8, TmPredictor16x16, TmPredictor32x32 } - }; + private static readonly unsafe IntraPredFn[][] _pred = + [ + [null, null, null, null], + [VPredictor4X4, VPredictor8X8, VPredictor16X16, VPredictor32X32], + [HPredictor4X4, HPredictor8X8, HPredictor16X16, HPredictor32X32], + [D45Predictor4X4, D45Predictor8X8, D45Predictor16X16, D45Predictor32X32], + [D135Predictor4X4, D135Predictor8X8, D135Predictor16X16, D135Predictor32X32], + [D117Predictor4X4, D117Predictor8X8, D117Predictor16X16, D117Predictor32X32], + [D153Predictor4X4, D153Predictor8X8, D153Predictor16X16, D153Predictor32X32], + [D207Predictor4X4, D207Predictor8X8, D207Predictor16X16, D207Predictor32X32], + [D63Predictor4X4, D63Predictor8X8, D63Predictor16X16, D63Predictor32X32], + [TmPredictor4X4, TmPredictor8X8, TmPredictor16X16, TmPredictor32X32] + ]; - private static readonly unsafe IntraPredFn[][][] DcPred = - { - new[] - { - new IntraPredFn[] - { - Dc128Predictor4x4, Dc128Predictor8x8, Dc128Predictor16x16, Dc128Predictor32x32 - }, - new IntraPredFn[] - { - DcTopPredictor4x4, DcTopPredictor8x8, DcTopPredictor16x16, DcTopPredictor32x32 - } - }, - new[] - { - new IntraPredFn[] - { - DcLeftPredictor4x4, DcLeftPredictor8x8, DcLeftPredictor16x16, DcLeftPredictor32x32 - }, - new IntraPredFn[] { DcPredictor4x4, DcPredictor8x8, DcPredictor16x16, DcPredictor32x32 } - } - }; + private static readonly unsafe IntraPredFn[][][] _dcPred = + [ + [ + [ + Dc128Predictor4X4, Dc128Predictor8X8, Dc128Predictor16X16, Dc128Predictor32X32 + ], + [ + DcTopPredictor4X4, DcTopPredictor8X8, DcTopPredictor16X16, DcTopPredictor32X32 + ] + ], + [ + [ + DcLeftPredictor4X4, DcLeftPredictor8X8, DcLeftPredictor16X16, DcLeftPredictor32X32 + ], + [DcPredictor4X4, DcPredictor8X8, DcPredictor16X16, DcPredictor32X32] + ] + ]; private unsafe delegate void IntraHighPredFn(ushort* dst, int stride, ushort* above, ushort* left, int bd); - private static readonly unsafe IntraHighPredFn[][] PredHigh = - { - new IntraHighPredFn[] { null, null, null, null }, - new IntraHighPredFn[] - { - HighbdVPredictor4x4, HighbdVPredictor8x8, HighbdVPredictor16x16, HighbdVPredictor32x32 - }, - new IntraHighPredFn[] - { - HighbdHPredictor4x4, HighbdHPredictor8x8, HighbdHPredictor16x16, HighbdHPredictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD45Predictor4x4, HighbdD45Predictor8x8, HighbdD45Predictor16x16, HighbdD45Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD135Predictor4x4, HighbdD135Predictor8x8, HighbdD135Predictor16x16, - HighbdD135Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD117Predictor4x4, HighbdD117Predictor8x8, HighbdD117Predictor16x16, - HighbdD117Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD153Predictor4x4, HighbdD153Predictor8x8, HighbdD153Predictor16x16, - HighbdD153Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD207Predictor4x4, HighbdD207Predictor8x8, HighbdD207Predictor16x16, - HighbdD207Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdD63Predictor4x4, HighbdD63Predictor8x8, HighbdD63Predictor16x16, HighbdD63Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdTmPredictor4x4, HighbdTmPredictor8x8, HighbdTmPredictor16x16, HighbdTmPredictor32x32 - } - }; + private static readonly unsafe IntraHighPredFn[][] _predHigh = + [ + [null, null, null, null], + [ + HighbdVPredictor4X4, HighbdVPredictor8X8, HighbdVPredictor16X16, HighbdVPredictor32X32 + ], + [ + HighbdHPredictor4X4, HighbdHPredictor8X8, HighbdHPredictor16X16, HighbdHPredictor32X32 + ], + [ + HighbdD45Predictor4X4, HighbdD45Predictor8X8, HighbdD45Predictor16X16, HighbdD45Predictor32X32 + ], + [ + HighbdD135Predictor4X4, HighbdD135Predictor8X8, HighbdD135Predictor16X16, + HighbdD135Predictor32X32 + ], + [ + HighbdD117Predictor4X4, HighbdD117Predictor8X8, HighbdD117Predictor16X16, + HighbdD117Predictor32X32 + ], + [ + HighbdD153Predictor4X4, HighbdD153Predictor8X8, HighbdD153Predictor16X16, + HighbdD153Predictor32X32 + ], + [ + HighbdD207Predictor4X4, HighbdD207Predictor8X8, HighbdD207Predictor16X16, + HighbdD207Predictor32X32 + ], + [ + HighbdD63Predictor4X4, HighbdD63Predictor8X8, HighbdD63Predictor16X16, HighbdD63Predictor32X32 + ], + [ + HighbdTmPredictor4X4, HighbdTmPredictor8X8, HighbdTmPredictor16X16, HighbdTmPredictor32X32 + ] + ]; - private static readonly unsafe IntraHighPredFn[][][] DcPredHigh = - { - new[] - { - new IntraHighPredFn[] - { - HighbdDc128Predictor4x4, HighbdDc128Predictor8x8, HighbdDc128Predictor16x16, - HighbdDc128Predictor32x32 - }, - new IntraHighPredFn[] - { - HighbdDcTopPredictor4x4, HighbdDcTopPredictor8x8, HighbdDcTopPredictor16x16, - HighbdDcTopPredictor32x32 - } - }, - new[] - { - new IntraHighPredFn[] - { - HighbdDcLeftPredictor4x4, HighbdDcLeftPredictor8x8, HighbdDcLeftPredictor16x16, - HighbdDcLeftPredictor32x32 - }, - new IntraHighPredFn[] - { - HighbdDcPredictor4x4, HighbdDcPredictor8x8, HighbdDcPredictor16x16, - HighbdDcPredictor32x32 - } - } - }; + private static readonly unsafe IntraHighPredFn[][][] _dcPredHigh = + [ + [ + [ + HighbdDc128Predictor4X4, HighbdDc128Predictor8X8, HighbdDc128Predictor16X16, + HighbdDc128Predictor32X32 + ], + [ + HighbdDcTopPredictor4X4, HighbdDcTopPredictor8X8, HighbdDcTopPredictor16X16, + HighbdDcTopPredictor32X32 + ] + ], + [ + [ + HighbdDcLeftPredictor4X4, HighbdDcLeftPredictor8X8, HighbdDcLeftPredictor16X16, + HighbdDcLeftPredictor32X32 + ], + [ + HighbdDcPredictor4X4, HighbdDcPredictor8X8, HighbdDcPredictor16X16, + HighbdDcPredictor32X32 + ] + ] + ]; private static unsafe void BuildIntraPredictorsHigh( ref MacroBlockD xd, @@ -371,11 +351,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Predict if (mode == PredictionMode.DcPred) { - DcPredHigh[leftAvailable][upAvailable][(int)txSize](dst, dstStride, constAboveRow, leftCol, xd.Bd); + _dcPredHigh[leftAvailable][upAvailable][(int)txSize](dst, dstStride, constAboveRow, leftCol, xd.Bd); } else { - PredHigh[(int)mode][(int)txSize](dst, dstStride, constAboveRow, leftCol, xd.Bd); + _predHigh[(int)mode][(int)txSize](dst, dstStride, constAboveRow, leftCol, xd.Bd); } } @@ -588,11 +568,11 @@ namespace Ryujinx.Graphics.Nvdec.Vp9 // Predict if (mode == PredictionMode.DcPred) { - DcPred[leftAvailable][upAvailable][(int)txSize](dst, dstStride, constAboveRow, leftCol); + _dcPred[leftAvailable][upAvailable][(int)txSize](dst, dstStride, constAboveRow, leftCol); } else { - Pred[(int)mode][(int)txSize](dst, dstStride, constAboveRow, leftCol); + _pred[(int)mode][(int)txSize](dst, dstStride, constAboveRow, leftCol); } } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs index 9d1dd1d27..cee162ab7 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/BlockSize.cs @@ -2,19 +2,19 @@ { internal enum BlockSize { - Block4x4, - Block4x8, - Block8x4, - Block8x8, - Block8x16, - Block16x8, - Block16x16, - Block16x32, - Block32x16, - Block32x32, - Block32x64, - Block64x32, - Block64x64, + Block4X4, + Block4X8, + Block8X4, + Block8X8, + Block8X16, + Block16X8, + Block16X16, + Block16X32, + Block32X16, + Block32X32, + Block32X64, + Block64X32, + Block64X64, BlockSizes, BlockInvalid = BlockSizes } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs index aede4452b..4aea49425 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/LoopFilterMask.cs @@ -15,10 +15,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types { public Array4 LeftY; public Array4 AboveY; - public ulong Int4x4Y; + public ulong Int4X4Y; public Array4 LeftUv; public Array4 AboveUv; - public ushort Int4x4Uv; + public ushort Int4X4Uv; public Array64 LflY; } } \ No newline at end of file diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs index 52ac48ac0..39f545a76 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ModeInfo.cs @@ -29,12 +29,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types public PredictionMode GetYMode(int block) { - return SbType < BlockSize.Block8x8 ? Bmi[block].Mode : Mode; + return SbType < BlockSize.Block8X8 ? Bmi[block].Mode : Mode; } public TxSize GetUvTxSize(ref MacroBlockDPlane pd) { - Debug.Assert(SbType < BlockSize.Block8x8 || + Debug.Assert(SbType < BlockSize.Block8X8 || Luts.SsSizeLookup[(int)SbType][pd.SubsamplingX][pd.SubsamplingY] != BlockSize.BlockInvalid); return Luts.UvTxsizeLookup[(int)SbType][(int)TxSize][pd.SubsamplingX][pd.SubsamplingY]; } @@ -49,17 +49,17 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types return RefFrame[1] > Constants.IntraFrame; } - private static readonly int[][] IdxNColumnToSubblock = - { - new[] { 1, 2 }, new[] { 1, 3 }, new[] { 3, 2 }, new[] { 3, 3 } - }; + private static readonly int[][] _idxNColumnToSubblock = + [ + [1, 2], [1, 3], [3, 2], [3, 3] + ]; // This function returns either the appropriate sub block or block's mv // on whether the block_size < 8x8 and we have check_sub_blocks set. public Mv GetSubBlockMv(int whichMv, int searchCol, int blockIdx) { - return blockIdx >= 0 && SbType < BlockSize.Block8x8 - ? Bmi[IdxNColumnToSubblock[blockIdx][searchCol == 0 ? 1 : 0]].Mv[whichMv] + return blockIdx >= 0 && SbType < BlockSize.Block8X8 + ? Bmi[_idxNColumnToSubblock[blockIdx][searchCol == 0 ? 1 : 0]].Mv[whichMv] : Mv[whichMv]; } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs index 10bd40e7e..6e0accfb3 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Mv.cs @@ -10,8 +10,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types public short Row; public short Col; - private static ReadOnlySpan LogInBase2 => new byte[] - { + private static ReadOnlySpan LogInBase2 => + [ 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, @@ -42,12 +42,12 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10 - }; + ]; public bool UseHp() { - const int kMvRefThresh = 64; // Threshold for use of high-precision 1/8 mv - return Math.Abs(Row) < kMvRefThresh && Math.Abs(Col) < kMvRefThresh; + const int KMvRefThresh = 64; // Threshold for use of high-precision 1/8 mv + return Math.Abs(Row) < KMvRefThresh && Math.Abs(Col) < KMvRefThresh; } public static bool JointVertical(MvJointType type) diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs index fc2c42b86..212571311 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/ScaleFactors.cs @@ -38,96 +38,85 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types int h, int bd); - private static readonly unsafe ConvolveFn[][][] PredictX16Y16 = - { - new[] - { - new ConvolveFn[] { ConvolveCopy, ConvolveAvg }, - new ConvolveFn[] { Convolve8Vert, Convolve8AvgVert } - }, - new[] - { - new ConvolveFn[] { Convolve8Horiz, Convolve8AvgHoriz }, - new ConvolveFn[] { Convolve8, Convolve8Avg } - } - }; + private static readonly unsafe ConvolveFn[][][] _predictX16Y16 = + [ + [ + [ConvolveCopy, ConvolveAvg], + [Convolve8Vert, Convolve8AvgVert] + ], + [ + [Convolve8Horiz, Convolve8AvgHoriz], + [Convolve8, Convolve8Avg] + ] + ]; - private static readonly unsafe ConvolveFn[][][] PredictX16 = - { - new[] - { - new ConvolveFn[] { ScaledVert, ScaledAvgVert }, new ConvolveFn[] { ScaledVert, ScaledAvgVert } - }, - new[] { new ConvolveFn[] { Scaled2D, ScaledAvg2D }, new ConvolveFn[] { Scaled2D, ScaledAvg2D } } - }; + private static readonly unsafe ConvolveFn[][][] _predictX16 = + [ + [ + [ScaledVert, ScaledAvgVert], [ScaledVert, ScaledAvgVert] + ], + [[Scaled2D, ScaledAvg2D], [Scaled2D, ScaledAvg2D]] + ]; - private static readonly unsafe ConvolveFn[][][] PredictY16 = - { - new[] { new ConvolveFn[] { ScaledHoriz, ScaledAvgHoriz }, new ConvolveFn[] { Scaled2D, ScaledAvg2D } }, - new[] { new ConvolveFn[] { ScaledHoriz, ScaledAvgHoriz }, new ConvolveFn[] { Scaled2D, ScaledAvg2D } } - }; + private static readonly unsafe ConvolveFn[][][] _predictY16 = + [ + [[ScaledHoriz, ScaledAvgHoriz], [Scaled2D, ScaledAvg2D]], + [[ScaledHoriz, ScaledAvgHoriz], [Scaled2D, ScaledAvg2D]] + ]; - private static readonly unsafe ConvolveFn[][][] Predict = - { - new[] { new ConvolveFn[] { Scaled2D, ScaledAvg2D }, new ConvolveFn[] { Scaled2D, ScaledAvg2D } }, - new[] { new ConvolveFn[] { Scaled2D, ScaledAvg2D }, new ConvolveFn[] { Scaled2D, ScaledAvg2D } } - }; + private static readonly unsafe ConvolveFn[][][] _predict = + [ + [[Scaled2D, ScaledAvg2D], [Scaled2D, ScaledAvg2D]], + [[Scaled2D, ScaledAvg2D], [Scaled2D, ScaledAvg2D]] + ]; - private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictX16Y16 = - { - new[] - { - new HighbdConvolveFn[] { HighbdConvolveCopy, HighbdConvolveAvg }, - new HighbdConvolveFn[] { HighbdConvolve8Vert, HighbdConvolve8AvgVert } - }, - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - } - }; + private static readonly unsafe HighbdConvolveFn[][][] _highbdPredictX16Y16 = + [ + [ + [HighbdConvolveCopy, HighbdConvolveAvg], + [HighbdConvolve8Vert, HighbdConvolve8AvgVert] + ], + [ + [HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz], + [HighbdConvolve8, HighbdConvolve8Avg] + ] + ]; - private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictX16 = - { - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8Vert, HighbdConvolve8AvgVert }, - new HighbdConvolveFn[] { HighbdConvolve8Vert, HighbdConvolve8AvgVert } - }, - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - } - }; + private static readonly unsafe HighbdConvolveFn[][][] _highbdPredictX16 = + [ + [ + [HighbdConvolve8Vert, HighbdConvolve8AvgVert], + [HighbdConvolve8Vert, HighbdConvolve8AvgVert] + ], + [ + [HighbdConvolve8, HighbdConvolve8Avg], + [HighbdConvolve8, HighbdConvolve8Avg] + ] + ]; - private static readonly unsafe HighbdConvolveFn[][][] HighbdPredictY16 = - { - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - }, - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - } - }; + private static readonly unsafe HighbdConvolveFn[][][] _highbdPredictY16 = + [ + [ + [HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz], + [HighbdConvolve8, HighbdConvolve8Avg] + ], + [ + [HighbdConvolve8Horiz, HighbdConvolve8AvgHoriz], + [HighbdConvolve8, HighbdConvolve8Avg] + ] + ]; - private static readonly unsafe HighbdConvolveFn[][][] HighbdPredict = - { - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - }, - new[] - { - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg }, - new HighbdConvolveFn[] { HighbdConvolve8, HighbdConvolve8Avg } - } - }; + private static readonly unsafe HighbdConvolveFn[][][] _highbdPredict = + [ + [ + [HighbdConvolve8, HighbdConvolve8Avg], + [HighbdConvolve8, HighbdConvolve8Avg] + ], + [ + [HighbdConvolve8, HighbdConvolve8Avg], + [HighbdConvolve8, HighbdConvolve8Avg] + ] + ]; public int XScaleFp; // Horizontal fixed point scale factor public int YScaleFp; // Vertical fixed point scale factor @@ -166,13 +155,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (YStepQ4 == 16) { // No scaling in either direction. - PredictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, + _predictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h); } else { // No scaling in x direction. Must always scale in the y direction. - PredictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, + _predictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h); } } @@ -181,13 +170,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (YStepQ4 == 16) { // No scaling in the y direction. Must always scale in the x direction. - PredictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, + _predictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h); } else { // Must always scale in both directions. - Predict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h); + _predict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h); } } } @@ -215,13 +204,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (YStepQ4 == 16) { // No scaling in either direction. - HighbdPredictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, + _highbdPredictX16Y16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd); } else { // No scaling in x direction. Must always scale in the y direction. - HighbdPredictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, + _highbdPredictX16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd); } } @@ -230,13 +219,13 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (YStepQ4 == 16) { // No scaling in the y direction. Must always scale in the x direction. - HighbdPredictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, + _highbdPredictY16[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd); } else { // Must always scale in both directions. - HighbdPredict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, + _highbdPredict[horiz][vert][avg](src, srcStride, dst, dstStride, kernel, subpelX, xs, subpelY, ys, w, h, bd); } } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs index adfd8e31e..726476d96 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Segmentation.cs @@ -16,8 +16,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types public const int PredictionProbs = 3; - private static readonly int[] SegFeatureDataSigned = { 1, 1, 0, 0 }; - private static readonly int[] SegFeatureDataMax = { QuantCommon.MaxQ, Vp9.LoopFilter.MaxLoopFilter, 3, 0 }; + private static readonly int[] _segFeatureDataSigned = [1, 1, 0, 0]; + private static readonly int[] _segFeatureDataMax = [QuantCommon.MaxQ, Vp9.LoopFilter.MaxLoopFilter, 3, 0]; public bool Enabled; public bool UpdateMap; @@ -48,21 +48,21 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types internal static int FeatureDataMax(SegLvlFeatures featureId) { - return SegFeatureDataMax[(int)featureId]; + return _segFeatureDataMax[(int)featureId]; } internal static int IsSegFeatureSigned(SegLvlFeatures featureId) { - return SegFeatureDataSigned[(int)featureId]; + return _segFeatureDataSigned[(int)featureId]; } internal void SetSegData(int segmentId, SegLvlFeatures featureId, int segData) { - Debug.Assert(segData <= SegFeatureDataMax[(int)featureId]); + Debug.Assert(segData <= _segFeatureDataMax[(int)featureId]); if (segData < 0) { - Debug.Assert(SegFeatureDataSigned[(int)featureId] != 0); - Debug.Assert(-segData <= SegFeatureDataMax[(int)featureId]); + Debug.Assert(_segFeatureDataSigned[(int)featureId] != 0); + Debug.Assert(-segData <= _segFeatureDataMax[(int)featureId]); } FeatureData[segmentId][(int)featureId] = (short)segData; diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs index 94db0669c..33741f85f 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Surface.cs @@ -65,23 +65,23 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types public Surface(int width, int height) { - const int border = 32; - const int ssX = 1; - const int ssY = 1; - const bool highbd = false; + const int Border = 32; + const int SsX = 1; + const int SsY = 1; + const bool Highbd = false; int alignedWidth = (width + 7) & ~7; int alignedHeight = (height + 7) & ~7; - int yStride = (alignedWidth + (2 * border) + 31) & ~31; - int yplaneSize = (alignedHeight + (2 * border)) * yStride; - int uvWidth = alignedWidth >> ssX; - int uvHeight = alignedHeight >> ssY; - int uvStride = yStride >> ssX; - int uvBorderW = border >> ssX; - int uvBorderH = border >> ssY; + int yStride = (alignedWidth + (2 * Border) + 31) & ~31; + int yplaneSize = (alignedHeight + (2 * Border)) * yStride; + int uvWidth = alignedWidth >> SsX; + int uvHeight = alignedHeight >> SsY; + int uvStride = yStride >> SsX; + int uvBorderW = Border >> SsX; + int uvBorderH = Border >> SsY; int uvplaneSize = (uvHeight + (2 * uvBorderH)) * uvStride; - int frameSize = (highbd ? 2 : 1) * (yplaneSize + (2 * uvplaneSize)); + int frameSize = (Highbd ? 2 : 1) * (yplaneSize + (2 * uvplaneSize)); nint pointer = Marshal.AllocHGlobal(frameSize); _pointer = pointer; @@ -90,8 +90,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types AlignedWidth = alignedWidth; AlignedHeight = alignedHeight; Stride = yStride; - UvWidth = (width + ssX) >> ssX; - UvHeight = (height + ssY) >> ssY; + UvWidth = (width + SsX) >> SsX; + UvHeight = (height + SsY) >> SsY; UvAlignedWidth = uvWidth; UvAlignedHeight = uvHeight; UvStride = uvStride; @@ -101,7 +101,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types return new ArrayPtr(pointer + start + border, size - border); } - YBuffer = NewPlane(0, yplaneSize, (border * yStride) + border); + YBuffer = NewPlane(0, yplaneSize, (Border * yStride) + Border); UBuffer = NewPlane(yplaneSize, uvplaneSize, (uvBorderH * uvStride) + uvBorderW); VBuffer = NewPlane(yplaneSize + uvplaneSize, uvplaneSize, (uvBorderH * uvStride) + uvBorderW); } @@ -146,8 +146,8 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (cb != null) { - const int alignAddrExtraSize = 31; - ulong externalFrameSize = frameSize + alignAddrExtraSize; + const int AlignAddrExtraSize = 31; + ulong externalFrameSize = frameSize + AlignAddrExtraSize; Debug.Assert(!fb.IsNull); diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs index a0329d6c7..d6a4fb843 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxMode.cs @@ -2,10 +2,10 @@ { public enum TxMode { - Only4x4, // Only 4x4 transform used - Allow8x8, // Allow block transform size up to 8x8 - Allow16x16, // Allow block transform size up to 16x16 - Allow32x32, // Allow block transform size up to 32x32 + Only4X4, // Only 4x4 transform used + Allow8X8, // Allow block transform size up to 8x8 + Allow16X16, // Allow block transform size up to 16x16 + Allow32X32, // Allow block transform size up to 32x32 TxModeSelect, // Transform specified for each block TxModes } diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs index a58154fe6..72908a00c 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/TxSize.cs @@ -2,10 +2,10 @@ { public enum TxSize { - Tx4x4, // 4x4 transform - Tx8x8, // 8x8 transform - Tx16x16, // 16x16 transform - Tx32x32, // 32x32 transform + Tx4X4, // 4x4 transform + Tx8X8, // 8x8 transform + Tx16X16, // 16x16 transform + Tx32X32, // 32x32 transform TxSizes } } \ No newline at end of file diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs index aa567927b..5669e8574 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Common.cs @@ -845,30 +845,30 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types if (TxMode == TxMode.TxModeSelect) { - Array1> branchCt8x8P = new(); - Array2> branchCt16x16P = new(); - Array3> branchCt32x32P = new(); + Array1> branchCt8X8P = new(); + Array2> branchCt16X16P = new(); + Array3> branchCt32X32P = new(); for (int i = 0; i < EntropyMode.TxSizeContexts; ++i) { - EntropyMode.TxCountsToBranchCounts8x8(counts.Tx8x8[i].AsSpan(), ref branchCt8x8P); + EntropyMode.TxCountsToBranchCounts8X8(counts.Tx8x8[i].AsSpan(), ref branchCt8X8P); for (int j = 0; j < (int)TxSize.TxSizes - 3; ++j) { - fc.Tx8x8Prob[i][j] = Prob.ModeMvMergeProbs(preFc.Tx8x8Prob[i][j], ref branchCt8x8P[j]); + fc.Tx8x8Prob[i][j] = Prob.ModeMvMergeProbs(preFc.Tx8x8Prob[i][j], ref branchCt8X8P[j]); } - EntropyMode.TxCountsToBranchCounts16x16(counts.Tx16x16[i].AsSpan(), ref branchCt16x16P); + EntropyMode.TxCountsToBranchCounts16X16(counts.Tx16x16[i].AsSpan(), ref branchCt16X16P); for (int j = 0; j < (int)TxSize.TxSizes - 2; ++j) { fc.Tx16x16Prob[i][j] = - Prob.ModeMvMergeProbs(preFc.Tx16x16Prob[i][j], ref branchCt16x16P[j]); + Prob.ModeMvMergeProbs(preFc.Tx16x16Prob[i][j], ref branchCt16X16P[j]); } - EntropyMode.TxCountsToBranchCounts32x32(counts.Tx32x32[i].AsSpan(), ref branchCt32x32P); + EntropyMode.TxCountsToBranchCounts32X32(counts.Tx32x32[i].AsSpan(), ref branchCt32X32P); for (int j = 0; j < (int)TxSize.TxSizes - 1; ++j) { fc.Tx32x32Prob[i][j] = - Prob.ModeMvMergeProbs(preFc.Tx32x32Prob[i][j], ref branchCt32x32P[j]); + Prob.ModeMvMergeProbs(preFc.Tx32x32Prob[i][j], ref branchCt32X32P[j]); } } } @@ -900,7 +900,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types countSat = Entropy.CoefCountSat; } - for (t = (int)TxSize.Tx4x4; t <= (int)TxSize.Tx32x32; t++) + for (t = (int)TxSize.Tx4X4; t <= (int)TxSize.Tx32X32; t++) { AdaptCoefProbs(t, countSat, updateFactor); } @@ -990,10 +990,10 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types public void DefaultCoefProbs() { - Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx4x4], Entropy.DefaultCoefProbs4x4); - Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx8x8], Entropy.DefaultCoefProbs8x8); - Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx16x16], Entropy.DefaultCoefProbs16x16); - Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx32x32], Entropy.DefaultCoefProbs32x32); + Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx4X4], Entropy.DefaultCoefProbs4X4); + Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx8X8], Entropy.DefaultCoefProbs8X8); + Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx16X16], Entropy.DefaultCoefProbs16X16); + Entropy.CopyProbs(ref Fc.Value.CoefProbs[(int)TxSize.Tx32X32], Entropy.DefaultCoefProbs32X32); } } } \ No newline at end of file diff --git a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Decoder.cs b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Decoder.cs index c3dfd8b1a..11c121cfe 100644 --- a/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Decoder.cs +++ b/src/Ryujinx.Graphics.Nvdec.Vp9/Types/Vp9Decoder.cs @@ -62,38 +62,38 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types } } - byte[][] KfPartitionProbs = - { + byte[][] kfPartitionProbs = + [ // 8x8 . 4x4 - new byte[] { 158, 97, 94 }, // a/l both not split - new byte[] { 93, 24, 99 }, // a split, l not split - new byte[] { 85, 119, 44 }, // l split, a not split - new byte[] { 62, 59, 67 }, // a/l both split + [158, 97, 94], // a/l both not split + [93, 24, 99], // a split, l not split + [85, 119, 44], // l split, a not split + [62, 59, 67], // a/l both split // 16x16 . 8x8 - new byte[] { 149, 53, 53 }, // a/l both not split - new byte[] { 94, 20, 48 }, // a split, l not split - new byte[] { 83, 53, 24 }, // l split, a not split - new byte[] { 52, 18, 18 }, // a/l both split + [149, 53, 53], // a/l both not split + [94, 20, 48], // a split, l not split + [83, 53, 24], // l split, a not split + [52, 18, 18], // a/l both split // 32x32 . 16x16 - new byte[] { 150, 40, 39 }, // a/l both not split - new byte[] { 78, 12, 26 }, // a split, l not split - new byte[] { 67, 33, 11 }, // l split, a not split - new byte[] { 24, 7, 5 }, // a/l both split + [150, 40, 39], // a/l both not split + [78, 12, 26], // a split, l not split + [67, 33, 11], // l split, a not split + [24, 7, 5], // a/l both split // 64x64 . 32x32 - new byte[] { 174, 35, 49 }, // a/l both not split - new byte[] { 68, 11, 27 }, // a split, l not split - new byte[] { 57, 15, 9 }, // l split, a not split - new byte[] { 12, 3, 3 } // a/l both split - }; + [174, 35, 49], // a/l both not split + [68, 11, 27], // a split, l not split + [57, 15, 9], // l split, a not split + [12, 3, 3] // a/l both split + ]; - for (int i = 0; i < KfPartitionProbs.Length; i++) + for (int i = 0; i < kfPartitionProbs.Length; i++) { - for (int j = 0; j < KfPartitionProbs[i].Length; j++) + for (int j = 0; j < kfPartitionProbs[i].Length; j++) { - cm.Fc.Value.KfPartitionProb[i][j] = KfPartitionProbs[i][j]; + cm.Fc.Value.KfPartitionProb[i][j] = kfPartitionProbs[i][j]; } } @@ -281,7 +281,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types Array8 frameSizes = new(); int frameCount = 0; - res = Types.Decoder.ParseSuperframeIndex(data, (ulong)data.Length, ref frameSizes, out frameCount); + res = Decoder.ParseSuperframeIndex(data, (ulong)data.Length, ref frameSizes, out frameCount); if (res != CodecErr.Ok) { return res; @@ -322,7 +322,7 @@ namespace Ryujinx.Graphics.Nvdec.Vp9.Types // Account for suboptimal termination by the encoder. while (dataStart.Length != 0) { - byte marker = Types.Decoder.ReadMarker(dataStart); + byte marker = Decoder.ReadMarker(dataStart); if (marker != 0) { break;