summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2024-01-05 03:47:48 +0100
committerGravatar Liam2024-01-18 21:12:30 -0500
commita874ab0133459b713205a87738234fae03dc715b (patch)
treec206f6d744e7c61a9dc044013469b6e58100b2a4
parentCore: Clang format and other small issues. (diff)
downloadyuzu-a874ab0133459b713205a87738234fae03dc715b.tar.gz
yuzu-a874ab0133459b713205a87738234fae03dc715b.tar.xz
yuzu-a874ab0133459b713205a87738234fae03dc715b.zip
SMMU: Fix 8Gb layout.
-rw-r--r--src/core/device_memory_manager.inc10
-rw-r--r--src/video_core/memory_manager.cpp3
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
347template <typename Traits> 347template <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
360template <typename Traits> 360template <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
764const u8* MemoryManager::GetSpan(const GPUVAddr src_addr, const std::size_t size) const { 764const 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);