summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h8
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
97template <class P> 97template <class P>
98void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) { 98void 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
107template <class P> 107template <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
1224template <class P> 1225template <class P>
1225void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) { 1226void 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);