diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 6624919a4..fff57ffa9 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -96,12 +96,12 @@ void BufferCache<P>::TickFrame() { | |||
| 96 | 96 | ||
| 97 | template <class P> | 97 | template <class P> |
| 98 | void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) { | 98 | void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) { |
| 99 | memory_tracker.MarkRegionAsCpuModified(cpu_addr, size); | ||
| 100 | if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) { | 99 | if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) { |
| 101 | const IntervalType subtract_interval{cpu_addr, cpu_addr + size}; | 100 | const IntervalType subtract_interval{cpu_addr, cpu_addr + size}; |
| 102 | ClearDownload(subtract_interval); | 101 | ClearDownload(subtract_interval); |
| 103 | common_ranges.subtract(subtract_interval); | 102 | common_ranges.subtract(subtract_interval); |
| 104 | } | 103 | } |
| 104 | memory_tracker.MarkRegionAsCpuModified(cpu_addr, size); | ||
| 105 | } | 105 | } |
| 106 | 106 | ||
| 107 | template <class P> | 107 | template <class P> |
| @@ -122,9 +122,10 @@ std::optional<VideoCore::RasterizerDownloadArea> BufferCache<P>::GetFlushArea(VA | |||
| 122 | area->preemtive = true; | 122 | area->preemtive = true; |
| 123 | return area; | 123 | return area; |
| 124 | }; | 124 | }; |
| 125 | area->preemtive = | ||
| 126 | !IsRegionGpuModified(cpu_addr_start_aligned, cpu_addr_end_aligned - cpu_addr_start_aligned); | ||
| 125 | memory_tracker.MarkRegionAsPreflushable(cpu_addr_start_aligned, | 127 | memory_tracker.MarkRegionAsPreflushable(cpu_addr_start_aligned, |
| 126 | cpu_addr_end_aligned - cpu_addr_start_aligned); | 128 | cpu_addr_end_aligned - cpu_addr_start_aligned); |
| 127 | area->preemtive = !IsRegionGpuModified(cpu_addr, size); | ||
| 128 | return area; | 129 | return area; |
| 129 | } | 130 | } |
| 130 | 131 | ||
| @@ -1223,11 +1224,10 @@ void BufferCache<P>::UpdateComputeTextureBuffers() { | |||
| 1223 | 1224 | ||
| 1224 | template <class P> | 1225 | template <class P> |
| 1225 | void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) { | 1226 | void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) { |
| 1226 | memory_tracker.MarkRegionAsGpuModified(cpu_addr, size); | ||
| 1227 | |||
| 1228 | if (memory_tracker.IsRegionCpuModified(cpu_addr, size)) { | 1227 | if (memory_tracker.IsRegionCpuModified(cpu_addr, size)) { |
| 1229 | SynchronizeBuffer(slot_buffers[buffer_id], cpu_addr, size); | 1228 | SynchronizeBuffer(slot_buffers[buffer_id], cpu_addr, size); |
| 1230 | } | 1229 | } |
| 1230 | memory_tracker.MarkRegionAsGpuModified(cpu_addr, size); | ||
| 1231 | 1231 | ||
| 1232 | const IntervalType base_interval{cpu_addr, cpu_addr + size}; | 1232 | const IntervalType base_interval{cpu_addr, cpu_addr + size}; |
| 1233 | common_ranges.add(base_interval); | 1233 | common_ranges.add(base_interval); |