diff options
| author | 2024-01-05 03:47:48 +0100 | |
|---|---|---|
| committer | 2024-01-18 21:12:30 -0500 | |
| commit | a874ab0133459b713205a87738234fae03dc715b (patch) | |
| tree | c206f6d744e7c61a9dc044013469b6e58100b2a4 | |
| parent | Core: Clang format and other small issues. (diff) | |
| download | yuzu-a874ab0133459b713205a87738234fae03dc715b.tar.gz yuzu-a874ab0133459b713205a87738234fae03dc715b.tar.xz yuzu-a874ab0133459b713205a87738234fae03dc715b.zip | |
SMMU: Fix 8Gb layout.
| -rw-r--r-- | src/core/device_memory_manager.inc | 10 | ||||
| -rw-r--r-- | src/video_core/memory_manager.cpp | 3 |
2 files changed, 8 insertions, 5 deletions
diff --git a/src/core/device_memory_manager.inc b/src/core/device_memory_manager.inc index a0eb4214e..5241293b6 100644 --- a/src/core/device_memory_manager.inc +++ b/src/core/device_memory_manager.inc | |||
| @@ -340,8 +340,8 @@ T* DeviceMemoryManager<Traits>::GetPointer(DAddr address) { | |||
| 340 | if (phys_addr == 0) [[unlikely]] { | 340 | if (phys_addr == 0) [[unlikely]] { |
| 341 | return nullptr; | 341 | return nullptr; |
| 342 | } | 342 | } |
| 343 | return GetPointerFromRaw<T>( | 343 | return GetPointerFromRaw<T>((static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) + |
| 344 | static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + offset)); | 344 | offset); |
| 345 | } | 345 | } |
| 346 | 346 | ||
| 347 | template <typename Traits> | 347 | template <typename Traits> |
| @@ -353,8 +353,8 @@ const T* DeviceMemoryManager<Traits>::GetPointer(DAddr address) const { | |||
| 353 | if (phys_addr == 0) [[unlikely]] { | 353 | if (phys_addr == 0) [[unlikely]] { |
| 354 | return nullptr; | 354 | return nullptr; |
| 355 | } | 355 | } |
| 356 | return GetPointerFromRaw<T>( | 356 | return GetPointerFromRaw<T>((static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) + |
| 357 | static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + offset)); | 357 | offset); |
| 358 | } | 358 | } |
| 359 | 359 | ||
| 360 | template <typename Traits> | 360 | template <typename Traits> |
| @@ -405,7 +405,7 @@ void DeviceMemoryManager<Traits>::WalkBlock(DAddr addr, std::size_t size, auto o | |||
| 405 | continue; | 405 | continue; |
| 406 | } | 406 | } |
| 407 | auto* mem_ptr = GetPointerFromRaw<u8>( | 407 | auto* mem_ptr = GetPointerFromRaw<u8>( |
| 408 | static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + page_offset)); | 408 | (static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) + page_offset); |
| 409 | on_memory(copy_amount, mem_ptr); | 409 | on_memory(copy_amount, mem_ptr); |
| 410 | } | 410 | } |
| 411 | } | 411 | } |
diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index ac1417fbc..b18b44e42 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp | |||
| @@ -762,6 +762,9 @@ void MemoryManager::FlushCaching() { | |||
| 762 | } | 762 | } |
| 763 | 763 | ||
| 764 | const u8* MemoryManager::GetSpan(const GPUVAddr src_addr, const std::size_t size) const { | 764 | const u8* MemoryManager::GetSpan(const GPUVAddr src_addr, const std::size_t size) const { |
| 765 | if (!IsContinuousRange(src_addr, size)) { | ||
| 766 | return nullptr; | ||
| 767 | } | ||
| 765 | auto dev_addr = GpuToCpuAddress(src_addr); | 768 | auto dev_addr = GpuToCpuAddress(src_addr); |
| 766 | if (dev_addr) { | 769 | if (dev_addr) { |
| 767 | return memory.GetSpan(*dev_addr, size); | 770 | return memory.GetSpan(*dev_addr, size); |