summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tests/video_core/buffer_base.cpp2
-rw-r--r--src/video_core/buffer_cache/buffer_base.h5
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h8
3 files changed, 10 insertions, 5 deletions
diff --git a/src/tests/video_core/buffer_base.cpp b/src/tests/video_core/buffer_base.cpp
index cfcdc2253..9f5a54de4 100644
--- a/src/tests/video_core/buffer_base.cpp
+++ b/src/tests/video_core/buffer_base.cpp
@@ -536,7 +536,7 @@ TEST_CASE("BufferBase: Cached write downloads") {
536 REQUIRE(rasterizer.Count() == 63); 536 REQUIRE(rasterizer.Count() == 63);
537 buffer.MarkRegionAsGpuModified(c + PAGE, PAGE); 537 buffer.MarkRegionAsGpuModified(c + PAGE, PAGE);
538 int num = 0; 538 int num = 0;
539 buffer.ForEachDownloadRange(c, WORD, true, [&](u64 offset, u64 size) { ++num; }); 539 buffer.ForEachDownloadRangeAndClear(c, WORD, [&](u64 offset, u64 size) { ++num; });
540 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; }); 540 buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; });
541 REQUIRE(num == 0); 541 REQUIRE(num == 0);
542 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE)); 542 REQUIRE(!buffer.IsRegionCpuModified(c + PAGE, PAGE));
diff --git a/src/video_core/buffer_cache/buffer_base.h b/src/video_core/buffer_cache/buffer_base.h
index 9e39858c8..c3318095c 100644
--- a/src/video_core/buffer_cache/buffer_base.h
+++ b/src/video_core/buffer_cache/buffer_base.h
@@ -235,6 +235,11 @@ public:
235 ForEachModifiedRange<Type::GPU>(query_cpu_range, size, clear, func); 235 ForEachModifiedRange<Type::GPU>(query_cpu_range, size, clear, func);
236 } 236 }
237 237
238 template <typename Func>
239 void ForEachDownloadRangeAndClear(VAddr query_cpu_range, u64 size, Func&& func) {
240 ForEachModifiedRange<Type::GPU>(query_cpu_range, size, true, func);
241 }
242
238 /// Call 'func' for each GPU modified range and unmark those pages as GPU modified 243 /// Call 'func' for each GPU modified range and unmark those pages as GPU modified
239 template <typename Func> 244 template <typename Func>
240 void ForEachDownloadRange(Func&& func) { 245 void ForEachDownloadRange(Func&& func) {
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 910909201..502feddba 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -167,7 +167,7 @@ public:
167 /// Return true when a CPU region is modified from the GPU 167 /// Return true when a CPU region is modified from the GPU
168 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size); 168 [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size);
169 169
170 /// Return true when a CPU region is modified from the GPU 170 /// Return true when a CPU region is modified from the CPU
171 [[nodiscard]] bool IsRegionCpuModified(VAddr addr, size_t size); 171 [[nodiscard]] bool IsRegionCpuModified(VAddr addr, size_t size);
172 172
173 std::mutex mutex; 173 std::mutex mutex;
@@ -593,8 +593,8 @@ void BufferCache<P>::CommitAsyncFlushesHigh() {
593 const VAddr cpu_addr = interval.lower(); 593 const VAddr cpu_addr = interval.lower();
594 ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) { 594 ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) {
595 boost::container::small_vector<BufferCopy, 1> copies; 595 boost::container::small_vector<BufferCopy, 1> copies;
596 buffer.ForEachDownloadRange( 596 buffer.ForEachDownloadRangeAndClear(
597 cpu_addr, size, true, [&](u64 range_offset, u64 range_size) { 597 cpu_addr, size, [&](u64 range_offset, u64 range_size) {
598 const VAddr buffer_addr = buffer.CpuAddr(); 598 const VAddr buffer_addr = buffer.CpuAddr();
599 const auto add_download = [&](VAddr start, VAddr end) { 599 const auto add_download = [&](VAddr start, VAddr end) {
600 const u64 new_offset = start - buffer_addr; 600 const u64 new_offset = start - buffer_addr;
@@ -1331,7 +1331,7 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, VAddr cpu_addr, u64 si
1331 boost::container::small_vector<BufferCopy, 1> copies; 1331 boost::container::small_vector<BufferCopy, 1> copies;
1332 u64 total_size_bytes = 0; 1332 u64 total_size_bytes = 0;
1333 u64 largest_copy = 0; 1333 u64 largest_copy = 0;
1334 buffer.ForEachDownloadRange(cpu_addr, size, true, [&](u64 range_offset, u64 range_size) { 1334 buffer.ForEachDownloadRangeAndClear(cpu_addr, size, [&](u64 range_offset, u64 range_size) {
1335 const VAddr buffer_addr = buffer.CpuAddr(); 1335 const VAddr buffer_addr = buffer.CpuAddr();
1336 const auto add_download = [&](VAddr start, VAddr end) { 1336 const auto add_download = [&](VAddr start, VAddr end) {
1337 const u64 new_offset = start - buffer_addr; 1337 const u64 new_offset = start - buffer_addr;