From fbb4019ed5c12c4a888c7b09db648ac595366896 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Tue, 29 Jun 2021 14:32:02 -0300 Subject: Initial support for separate GPU address spaces (#2394) * Make GPU memory manager a member of GPU channel * Move physical memory instance to the memory manager, and the caches to the physical memory * PR feedback --- Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | 37 ++++++++++++------------------ 1 file changed, 15 insertions(+), 22 deletions(-) (limited to 'Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs') diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs index 90cd01f0..fbdd812e 100644 --- a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs +++ b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs @@ -126,6 +126,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AddressSpaceType addrSpaceType = (AddressSpaceType)((int)(creationInfo.Flags & ProcessCreationFlags.AddressSpaceMask) >> (int)ProcessCreationFlags.AddressSpaceShift); + Pid = KernelContext.NewKipId(); + + if (Pid == 0 || (ulong)Pid >= KernelConstants.InitialProcessId) + { + throw new InvalidOperationException($"Invalid KIP Id {Pid}."); + } + InitializeMemoryManager(creationInfo.Flags); bool aslrEnabled = creationInfo.Flags.HasFlag(ProcessCreationFlags.EnableAslr); @@ -171,13 +178,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return result; } - Pid = KernelContext.NewKipId(); - - if (Pid == 0 || (ulong)Pid >= KernelConstants.InitialProcessId) - { - throw new InvalidOperationException($"Invalid KIP Id {Pid}."); - } - return ParseProcessInfo(creationInfo); } @@ -233,6 +233,13 @@ namespace Ryujinx.HLE.HOS.Kernel.Process AddressSpaceType addrSpaceType = (AddressSpaceType)((int)(creationInfo.Flags & ProcessCreationFlags.AddressSpaceMask) >> (int)ProcessCreationFlags.AddressSpaceShift); + Pid = KernelContext.NewProcessId(); + + if (Pid == -1 || (ulong)Pid < KernelConstants.InitialProcessId) + { + throw new InvalidOperationException($"Invalid Process Id {Pid}."); + } + InitializeMemoryManager(creationInfo.Flags); bool aslrEnabled = creationInfo.Flags.HasFlag(ProcessCreationFlags.EnableAslr); @@ -286,13 +293,6 @@ namespace Ryujinx.HLE.HOS.Kernel.Process return result; } - Pid = KernelContext.NewProcessId(); - - if (Pid == -1 || (ulong)Pid < KernelConstants.InitialProcessId) - { - throw new InvalidOperationException($"Invalid Process Id {Pid}."); - } - result = ParseProcessInfo(creationInfo); if (result != KernelResult.Success) @@ -1051,14 +1051,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process bool for64Bit = flags.HasFlag(ProcessCreationFlags.Is64Bit); - Context = _contextFactory.Create(KernelContext, 1UL << addrSpaceBits, InvalidAccessHandler, for64Bit); - - // TODO: This should eventually be removed. - // The GPU shouldn't depend on the CPU memory manager at all. - if (flags.HasFlag(ProcessCreationFlags.IsApplication)) - { - KernelContext.Device.Gpu.SetVmm((IVirtualMemoryManagerTracked)CpuMemory); - } + Context = _contextFactory.Create(KernelContext, Pid, 1UL << addrSpaceBits, InvalidAccessHandler, for64Bit); if (Context.AddressSpace is MemoryManagerHostMapped) { -- cgit v1.2.3