From da440da9f54cc860f3c69da685a415d5ec9d7b64 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 28 Jun 2023 19:32:50 +0200 Subject: Memory Tracking: Optimize tracking to only use atomic writes when contested with the host GPU --- src/video_core/buffer_cache/buffer_cache.h | 15 ++++++++++++++- src/video_core/buffer_cache/buffer_cache_base.h | 5 ++++- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src/video_core/buffer_cache') diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 9239ad862..b5ed3380f 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -132,6 +132,19 @@ void BufferCache
::CachedWriteMemory(VAddr cpu_addr, u64 size) {
InlineMemoryImplementation(cpu_addr, size, tmp_buffer);
}
+template ::OnCPUWrite(VAddr cpu_addr, u64 size) {
+ const bool is_dirty = IsRegionRegistered(cpu_addr, size);
+ if (!is_dirty) {
+ return false;
+ }
+ if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) {
+ return true;
+ }
+ WriteMemory(cpu_addr, size);
+ return false;
+}
+
template ::GetFlushArea(VAddr cpu_addr,
u64 size) {
@@ -1574,7 +1587,7 @@ bool BufferCache ::InlineMemory(VAddr dest_address, size_t copy_size,
template ::InlineMemoryImplementation(VAddr dest_address, size_t copy_size,
- std::span