Buffer Cache: Address Feedback.
This commit is contained in:
		| @@ -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)); | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
					Fernando Sahmkow