diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/GPFifo')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs | 6 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs | 13 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs | 7 |
3 files changed, 16 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs index 84d35350..75b19c37 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoClass.cs @@ -79,13 +79,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo // TODO: Acquire operations (Wait), interrupts for invalid combinations. if (operation == SemaphoredOperation.Release) { - _context.MemoryManager.Write(address, value); + _parent.MemoryManager.Write(address, value); } else if (operation == SemaphoredOperation.Reduction) { bool signed = _state.State.SemaphoredFormat == SemaphoredFormat.Signed; - int mem = _context.MemoryManager.Read<int>(address); + int mem = _parent.MemoryManager.Read<int>(address); switch (_state.State.SemaphoredReduction) { @@ -115,7 +115,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo break; } - _context.MemoryManager.Write(address, value); + _parent.MemoryManager.Write(address, value); } } diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs index 0e284ac5..ada3bc4b 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoDevice.cs @@ -1,4 +1,5 @@ -using System; +using Ryujinx.Graphics.Gpu.Memory; +using System; using System.Collections.Concurrent; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -53,11 +54,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo /// <summary> /// Fetch the command buffer. /// </summary> - public void Fetch(GpuContext context) + public void Fetch(MemoryManager memoryManager) { if (Words == null) { - Words = MemoryMarshal.Cast<byte, int>(context.MemoryManager.GetSpan(EntryAddress, (int)EntryCount * 4, true)).ToArray(); + Words = MemoryMarshal.Cast<byte, int>(memoryManager.GetSpan(EntryAddress, (int)EntryCount * 4, true)).ToArray(); } } } @@ -155,7 +156,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo if (beforeBarrier && commandBuffer.Type == CommandBufferType.Prefetch) { - commandBuffer.Fetch(_context); + commandBuffer.Fetch(processor.MemoryManager); } if (commandBuffer.Type == CommandBufferType.NoPrefetch) @@ -182,13 +183,13 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo public void DispatchCalls() { // Use this opportunity to also dispose any pending channels that were closed. - _context.DisposePendingChannels(); + _context.RunDeferredActions(); // Process command buffers. while (_ibEnable && !_interrupt && _commandBufferQueue.TryDequeue(out CommandBuffer entry)) { _currentCommandBuffer = entry; - _currentCommandBuffer.Fetch(_context); + _currentCommandBuffer.Fetch(entry.Processor.MemoryManager); // If we are changing the current channel, // we need to force all the host state to be updated. diff --git a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs index dc8a1c75..c683d179 100644 --- a/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs +++ b/Ryujinx.Graphics.Gpu/Engine/GPFifo/GPFifoProcessor.cs @@ -1,4 +1,5 @@ -using Ryujinx.Graphics.Gpu.State; +using Ryujinx.Graphics.Gpu.Memory; +using Ryujinx.Graphics.Gpu.State; using System; using System.Runtime.CompilerServices; @@ -13,6 +14,9 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo private const int MacroIndexMask = MacrosCount - 1; private readonly GpuContext _context; + private readonly GpuChannel _channel; + + public MemoryManager MemoryManager => _channel.MemoryManager; /// <summary> /// Internal GPFIFO state. @@ -39,6 +43,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.GPFifo public GPFifoProcessor(GpuContext context, GpuChannel channel) { _context = context; + _channel = channel; _fifoClass = new GPFifoClass(context, this); _subChannels = new GpuState[8]; |
