From b9ea990df6e0bd7156ac8a83d6340d83887c53e4 Mon Sep 17 00:00:00 2001 From: gdk Date: Mon, 14 Feb 2022 22:28:41 -0300 Subject: [PATCH] Zero DMA region X/Y after copy --- Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs b/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs index 763391b40..abc48a0ad 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs @@ -124,13 +124,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma /// /// Performs a buffer to buffer, or buffer to texture copy. /// - /// The LaunchDma call argument - private void DmaCopy(int argument) + /// Flags passed on the DMA launch method + private void DmaCopy(CopyFlags copyFlags) { var memoryManager = _channel.MemoryManager; - CopyFlags copyFlags = (CopyFlags)argument; - bool srcLinear = copyFlags.HasFlag(CopyFlags.SrcLinear); bool dstLinear = copyFlags.HasFlag(CopyFlags.DstLinear); bool copy2D = copyFlags.HasFlag(CopyFlags.MultiLineEnable); @@ -329,8 +327,17 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma /// Method call argument private void LaunchDma(int argument) { - DmaCopy(argument); + CopyFlags copyFlags = (CopyFlags)argument; + + DmaCopy(copyFlags); ReleaseSemaphore(argument); + + if (copyFlags.HasFlag(CopyFlags.MultiLineEnable)) + { + // Some applications are not initializing the state and expects it to be zero. + _state.State.SetSrcOrigin = 0; + _state.State.SetDstOrigin = 0; + } } } }