summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-01-21 23:08:15 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2021-01-21 23:16:05 +0100
commitdd790abab00379c232ea508fc43e87bd05d003f6 (patch)
treebb1225fbebd8ef6981b35d300a55881b13a9387a /src
parentMerge pull request #5755 from FearlessTobi/port-5344 (diff)
downloadyuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar.gz
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar.bz2
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar.lz
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar.xz
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.tar.zst
yuzu-dd790abab00379c232ea508fc43e87bd05d003f6.zip
Diffstat (limited to 'src')
-rw-r--r--src/video_core/memory_manager.cpp15
-rw-r--r--src/video_core/memory_manager.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp
index 65feff588..1926bb025 100644
--- a/src/video_core/memory_manager.cpp
+++ b/src/video_core/memory_manager.cpp
@@ -314,6 +314,21 @@ void MemoryManager::WriteBlockUnsafe(GPUVAddr gpu_dest_addr, const void* src_buf
}
}
+void MemoryManager::FlushRegion(GPUVAddr gpu_addr, size_t size) const {
+ size_t remaining_size{size};
+ size_t page_index{gpu_addr >> page_bits};
+ size_t page_offset{gpu_addr & page_mask};
+ while (remaining_size > 0) {
+ const size_t num_bytes{std::min(page_size - page_offset, remaining_size)};
+ if (const auto page_addr{GpuToCpuAddress(page_index << page_bits)}; page_addr) {
+ rasterizer->FlushRegion(*page_addr + page_offset, num_bytes);
+ }
+ ++page_index;
+ page_offset = 0;
+ remaining_size -= num_bytes;
+ }
+}
+
void MemoryManager::CopyBlock(GPUVAddr gpu_dest_addr, GPUVAddr gpu_src_addr, std::size_t size) {
std::vector<u8> tmp_buffer(size);
ReadBlock(gpu_src_addr, tmp_buffer.data(), size);
diff --git a/src/video_core/memory_manager.h b/src/video_core/memory_manager.h
index c35e57689..e3c0c53a9 100644
--- a/src/video_core/memory_manager.h
+++ b/src/video_core/memory_manager.h
@@ -131,6 +131,8 @@ private:
void TryLockPage(PageEntry page_entry, std::size_t size);
void TryUnlockPage(PageEntry page_entry, std::size_t size);
+ void FlushRegion(GPUVAddr gpu_addr, size_t size) const;
+
[[nodiscard]] static constexpr std::size_t PageEntryIndex(GPUVAddr gpu_addr) {
return (gpu_addr >> page_bits) & page_table_mask;
}