- auto i = find_if(buffers, [size](const StagingBuffer &b){ return b.used+size<=b.size; });
- if(i==buffers.end())
- {
- buffers.emplace_back(device, max(default_buffer_size, size));
- i = prev(buffers.end());
- }
+ allocate_staging(transfer, size);
+ auto i = lower_bound_member(async_transfers, transfer.staging_address, &PendingTransfer::staging_address);
+ i = async_transfers.emplace(i, move(transfer));
+ return *i;
+ }
+ else
+ return insert_transfer(move(transfer));
+}
+
+void TransferQueue::finalize_transfer(void *staging)
+{
+ auto i = lower_bound_member(async_transfers, staging, &PendingTransfer::staging_address);
+ if(i==async_transfers.end() || i->staging_address!=staging)
+ throw key_error(staging);