summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2023-05-04 02:34:49 +0200
committerGravatar Fernando Sahmkow2023-05-07 23:46:12 +0200
commit92da86290c5ea657ae918bfe36071bdf7ac15075 (patch)
tree54579c5be80dde28aabe68cd2467281036ef807a /src/video_core
parentTexture cache: sync the first flush. (diff)
downloadyuzu-92da86290c5ea657ae918bfe36071bdf7ac15075.tar.gz
yuzu-92da86290c5ea657ae918bfe36071bdf7ac15075.tar.xz
yuzu-92da86290c5ea657ae918bfe36071bdf7ac15075.zip
Settings: add option to enable / disable reactive flushing
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h9
-rw-r--r--src/video_core/texture_cache/image_view_base.cpp3
2 files changed, 8 insertions, 4 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 479a1a508..474822354 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -126,7 +126,8 @@ std::optional<VideoCore::RasterizerDownloadArea> BufferCache<P>::GetFlushArea(VA
126 area->preemtive = true; 126 area->preemtive = true;
127 return area; 127 return area;
128 }; 128 };
129 memory_tracker.MarkRegionAsPreflushable(cpu_addr_start_aligned, cpu_addr_end_aligned - cpu_addr_start_aligned); 129 memory_tracker.MarkRegionAsPreflushable(cpu_addr_start_aligned,
130 cpu_addr_end_aligned - cpu_addr_start_aligned);
130 area->preemtive = !IsRegionGpuModified(cpu_addr, size); 131 area->preemtive = !IsRegionGpuModified(cpu_addr, size);
131 return area; 132 return area;
132} 133}
@@ -206,7 +207,8 @@ bool BufferCache<P>::DMACopy(GPUVAddr src_address, GPUVAddr dest_address, u64 am
206 const VAddr new_base_address = *cpu_dest_address + diff; 207 const VAddr new_base_address = *cpu_dest_address + diff;
207 const IntervalType add_interval{new_base_address, new_base_address + size}; 208 const IntervalType add_interval{new_base_address, new_base_address + size};
208 tmp_intervals.push_back(add_interval); 209 tmp_intervals.push_back(add_interval);
209 if (memory_tracker.IsRegionPreflushable(new_base_address, new_base_address + size)) { 210 if (!Settings::values.use_reactive_flushing.GetValue() ||
211 memory_tracker.IsRegionPreflushable(new_base_address, new_base_address + size)) {
210 uncommitted_ranges.add(add_interval); 212 uncommitted_ranges.add(add_interval);
211 pending_ranges.add(add_interval); 213 pending_ranges.add(add_interval);
212 } 214 }
@@ -1236,7 +1238,8 @@ void BufferCache<P>::MarkWrittenBuffer(BufferId buffer_id, VAddr cpu_addr, u32 s
1236 1238
1237 const IntervalType base_interval{cpu_addr, cpu_addr + size}; 1239 const IntervalType base_interval{cpu_addr, cpu_addr + size};
1238 common_ranges.add(base_interval); 1240 common_ranges.add(base_interval);
1239 if (!memory_tracker.IsRegionPreflushable(cpu_addr, cpu_addr + size)) { 1241 if (Settings::values.use_reactive_flushing.GetValue() &&
1242 !memory_tracker.IsRegionPreflushable(cpu_addr, cpu_addr + size)) {
1240 return; 1243 return;
1241 } 1244 }
1242 uncommitted_ranges.add(base_interval); 1245 uncommitted_ranges.add(base_interval);
diff --git a/src/video_core/texture_cache/image_view_base.cpp b/src/video_core/texture_cache/image_view_base.cpp
index 8f28342d5..30a7c11f5 100644
--- a/src/video_core/texture_cache/image_view_base.cpp
+++ b/src/video_core/texture_cache/image_view_base.cpp
@@ -26,7 +26,8 @@ ImageViewBase::ImageViewBase(const ImageViewInfo& info, const ImageInfo& image_i
26 ASSERT_MSG(VideoCore::Surface::IsViewCompatible(image_info.format, info.format, false, true), 26 ASSERT_MSG(VideoCore::Surface::IsViewCompatible(image_info.format, info.format, false, true),
27 "Image view format {} is incompatible with image format {}", info.format, 27 "Image view format {} is incompatible with image format {}", info.format,
28 image_info.format); 28 image_info.format);
29 if (image_info.forced_flushed) { 29 const bool preemptive = !Settings::values.use_reactive_flushing.GetValue() && image_info.type == ImageType::Linear;
30 if (image_info.forced_flushed || preemptive) {
30 flags |= ImageViewFlagBits::PreemtiveDownload; 31 flags |= ImageViewFlagBits::PreemtiveDownload;
31 } 32 }
32 if (image_info.type == ImageType::e3D && info.type != ImageViewType::e3D) { 33 if (image_info.type == ImageType::e3D && info.type != ImageViewType::e3D) {