diff options
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 15 | ||||
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache_base.h | 5 |
2 files changed, 18 insertions, 2 deletions
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 | |||
| @@ -133,6 +133,19 @@ void BufferCache<P>::CachedWriteMemory(VAddr cpu_addr, u64 size) { | |||
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | template <class P> | 135 | template <class P> |
| 136 | bool BufferCache<P>::OnCPUWrite(VAddr cpu_addr, u64 size) { | ||
| 137 | const bool is_dirty = IsRegionRegistered(cpu_addr, size); | ||
| 138 | if (!is_dirty) { | ||
| 139 | return false; | ||
| 140 | } | ||
| 141 | if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) { | ||
| 142 | return true; | ||
| 143 | } | ||
| 144 | WriteMemory(cpu_addr, size); | ||
| 145 | return false; | ||
| 146 | } | ||
| 147 | |||
| 148 | template <class P> | ||
| 136 | std::optional<VideoCore::RasterizerDownloadArea> BufferCache<P>::GetFlushArea(VAddr cpu_addr, | 149 | std::optional<VideoCore::RasterizerDownloadArea> BufferCache<P>::GetFlushArea(VAddr cpu_addr, |
| 137 | u64 size) { | 150 | u64 size) { |
| 138 | std::optional<VideoCore::RasterizerDownloadArea> area{}; | 151 | std::optional<VideoCore::RasterizerDownloadArea> area{}; |
| @@ -1574,7 +1587,7 @@ bool BufferCache<P>::InlineMemory(VAddr dest_address, size_t copy_size, | |||
| 1574 | 1587 | ||
| 1575 | template <class P> | 1588 | template <class P> |
| 1576 | void BufferCache<P>::InlineMemoryImplementation(VAddr dest_address, size_t copy_size, | 1589 | void BufferCache<P>::InlineMemoryImplementation(VAddr dest_address, size_t copy_size, |
| 1577 | std::span<const u8> inlined_buffer) { | 1590 | std::span<const u8> inlined_buffer) { |
| 1578 | const IntervalType subtract_interval{dest_address, dest_address + copy_size}; | 1591 | const IntervalType subtract_interval{dest_address, dest_address + copy_size}; |
| 1579 | ClearDownload(subtract_interval); | 1592 | ClearDownload(subtract_interval); |
| 1580 | common_ranges.subtract(subtract_interval); | 1593 | common_ranges.subtract(subtract_interval); |
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h index 4d9bab7f7..460fc7551 100644 --- a/src/video_core/buffer_cache/buffer_cache_base.h +++ b/src/video_core/buffer_cache/buffer_cache_base.h | |||
| @@ -245,6 +245,8 @@ public: | |||
| 245 | 245 | ||
| 246 | void CachedWriteMemory(VAddr cpu_addr, u64 size); | 246 | void CachedWriteMemory(VAddr cpu_addr, u64 size); |
| 247 | 247 | ||
| 248 | bool OnCPUWrite(VAddr cpu_addr, u64 size); | ||
| 249 | |||
| 248 | void DownloadMemory(VAddr cpu_addr, u64 size); | 250 | void DownloadMemory(VAddr cpu_addr, u64 size); |
| 249 | 251 | ||
| 250 | std::optional<VideoCore::RasterizerDownloadArea> GetFlushArea(VAddr cpu_addr, u64 size); | 252 | std::optional<VideoCore::RasterizerDownloadArea> GetFlushArea(VAddr cpu_addr, u64 size); |
| @@ -543,7 +545,8 @@ private: | |||
| 543 | 545 | ||
| 544 | void ClearDownload(IntervalType subtract_interval); | 546 | void ClearDownload(IntervalType subtract_interval); |
| 545 | 547 | ||
| 546 | void InlineMemoryImplementation(VAddr dest_address, size_t copy_size, std::span<const u8> inlined_buffer); | 548 | void InlineMemoryImplementation(VAddr dest_address, size_t copy_size, |
| 549 | std::span<const u8> inlined_buffer); | ||
| 547 | 550 | ||
| 548 | VideoCore::RasterizerInterface& rasterizer; | 551 | VideoCore::RasterizerInterface& rasterizer; |
| 549 | Core::Memory::Memory& cpu_memory; | 552 | Core::Memory::Memory& cpu_memory; |