summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar bunnei2020-04-23 11:37:12 -0400
committerGravatar GitHub2020-04-23 11:37:12 -0400
commitff0c49e1cee3c1dc21d56f6ca73963da5ceec80c (patch)
treef3108877d77c64d4456b7ad27d500aa1e82da33d /src/video_core
parentMerge pull request #3730 from lioncash/time (diff)
downloadyuzu-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.cpp18
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;