Browse Source

Fix Xenoblade

buffer_cache
MaranBr 2 days ago
parent
commit
b49b103226
  1. 6
      src/video_core/buffer_cache/buffer_cache.h

6
src/video_core/buffer_cache/buffer_cache.h

@ -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;
}

Loading…
Cancel
Save