Browse Source

[buffer_cache] Adjusted PopAsyncBuffers for range management

camillelavey-patch-1
CamilleLaVey 2 weeks ago
committed by crueter
parent
commit
b540c129a4
  1. 5
      src/video_core/buffer_cache/buffer_cache.h

5
src/video_core/buffer_cache/buffer_cache.h

@ -680,6 +680,7 @@ void BufferCache<P>::PopAsyncBuffers() {
auto& async_buffer = async_buffers.front(); auto& async_buffer = async_buffers.front();
u8* base = async_buffer->mapped_span.data(); u8* base = async_buffer->mapped_span.data();
const size_t base_offset = async_buffer->offset; const size_t base_offset = async_buffer->offset;
Common::RangeSet<DAddr> ranges_to_remove;
for (const auto& copy : downloads) { for (const auto& copy : downloads) {
const DAddr device_addr = static_cast<DAddr>(copy.src_offset); const DAddr device_addr = static_cast<DAddr>(copy.src_offset);
const u64 dst_offset = copy.dst_offset - base_offset; const u64 dst_offset = copy.dst_offset - base_offset;
@ -689,9 +690,11 @@ void BufferCache<P>::PopAsyncBuffers() {
end - start); end - start);
}); });
async_downloads.Subtract(device_addr, copy.size, [&](DAddr start, DAddr end) { async_downloads.Subtract(device_addr, copy.size, [&](DAddr start, DAddr end) {
gpu_modified_ranges.Subtract(start, end - start);
ranges_to_remove.Add(start, end - start);
}); });
} }
ranges_to_remove.ForEach(
[&](DAddr start, DAddr end) { gpu_modified_ranges.Subtract(start, end - start); });
async_buffers_death_ring.emplace_back(*async_buffer); async_buffers_death_ring.emplace_back(*async_buffer);
async_buffers.pop_front(); async_buffers.pop_front();
pending_downloads.pop_front(); pending_downloads.pop_front();

Loading…
Cancel
Save