Browse Source

SMMU: Fix 8Gb layout.

nce_cpp
Fernando Sahmkow 2 years ago
committed by Liam
parent
commit
eda09c091a
  1. 10
      src/core/device_memory_manager.inc
  2. 3
      src/video_core/memory_manager.cpp

10
src/core/device_memory_manager.inc

@ -340,8 +340,8 @@ T* DeviceMemoryManager<Traits>::GetPointer(DAddr address) {
if (phys_addr == 0) [[unlikely]] { if (phys_addr == 0) [[unlikely]] {
return nullptr; return nullptr;
} }
return GetPointerFromRaw<T>(
static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + offset));
return GetPointerFromRaw<T>((static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) +
offset);
} }
template <typename Traits> template <typename Traits>
@ -353,8 +353,8 @@ const T* DeviceMemoryManager<Traits>::GetPointer(DAddr address) const {
if (phys_addr == 0) [[unlikely]] { if (phys_addr == 0) [[unlikely]] {
return nullptr; return nullptr;
} }
return GetPointerFromRaw<T>(
static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + offset));
return GetPointerFromRaw<T>((static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) +
offset);
} }
template <typename Traits> template <typename Traits>
@ -405,7 +405,7 @@ void DeviceMemoryManager<Traits>::WalkBlock(DAddr addr, std::size_t size, auto o
continue; continue;
} }
auto* mem_ptr = GetPointerFromRaw<u8>( auto* mem_ptr = GetPointerFromRaw<u8>(
static_cast<PAddr>(((phys_addr - 1) << Memory::YUZU_PAGEBITS) + page_offset));
(static_cast<PAddr>(phys_addr - 1) << Memory::YUZU_PAGEBITS) + page_offset);
on_memory(copy_amount, mem_ptr); on_memory(copy_amount, mem_ptr);
} }
} }

3
src/video_core/memory_manager.cpp

@ -762,6 +762,9 @@ void MemoryManager::FlushCaching() {
} }
const u8* MemoryManager::GetSpan(const GPUVAddr src_addr, const std::size_t size) const { const u8* MemoryManager::GetSpan(const GPUVAddr src_addr, const std::size_t size) const {
if (!IsContinuousRange(src_addr, size)) {
return nullptr;
}
auto dev_addr = GpuToCpuAddress(src_addr); auto dev_addr = GpuToCpuAddress(src_addr);
if (dev_addr) { if (dev_addr) {
return memory.GetSpan(*dev_addr, size); return memory.GetSpan(*dev_addr, size);

Loading…
Cancel
Save