diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2021-07-10 21:15:21 +0200 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2021-07-10 21:34:55 +0200 |
commit | 977904dd84b5ba2b974f55640bb807f0b5e9e4d0 (patch) | |
tree | 1b3a16691ab5835900a5eee0a05a871b6b774a71 | |
parent | Buffer Cache: Fix GCC copmpile error (diff) | |
download | yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.gz yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.bz2 yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.lz yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.xz yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.zst yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.zip |
-rw-r--r-- | src/tests/video_core/buffer_base.cpp | 2 | ||||
-rw-r--r-- | src/video_core/buffer_cache/buffer_base.h | 5 | ||||
-rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 8 |
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") { REQUIRE(rasterizer.Count() == 63); buffer.MarkRegionAsGpuModified(c + PAGE, PAGE); int num = 0; - buffer.ForEachDownloadRange(c, WORD, true, [&](u64 offset, u64 size) { ++num; }); + buffer.ForEachDownloadRangeAndClear(c, WORD, [&](u64 offset, u64 size) { ++num; }); buffer.ForEachUploadRange(c, WORD, [&](u64 offset, u64 size) { ++num; }); REQUIRE(num == 0); 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: ForEachModifiedRange<Type::GPU>(query_cpu_range, size, clear, func); } + template <typename Func> + void ForEachDownloadRangeAndClear(VAddr query_cpu_range, u64 size, Func&& func) { + ForEachModifiedRange<Type::GPU>(query_cpu_range, size, true, func); + } + /// Call 'func' for each GPU modified range and unmark those pages as GPU modified template <typename Func> 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: /// Return true when a CPU region is modified from the GPU [[nodiscard]] bool IsRegionGpuModified(VAddr addr, size_t size); - /// Return true when a CPU region is modified from the GPU + /// Return true when a CPU region is modified from the CPU [[nodiscard]] bool IsRegionCpuModified(VAddr addr, size_t size); std::mutex mutex; @@ -593,8 +593,8 @@ void BufferCache<P>::CommitAsyncFlushesHigh() { const VAddr cpu_addr = interval.lower(); ForEachBufferInRange(cpu_addr, size, [&](BufferId buffer_id, Buffer& buffer) { boost::container::small_vector<BufferCopy, 1> copies; - buffer.ForEachDownloadRange( - cpu_addr, size, true, [&](u64 range_offset, u64 range_size) { + buffer.ForEachDownloadRangeAndClear( + cpu_addr, size, [&](u64 range_offset, u64 range_size) { const VAddr buffer_addr = buffer.CpuAddr(); const auto add_download = [&](VAddr start, VAddr end) { const u64 new_offset = start - buffer_addr; @@ -1331,7 +1331,7 @@ void BufferCache<P>::DownloadBufferMemory(Buffer& buffer, VAddr cpu_addr, u64 si boost::container::small_vector<BufferCopy, 1> copies; u64 total_size_bytes = 0; u64 largest_copy = 0; - buffer.ForEachDownloadRange(cpu_addr, size, true, [&](u64 range_offset, u64 range_size) { + buffer.ForEachDownloadRangeAndClear(cpu_addr, size, [&](u64 range_offset, u64 range_size) { const VAddr buffer_addr = buffer.CpuAddr(); const auto add_download = [&](VAddr start, VAddr end) { const u64 new_offset = start - buffer_addr; |