diff options
author | gdkchan <gab.dark.100@gmail.com> | 2021-06-29 14:32:02 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-29 19:32:02 +0200 |
commit | fbb4019ed5c12c4a888c7b09db648ac595366896 (patch) | |
tree | a8be6bf5fc4f8b844683f1ef2ade588f3bb9bb0a /Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | |
parent | 8cc872fb60ec1b825655ba8dba06cc978fcd7e66 (diff) |
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
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs')
-rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | 37 |
1 files changed, 15 insertions, 22 deletions
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) { |