diff options
| author | sharmander <saldabain.dev@gmail.com> | 2020-12-11 00:05:53 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-11 06:05:53 +0100 |
| commit | 8a6607540ea8933ef9f1f0ff40d910d5bfc3b600 (patch) | |
| tree | fbe6e6641952337e242291222787a5c62da5ecee /Ryujinx.HLE | |
| parent | d9ec2b3a81538e8cbb2ec869a792a6b5500a3137 (diff) | |
GPU: Improve unnecessary return value in Map function. (#1799)
* Implement VFNMA.F<32/64>
* Update PTC Version
* Update Implementation & Renames & Correct Order
* Add Logging
* Additional logging
* Add additional check to restart loop from beginning if address goes beyond maximum allowed.
* Additional Check that the total range required doesn't exceed capacity of allocator addresses.
* Improve logging
* Ensure hex output
* Update Ryujinx.HLE/HOS/Services/Nv/NvMemoryAllocator.cs
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
* Remove extra page at end
* Remove unnecessary return val in Map function.
* Remove incorrect description
Co-authored-by: gdkchan <gab.dark.100@gmail.com>
Diffstat (limited to 'Ryujinx.HLE')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs | 17 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs | 3 |
2 files changed, 13 insertions, 7 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs b/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs index fb973229..c2296775 100644 --- a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs +++ b/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostAsGpu/NvHostAsGpuDeviceFile.cs @@ -223,8 +223,9 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu long virtualAddress = arguments.Offset + arguments.BufferOffset; physicalAddress += arguments.BufferOffset; + addressSpaceContext.Gmm.Map((ulong)physicalAddress, (ulong)virtualAddress, (ulong)arguments.MappingSize); - if ((long)addressSpaceContext.Gmm.Map((ulong)physicalAddress, (ulong)virtualAddress, (ulong)arguments.MappingSize) < 0) + if (virtualAddress < 0) { string message = string.Format(mapErrorMsg, virtualAddress, arguments.MappingSize, pageSize); @@ -265,7 +266,7 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu { if (addressSpaceContext.ValidateFixedBuffer(arguments.Offset, size, pageSize)) { - arguments.Offset = (long)addressSpaceContext.Gmm.Map((ulong)physicalAddress, (ulong)arguments.Offset, (ulong)size); + addressSpaceContext.Gmm.Map((ulong)physicalAddress, (ulong)arguments.Offset, (ulong)size); } else { @@ -283,7 +284,9 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu { _memoryAllocator.AllocateRange(va, (ulong)size, freeAddressStartPosition); } - arguments.Offset = (long)addressSpaceContext.Gmm.Map((ulong)physicalAddress, va, (ulong)size); + + addressSpaceContext.Gmm.Map((ulong)physicalAddress, va, (ulong)size); + arguments.Offset = (long)va; } if (arguments.Offset < 0) @@ -332,12 +335,14 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostAsGpu return NvInternalResult.InvalidInput; } - long result = (long)gmm.Map( + long shiftedGpuOffset = (long)((ulong)arguments[index].GpuOffset << 16); + + gmm.Map( ((ulong)arguments[index].MapOffset << 16) + (ulong)map.Address, - (ulong)arguments[index].GpuOffset << 16, + (ulong)shiftedGpuOffset, (ulong)arguments[index].Pages << 16); - if (result < 0) + if (shiftedGpuOffset < 0) { Logger.Warning?.Print(LogClass.ServiceNv, $"Page 0x{arguments[index].GpuOffset:x16} size 0x{arguments[index].Pages:x16} not allocated!"); diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs b/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs index ca20aab5..4a532cd7 100644 --- a/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs +++ b/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostChannel/NvHostChannelDeviceFile.cs @@ -253,7 +253,8 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostChannel if (va != NvMemoryAllocator.PteUnmapped && va <= uint.MaxValue && (va + (uint)map.Size) <= uint.MaxValue) { _memoryAllocator.AllocateRange(va, (uint)map.Size, freeAddressStartPosition); - map.DmaMapAddress = (long)gmm.Map((ulong)map.Address, va, (uint)map.Size); + gmm.Map((ulong)map.Address, va, (uint)map.Size); + map.DmaMapAddress = (long)va; } else { |
