mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2026-05-24 22:25:47 +00:00
Memory Changes part 2 (ryubing/ryujinx!123)
See merge request ryubing/ryujinx!123
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Ryujinx.Common.Memory;
|
||||
using Ryujinx.Graphics.Video;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
||||
{
|
||||
@@ -33,15 +34,24 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
||||
public BackwardUpdates(ref Vp9BackwardUpdates counts)
|
||||
{
|
||||
InterModeCounts = new Array7<Array3<Array2<uint>>>();
|
||||
|
||||
Span<Array3<Array2<uint>>> interModeCountsSpan1 = InterModeCounts.AsSpan();
|
||||
Span<Array4<uint>> interModeSpan1 = counts.InterMode.AsSpan();
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
InterModeCounts[i][0][0] = counts.InterMode[i][2];
|
||||
InterModeCounts[i][0][1] = counts.InterMode[i][0] + counts.InterMode[i][1] + counts.InterMode[i][3];
|
||||
InterModeCounts[i][1][0] = counts.InterMode[i][0];
|
||||
InterModeCounts[i][1][1] = counts.InterMode[i][1] + counts.InterMode[i][3];
|
||||
InterModeCounts[i][2][0] = counts.InterMode[i][1];
|
||||
InterModeCounts[i][2][1] = counts.InterMode[i][3];
|
||||
Span<Array2<uint>> interModeCountsSpan2 = interModeCountsSpan1[i].AsSpan();
|
||||
Span<uint> interModeCountsSpan20 = interModeCountsSpan2[0].AsSpan();
|
||||
Span<uint> interModeCountsSpan21 = interModeCountsSpan2[1].AsSpan();
|
||||
Span<uint> interModeCountsSpan22 = interModeCountsSpan2[2].AsSpan();
|
||||
Span<uint> interModeSpan2 = interModeSpan1[i].AsSpan();
|
||||
|
||||
interModeCountsSpan20[0] = interModeSpan2[2];
|
||||
interModeCountsSpan20[1] = interModeSpan2[0] + interModeSpan2[1] + interModeSpan2[3];
|
||||
interModeCountsSpan21[0] = interModeSpan2[0];
|
||||
interModeCountsSpan21[1] = interModeSpan2[1] + interModeSpan2[3];
|
||||
interModeCountsSpan22[0] = interModeSpan2[1];
|
||||
interModeCountsSpan22[1] = interModeSpan2[3];
|
||||
}
|
||||
|
||||
YModeCounts = counts.YMode;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Ryujinx.Common.Memory;
|
||||
using Ryujinx.Graphics.Video;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
||||
{
|
||||
@@ -46,57 +47,98 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
||||
|
||||
public void Convert(ref Vp9EntropyProbs fc)
|
||||
{
|
||||
Span<Array10<Array9<byte>>> kfYModeProbSpan1 = fc.KfYModeProb.AsSpan();
|
||||
Span<Array10<Array8<byte>>> kfYModeProbE0ToE7Span1 = KfYModeProbE0ToE7.AsSpan();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
Span<Array9<byte>> kfYModeProbSpan2 = kfYModeProbSpan1[i].AsSpan();
|
||||
Span<Array8<byte>> kfYModeProbE0ToE7Span2 = kfYModeProbE0ToE7Span1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 10; j++)
|
||||
{
|
||||
Span<byte> kfYModeProbSpan3 = kfYModeProbSpan2[j].AsSpan();
|
||||
Span<byte> kfYModeProbE0ToE7Span3 = kfYModeProbE0ToE7Span2[j].AsSpan();
|
||||
|
||||
for (int k = 0; k < 9; k++)
|
||||
{
|
||||
fc.KfYModeProb[i][j][k] = k < 8 ? KfYModeProbE0ToE7[i][j][k] : KfYModeProbE8[i][j];
|
||||
kfYModeProbSpan3[k] = k < 8 ? kfYModeProbE0ToE7Span3[k] : KfYModeProbE8[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fc.SegTreeProb = SegTreeProbs;
|
||||
fc.SegPredProb = SegPredProbs;
|
||||
|
||||
Span<Array3<byte>> interModeProbSpan1 = fc.InterModeProb.AsSpan();
|
||||
Span<Array4<byte>> gInterModeProbSpan1 = InterModeProb.AsSpan();
|
||||
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
Span<byte> interModeProbSpan2 = interModeProbSpan1[i].AsSpan();
|
||||
Span<byte> gInterModeProbSpan2 = gInterModeProbSpan1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 3; j++)
|
||||
{
|
||||
fc.InterModeProb[i][j] = InterModeProb[i][j];
|
||||
interModeProbSpan2[j] = gInterModeProbSpan2[j];
|
||||
}
|
||||
}
|
||||
|
||||
fc.IntraInterProb = IntraInterProb;
|
||||
|
||||
Span<Array9<byte>> kfUvModeProbSpan1 = fc.KfUvModeProb.AsSpan();
|
||||
Span<Array8<byte>> kfUvModeProbE0ToE7Span1 = KfUvModeProbE0ToE7.AsSpan();
|
||||
Span<Array9<byte>> uvModeProbSpan1 = fc.UvModeProb.AsSpan();
|
||||
Span<Array8<byte>> uvModeProbE0ToE7Span1 = UvModeProbE0ToE7.AsSpan();
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
Span<byte> kfUvModeProbSpan2 = kfUvModeProbSpan1[i].AsSpan();
|
||||
Span<byte> kfUvModeProbE0ToE7Span2 = kfUvModeProbE0ToE7Span1[i].AsSpan();
|
||||
Span<byte> uvModeProbSpan2 = uvModeProbSpan1[i].AsSpan();
|
||||
Span<byte> uvModeProbE0ToE7Span2 = uvModeProbE0ToE7Span1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 9; j++)
|
||||
{
|
||||
fc.KfUvModeProb[i][j] = j < 8 ? KfUvModeProbE0ToE7[i][j] : KfUvModeProbE8[i];
|
||||
fc.UvModeProb[i][j] = j < 8 ? UvModeProbE0ToE7[i][j] : UvModeProbE8[i];
|
||||
kfUvModeProbSpan2[j] = j < 8 ? kfUvModeProbE0ToE7Span2[j] : KfUvModeProbE8[i];
|
||||
uvModeProbSpan2[j] = j < 8 ? uvModeProbE0ToE7Span2[j] : UvModeProbE8[i];
|
||||
}
|
||||
}
|
||||
|
||||
fc.Tx8x8Prob = Tx8x8Prob;
|
||||
fc.Tx16x16Prob = Tx16x16Prob;
|
||||
fc.Tx32x32Prob = Tx32x32Prob;
|
||||
|
||||
Span<Array9<byte>> yModeProbSpan1 = fc.YModeProb.AsSpan();
|
||||
Span<Array8<byte>> yModeProbE0ToE7Span1 = YModeProbE0ToE7.AsSpan();
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
Span<byte> yModeProbSpan2 = yModeProbSpan1[i].AsSpan();
|
||||
Span<byte> yModeProbE0ToE7Span2 = yModeProbE0ToE7Span1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 9; j++)
|
||||
{
|
||||
fc.YModeProb[i][j] = j < 8 ? YModeProbE0ToE7[i][j] : YModeProbE8[i];
|
||||
yModeProbSpan2[j] = j < 8 ? yModeProbE0ToE7Span2[j] : YModeProbE8[i];
|
||||
}
|
||||
}
|
||||
|
||||
Span<Array3<byte>> kfPartitionProbSpan1 = fc.KfPartitionProb.AsSpan();
|
||||
Span<Array4<byte>> gKfPartitionProbSpan1 = KfPartitionProb.AsSpan();
|
||||
Span<Array3<byte>> partitionProbSpan1 = fc.PartitionProb.AsSpan();
|
||||
Span<Array4<byte>> gPartitionProbSpan1 = PartitionProb.AsSpan();
|
||||
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
Span<byte> kfPartitionProbSpan2 = kfPartitionProbSpan1[i].AsSpan();
|
||||
Span<byte> gKfPartitionProbSpan2 = gKfPartitionProbSpan1[i].AsSpan();
|
||||
Span<byte> partitionProbSpan2 = partitionProbSpan1[i].AsSpan();
|
||||
Span<byte> gPartitionProbSpan2 = gPartitionProbSpan1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 3; j++)
|
||||
{
|
||||
fc.KfPartitionProb[i][j] = KfPartitionProb[i][j];
|
||||
fc.PartitionProb[i][j] = PartitionProb[i][j];
|
||||
kfPartitionProbSpan2[j] = gKfPartitionProbSpan2[j];
|
||||
partitionProbSpan2[j] = gPartitionProbSpan2[j];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,20 +158,38 @@ namespace Ryujinx.Graphics.Nvdec.Types.Vp9
|
||||
fc.Bits = Bits;
|
||||
fc.SingleRefProb = SingleRefProb;
|
||||
fc.CompRefProb = CompRefProb;
|
||||
|
||||
Span<Array2<Array2<Array6<Array6<Array3<byte>>>>>> coefProbsSpan1 = fc.CoefProbs.AsSpan();
|
||||
Span<Array2<Array2<Array6<Array6<Array4<byte>>>>>> gCoefProbsSpan1 = CoefProbs.AsSpan();
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
Span<Array2<Array6<Array6<Array3<byte>>>>> coefProbsSpan2 = coefProbsSpan1[i].AsSpan();
|
||||
Span<Array2<Array6<Array6<Array4<byte>>>>> gCoefProbsSpan2 = gCoefProbsSpan1[i].AsSpan();
|
||||
|
||||
for (int j = 0; j < 2; j++)
|
||||
{
|
||||
Span<Array6<Array6<Array3<byte>>>> coefProbsSpan3 = coefProbsSpan2[j].AsSpan();
|
||||
Span<Array6<Array6<Array4<byte>>>> gCoefProbsSpan3 = gCoefProbsSpan2[j].AsSpan();
|
||||
|
||||
for (int k = 0; k < 2; k++)
|
||||
{
|
||||
Span<Array6<Array3<byte>>> coefProbsSpan4 = coefProbsSpan3[k].AsSpan();
|
||||
Span<Array6<Array4<byte>>> gCoefProbsSpan4 = gCoefProbsSpan3[k].AsSpan();
|
||||
|
||||
for (int l = 0; l < 6; l++)
|
||||
{
|
||||
Span<Array3<byte>> coefProbsSpan5 = coefProbsSpan4[l].AsSpan();
|
||||
Span<Array4<byte>> gCoefProbsSpan5 = gCoefProbsSpan4[l].AsSpan();
|
||||
|
||||
for (int m = 0; m < 6; m++)
|
||||
{
|
||||
Span<byte> coefProbsSpan6 = coefProbsSpan5[m].AsSpan();
|
||||
Span<byte> gCoefProbsSpan6 = gCoefProbsSpan5[m].AsSpan();
|
||||
|
||||
for (int n = 0; n < 3; n++)
|
||||
{
|
||||
fc.CoefProbs[i][j][k][l][m][n] = CoefProbs[i][j][k][l][m][n];
|
||||
coefProbsSpan6[n] = gCoefProbsSpan6[n];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user