mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-06-06 01:13:45 -04:00
Even better
This commit is contained in:
parent
4fb57db6a1
commit
94f54c7bc7
1 changed files with 9 additions and 5 deletions
|
|
@ -1621,11 +1621,11 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
|
|||
upload_copies.clear();
|
||||
u64 total_size_bytes = 0;
|
||||
u64 largest_copy = 0;
|
||||
const DAddr buffer_start = buffer.cpu_addr_cached;
|
||||
DAddr buffer_start = buffer.cpu_addr_cached;
|
||||
bool needs_download = false;
|
||||
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) {
|
||||
if (IsRegionGpuModified(device_addr_out, range_size)) {
|
||||
needs_download = true;
|
||||
return;
|
||||
}
|
||||
upload_copies.push_back(BufferCopy{
|
||||
|
|
@ -1636,10 +1636,14 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
|
|||
total_size_bytes += range_size;
|
||||
largest_copy = (std::max)(largest_copy, range_size);
|
||||
});
|
||||
if (needs_download) {
|
||||
DownloadBufferMemory(buffer, device_addr, size);
|
||||
return false;
|
||||
}
|
||||
if (total_size_bytes == 0) {
|
||||
return true;
|
||||
}
|
||||
const std::span<BufferCopy> copies_span(upload_copies.data(), upload_copies.size());
|
||||
std::span<BufferCopy> copies_span(upload_copies.data(), upload_copies.size());
|
||||
UploadMemory(buffer, total_size_bytes, largest_copy, copies_span);
|
||||
any_buffer_uploaded = true;
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue