in crates/ratchet-core/src/gpu/buffer_allocator/allocator.rs [100:129]
fn graph_allocate(
&self,
descriptor: BufferDescriptor,
free: &mut Vec<PooledGPUBuffer>,
device: &WgpuDevice,
) -> PooledGPUBuffer {
let required_size = descriptor.size as _;
let mut closest_index = None;
let mut closest_size_diff: Option<usize> = None;
for (idx, buffer) in free.iter().enumerate() {
let current_size = buffer.descriptor.size as _;
if current_size >= required_size {
let size_diff = usize::abs_diff(current_size, required_size);
if closest_size_diff.map_or(true, |diff| size_diff < diff) {
closest_index = Some(idx);
closest_size_diff = Some(size_diff);
}
}
}
if std::env::var("RATCHET_DEBUG").is_ok() {
return self.create_buffer(&descriptor, device, true);
}
match closest_index {
Some(idx) => free.remove(idx),
None => self.create_buffer(&descriptor, device, true),
}
}