@ -1634,15 +1634,17 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
if ( total_size_bytes = = 0 ) {
return true ;
}
u64 min_offset = ( std : : numeric_limits < u64 > : : max ) ( ) ;
u64 max_offset = 0 ;
for ( const auto & copy : upload_copies ) {
min_offset = ( std : : min ) ( min_offset , copy . dst_offset ) ;
max_offset = ( std : : max ) ( max_offset , copy . dst_offset + copy . size ) ;
}
const DAddr sync_addr = buffer . CpuAddr ( ) + min_offset ;
const u64 sync_size = max_offset - min_offset ;
DownloadBufferMemory ( buffer , sync_addr , sync_size ) ;
if ( Settings : : values . enable_gpu_buffer_readback . GetValue ( ) ) {
u64 min_offset = ( std : : numeric_limits < u64 > : : max ) ( ) ;
u64 max_offset = 0 ;
for ( const auto & copy : upload_copies ) {
min_offset = ( std : : min ) ( min_offset , copy . dst_offset ) ;
max_offset = ( std : : max ) ( max_offset , copy . dst_offset + copy . size ) ;
}
const DAddr sync_addr = buffer . CpuAddr ( ) + min_offset ;
const u64 sync_size = max_offset - min_offset ;
DownloadBufferMemory ( buffer , sync_addr , sync_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 ;