Fix Xenoblade

This commit is contained in:
MaranBr 2026-06-05 08:54:30 -04:00
parent 48219f348c
commit b49b103226

View file

@ -1619,6 +1619,7 @@ void BufferCache<P>::TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept {
template <class P>
bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 size) {
upload_copies.clear();
boost::container::small_vector<std::pair<u64, u64>, 8> uploaded_ranges;
u64 staging_offset = 0;
u64 largest_copy = 0;
DAddr buffer_start = buffer.CpuAddr();
@ -1632,6 +1633,7 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
.dst_offset = start - buffer_start,
.size = sz
});
uploaded_ranges.emplace_back(start, sz);
staging_offset += sz;
largest_copy = (std::max)(largest_copy, sz);
};
@ -1644,9 +1646,11 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
start = (std::max)(start, gend);
});
push(start, end);
});
for (const auto& [addr, range_size] : uploaded_ranges) {
ClearDownload(addr, range_size);
gpu_modified_ranges.Subtract(addr, range_size);
});
}
if (upload_copies.empty()) {
return true;
}