diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-07-07 20:56:06 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-07 20:56:06 -0300 |
| commit | 8b44eb1c981d7106be37107755c7c71c3c3c0ce4 (patch) | |
| tree | 70c3a8d7286d827941c41dee2ec3cb3273c1e6d7 /Ryujinx.Graphics.Gpu/Engine/GPFifo | |
| parent | 31cbd09a75a9d5f4814c3907a060e0961eb2bb15 (diff) | |
Separate GPU engines and make state follow official docs (part 1/2) (#2422)
* Use DeviceState for compute and i2m
* Migrate 2D class, more comments
* Migrate DMA copy engine
* Remove now unused code
* Replace GpuState by GpuAccessorState on GpuAcessor, since compute no longer has a GpuState
* More comments
* Add logging (disabled)
* Add back i2m on 3D engine
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/GPFifo')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClassState.cs | 45 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs | 21 |
2 files changed, 64 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClassState.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClassState.cs index 28dd15bd..07d062eb 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClassState.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClassState.cs @@ -4,6 +4,9 @@ using Ryujinx.Common.Memory; namespace Ryujinx.Graphics.Gpu.Engine.GPFifo { + /// <summary> + /// Semaphore operation. + /// </summary> enum SemaphoredOperation { Acquire = 1, @@ -13,24 +16,36 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo Reduction = 16 } + /// <summary> + /// Semaphore acquire switch enable. + /// </summary> enum SemaphoredAcquireSwitch { Disabled = 0, Enabled = 1 } + /// <summary> + /// Semaphore release interrupt wait enable. + /// </summary> enum SemaphoredReleaseWfi { En = 0, Dis = 1 } + /// <summary> + /// Semaphore release structure size. + /// </summary> enum SemaphoredReleaseSize { SixteenBytes = 0, FourBytes = 1 } + /// <summary> + /// Semaphore reduction operation. + /// </summary> enum SemaphoredReduction { Min = 0, @@ -43,24 +58,36 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo Dec = 7 } + /// <summary> + /// Semaphore format. + /// </summary> enum SemaphoredFormat { Signed = 0, Unsigned = 1 } + /// <summary> + /// Memory Translation Lookaside Buffer Page Directory Buffer invalidation. + /// </summary> enum MemOpCTlbInvalidatePdb { One = 0, All = 1 } + /// <summary> + /// Memory Translation Lookaside Buffer GPC invalidation enable. + /// </summary> enum MemOpCTlbInvalidateGpc { Enable = 0, Disable = 1 } + /// <summary> + /// Memory Translation Lookaside Buffer invalidation target. + /// </summary> enum MemOpCTlbInvalidateTarget { VidMem = 0, @@ -68,6 +95,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo SysMemNoncoherent = 3 } + /// <summary> + /// Memory operation. + /// </summary> enum MemOpDOperation { Membar = 5, @@ -78,24 +108,36 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo L2FlushDirty = 16 } + /// <summary> + /// Syncpoint operation. + /// </summary> enum SyncpointbOperation { Wait = 0, Incr = 1 } + /// <summary> + /// Syncpoint wait switch enable. + /// </summary> enum SyncpointbWaitSwitch { Dis = 0, En = 1 } + /// <summary> + /// Wait for interrupt scope. + /// </summary> enum WfiScope { CurrentScgType = 0, All = 1 } + /// <summary> + /// Yield operation. + /// </summary> enum YieldOp { Nop = 0, @@ -104,6 +146,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo Tsg = 3 } + /// <summary> + /// General Purpose FIFO class state. + /// </summary> struct GPFifoClassState { #pragma warning disable CS0649 diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs index c683d179..d12b6810 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs @@ -1,4 +1,9 @@ -using Ryujinx.Graphics.Gpu.Memory; +using Ryujinx.Graphics.Device; +using Ryujinx.Graphics.Gpu.Engine.Compute; +using Ryujinx.Graphics.Gpu.Engine.Dma; +using Ryujinx.Graphics.Gpu.Engine.InlineToMemory; +using Ryujinx.Graphics.Gpu.Engine.Twod; +using Ryujinx.Graphics.Gpu.Memory; using Ryujinx.Graphics.Gpu.State; using System; using System.Runtime.CompilerServices; @@ -33,6 +38,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo private DmaState _state; private readonly GpuState[] _subChannels; + private readonly IDeviceState[] _subChannels2; private readonly GPFifoClass _fifoClass; /// <summary> @@ -47,10 +53,21 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo _fifoClass = new GPFifoClass(context, this); _subChannels = new GpuState[8]; + _subChannels2 = new IDeviceState[8] + { + null, + new ComputeClass(context, channel), + new InlineToMemoryClass(context, channel), + new TwodClass(channel), + new DmaClass(context, channel), + null, + null, + null + }; for (int index = 0; index < _subChannels.Length; index++) { - _subChannels[index] = new GpuState(channel); + _subChannels[index] = new GpuState(channel, _subChannels2[index]); _context.Methods.RegisterCallbacks(_subChannels[index]); } |
