Skip to content

Commit 8d36adc

Browse files
WIP: fix(core): make write_buffer immediately write to CPU-backed buffers
TODO: This definitely doesn't work. Fix it!
1 parent a360732 commit 8d36adc

1 file changed

Lines changed: 27 additions & 20 deletions

File tree

wgpu-core/src/device/queue.rs

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -692,27 +692,34 @@ impl Queue {
692692

693693
self.validate_write_buffer_impl(&buffer, buffer_offset, staging_buffer.size)?;
694694

695-
let region = hal::BufferCopy {
696-
src_offset: 0,
697-
dst_offset: buffer_offset,
698-
size: staging_buffer.size,
699-
};
700-
let barriers = iter::once(hal::BufferBarrier {
701-
buffer: staging_buffer.raw(),
702-
usage: hal::StateTransition {
703-
from: wgt::BufferUses::MAP_WRITE,
704-
to: wgt::BufferUses::COPY_SRC,
705-
},
706-
})
707-
.chain(transition.map(|pending| pending.into_hal(&buffer, snatch_guard)))
708-
.collect::<Vec<_>>();
709-
let encoder = pending_writes.activate();
710-
unsafe {
711-
encoder.transition_buffers(&barriers);
712-
encoder.copy_buffer_to_buffer(staging_buffer.raw(), dst_raw, &[region]);
713-
}
695+
if buffer
696+
.usage
697+
.intersects(wgt::BufferUsages::MAP_READ | wgt::BufferUsages::MAP_WRITE)
698+
{
699+
let asdf = buffer.raw(&self.device.snatchable_lock.read()).unwrap();
700+
} else {
701+
let region = hal::BufferCopy {
702+
src_offset: 0,
703+
dst_offset: buffer_offset,
704+
size: staging_buffer.size,
705+
};
706+
let barriers = iter::once(hal::BufferBarrier {
707+
buffer: staging_buffer.raw(),
708+
usage: hal::StateTransition {
709+
from: wgt::BufferUses::MAP_WRITE,
710+
to: wgt::BufferUses::COPY_SRC,
711+
},
712+
})
713+
.chain(transition.map(|pending| pending.into_hal(&buffer, snatch_guard)))
714+
.collect::<Vec<_>>();
715+
let encoder = pending_writes.activate();
716+
unsafe {
717+
encoder.transition_buffers(&barriers);
718+
encoder.copy_buffer_to_buffer(staging_buffer.raw(), dst_raw, &[region]);
719+
}
714720

715-
pending_writes.insert_buffer(&buffer);
721+
pending_writes.insert_buffer(&buffer);
722+
}
716723

717724
// Ensure the overwritten bytes are marked as initialized so
718725
// they don't need to be nulled prior to mapping or binding.

0 commit comments

Comments
 (0)