summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorliamwhite <liamwhite@users.noreply.github.com>2023-05-11 16:45:47 +0200
committerGitHub <noreply@github.com>2023-05-11 16:45:47 +0200
commit2643ea80df585dbdd6496eb62ae951394ce56e2d (patch)
treec65d9701d017a066081d58e62ed166173475c9f7
parentMerge pull request #10222 from liamwhite/q (diff)
parentSwap order of checking/setting region modifications in the buffer_cache (diff)
downloadyuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar.gz
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar.bz2
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar.lz
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar.xz
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.tar.zst
yuzu-2643ea80df585dbdd6496eb62ae951394ce56e2d.zip
-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() {
template <class P>
void BufferCache<P>::WriteMemory(VAddr cpu_addr, u64 size) {
- memory_tracker.MarkRegionAsCpuModified(cpu_addr, size);
if (memory_tracker.IsRegionGpuModified(cpu_addr, size)) {
const IntervalType subtract_interval{cpu_addr, cpu_addr + size};
ClearDownload(subtract_interval);
common_ranges.subtract(subtract_interval);
}
+ memory_tracker.MarkRegionAsCpuModified(cpu_addr, size);
}
template <class P>
@@ -122,9 +122,10 @@ std::optional<VideoCore::RasterizerDownloadArea> BufferCache<P>::GetFlushArea(VA
area->preemtive = true;
return area;
};
+ area->preemtive =
+ !IsRegionGpuModified(cpu_addr_start_aligned, cpu_addr_end_aligned - cpu_addr_start_aligned);
memory_tracker.MarkRegionAsPreflushable(cpu_addr_start_aligned,
cpu_addr_end_aligned - cpu_addr_start_aligned);
- area->preemtive = !IsRegionGpuModified(cpu_addr, size);
return area;
}
@@ -1223,11 +1224,10 @@ void BufferCache<P>::UpdateComputeTextureBuffers() {
template <class P>
void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 size) {
- memory_tracker.MarkRegionAsGpuModified(cpu_addr, size);
-
if (memory_tracker.IsRegionCpuModified(cpu_addr, size)) {
SynchronizeBuffer(slot_buffers[buffer_id], cpu_addr, size);
}
+ memory_tracker.MarkRegionAsGpuModified(cpu_addr, size);
const IntervalType base_interval{cpu_addr, cpu_addr + size};
common_ranges.add(base_interval);