diff options
| author | 2021-07-10 21:15:21 +0200 | |
|---|---|---|
| committer | 2021-07-10 21:34:55 +0200 | |
| commit | 977904dd84b5ba2b974f55640bb807f0b5e9e4d0 (patch) | |
| tree | 1b3a16691ab5835900a5eee0a05a871b6b774a71 /src | |
| parent | Buffer Cache: Fix GCC copmpile error (diff) | |
| download | yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.gz yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.tar.xz yuzu-977904dd84b5ba2b974f55640bb807f0b5e9e4d0.zip | |
Buffer Cache: Address Feedback.
Diffstat (limited to 'src')
| -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") { | |||
| 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; |