Better approach

This commit is contained in:
MaranBr 2026-05-27 15:02:42 -04:00 committed by crueter
parent d487174683
commit 4fb57db6a1

View file

@ -1623,6 +1623,11 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
u64 largest_copy = 0;
const DAddr buffer_start = buffer.cpu_addr_cached;
memory_tracker.ForEachUploadRange(device_addr, size, [&](u64 device_addr_out, u64 range_size) {
bool gpu_modified = false;
gpu_modified_ranges.ForEachInRange(device_addr_out, range_size, [&](u64, u64) { gpu_modified = true; });
if (gpu_modified) {
return;
}
upload_copies.push_back(BufferCopy{
.src_offset = total_size_bytes,
.dst_offset = device_addr_out - buffer_start,
@ -1634,9 +1639,6 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
if (total_size_bytes == 0) {
return true;
}
if (memory_tracker.IsRegionGpuModified(device_addr, size)) {
DownloadBufferMemory(buffer, device_addr, size);
}
const std::span<BufferCopy> copies_span(upload_copies.data(), upload_copies.size());
UploadMemory(buffer, total_size_bytes, largest_copy, copies_span);
any_buffer_uploaded = true;