diff options
| author | 2020-04-23 11:37:12 -0400 | |
|---|---|---|
| committer | 2020-04-23 11:37:12 -0400 | |
| commit | ff0c49e1cee3c1dc21d56f6ca73963da5ceec80c (patch) | |
| tree | f3108877d77c64d4456b7ad27d500aa1e82da33d /src/video_core | |
| parent | Merge pull request #3730 from lioncash/time (diff) | |
| download | yuzu-ff0c49e1cee3c1dc21d56f6ca73963da5ceec80c.tar.gz yuzu-ff0c49e1cee3c1dc21d56f6ca73963da5ceec80c.tar.xz yuzu-ff0c49e1cee3c1dc21d56f6ca73963da5ceec80c.zip | |
kernel: memory: Improve implementation of device shared memory. (#3707)
* kernel: memory: Improve implementation of device shared memory.
* fixup! kernel: memory: Improve implementation of device shared memory.
* fixup! kernel: memory: Improve implementation of device shared memory.
Diffstat (limited to 'src/video_core')
| -rw-r--r-- | src/video_core/memory_manager.cpp | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index fd49bc2a9..dbee9f634 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp | |||
| @@ -51,11 +51,8 @@ GPUVAddr MemoryManager::MapBufferEx(VAddr cpu_addr, u64 size) { | |||
| 51 | const GPUVAddr gpu_addr{FindFreeRegion(address_space_base, aligned_size)}; | 51 | const GPUVAddr gpu_addr{FindFreeRegion(address_space_base, aligned_size)}; |
| 52 | 52 | ||
| 53 | MapBackingMemory(gpu_addr, system.Memory().GetPointer(cpu_addr), aligned_size, cpu_addr); | 53 | MapBackingMemory(gpu_addr, system.Memory().GetPointer(cpu_addr), aligned_size, cpu_addr); |
| 54 | ASSERT(system.CurrentProcess() | 54 | ASSERT( |
| 55 | ->PageTable() | 55 | system.CurrentProcess()->PageTable().LockForDeviceAddressSpace(cpu_addr, size).IsSuccess()); |
| 56 | .SetMemoryAttribute(cpu_addr, size, Kernel::Memory::MemoryAttribute::DeviceShared, | ||
| 57 | Kernel::Memory::MemoryAttribute::DeviceShared) | ||
| 58 | .IsSuccess()); | ||
| 59 | 56 | ||
| 60 | return gpu_addr; | 57 | return gpu_addr; |
| 61 | } | 58 | } |
| @@ -66,11 +63,8 @@ GPUVAddr MemoryManager::MapBufferEx(VAddr cpu_addr, GPUVAddr gpu_addr, u64 size) | |||
| 66 | const u64 aligned_size{Common::AlignUp(size, page_size)}; | 63 | const u64 aligned_size{Common::AlignUp(size, page_size)}; |
| 67 | 64 | ||
| 68 | MapBackingMemory(gpu_addr, system.Memory().GetPointer(cpu_addr), aligned_size, cpu_addr); | 65 | MapBackingMemory(gpu_addr, system.Memory().GetPointer(cpu_addr), aligned_size, cpu_addr); |
| 69 | ASSERT(system.CurrentProcess() | 66 | ASSERT( |
| 70 | ->PageTable() | 67 | system.CurrentProcess()->PageTable().LockForDeviceAddressSpace(cpu_addr, size).IsSuccess()); |
| 71 | .SetMemoryAttribute(cpu_addr, size, Kernel::Memory::MemoryAttribute::DeviceShared, | ||
| 72 | Kernel::Memory::MemoryAttribute::DeviceShared) | ||
| 73 | .IsSuccess()); | ||
| 74 | return gpu_addr; | 68 | return gpu_addr; |
| 75 | } | 69 | } |
| 76 | 70 | ||
| @@ -87,9 +81,7 @@ GPUVAddr MemoryManager::UnmapBuffer(GPUVAddr gpu_addr, u64 size) { | |||
| 87 | UnmapRange(gpu_addr, aligned_size); | 81 | UnmapRange(gpu_addr, aligned_size); |
| 88 | ASSERT(system.CurrentProcess() | 82 | ASSERT(system.CurrentProcess() |
| 89 | ->PageTable() | 83 | ->PageTable() |
| 90 | .SetMemoryAttribute(cpu_addr.value(), size, | 84 | .UnlockForDeviceAddressSpace(cpu_addr.value(), size) |
| 91 | Kernel::Memory::MemoryAttribute::DeviceShared, | ||
| 92 | Kernel::Memory::MemoryAttribute::None) | ||
| 93 | .IsSuccess()); | 85 | .IsSuccess()); |
| 94 | 86 | ||
| 95 | return gpu_addr; | 87 | return gpu_addr; |