Skip to content

Commit bf0e146

Browse files
committed
Refactor insert_barriers
1 parent aa76b6e commit bf0e146

File tree

5 files changed

+53
-53
lines changed

5 files changed

+53
-53
lines changed

src/command/compute.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,10 @@ pub extern "C" fn wgpu_compute_pass_set_bind_group(
6767
//Note: currently, WebGPU compute passes have synchronization defined
6868
// at a dispatch granularity, so we insert the necessary barriers here.
6969

70-
//TODO: have `TrackerSet::consume()` ?
7170
CommandBuffer::insert_barriers(
7271
&mut pass.raw,
73-
pass.trackers.buffers.consume_by_replace(&bind_group.used.buffers),
74-
pass.trackers.textures.consume_by_replace(&bind_group.used.textures),
72+
&mut pass.trackers,
73+
&bind_group.used,
7574
&*HUB.buffers.read(),
7675
&*HUB.textures.read(),
7776
);

src/command/mod.rs

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ use crate::track::TrackerSet;
2020
use crate::conv;
2121
use crate::{
2222
BufferHandle, TextureHandle,
23-
BufferId, CommandBufferId, CommandEncoderId, DeviceId,
24-
TextureId, TextureViewId,
25-
BufferUsageFlags, TextureUsageFlags, Color,
23+
CommandBufferId, CommandEncoderId, DeviceId,
24+
TextureViewId,
25+
TextureUsageFlags, Color,
2626
LifeGuard, Stored,
2727
CommandBufferHandle,
2828
};
@@ -35,7 +35,6 @@ use hal::{Device as _Device};
3535
use log::trace;
3636

3737
use std::collections::hash_map::Entry;
38-
use std::ops::Range;
3938
use std::{iter, slice};
4039
use std::thread::ThreadId;
4140

@@ -91,39 +90,40 @@ pub struct CommandBuffer<B: hal::Backend> {
9190
}
9291

9392
impl CommandBufferHandle {
94-
pub(crate) fn insert_barriers<I, J>(
93+
pub(crate) fn insert_barriers(
9594
raw: &mut <Backend as hal::Backend>::CommandBuffer,
96-
buffer_iter: I,
97-
texture_iter: J,
95+
base: &mut TrackerSet,
96+
head: &TrackerSet,
9897
buffer_guard: &Storage<BufferHandle>,
9998
texture_guard: &Storage<TextureHandle>,
100-
) where
101-
I: Iterator<Item = (BufferId, Range<BufferUsageFlags>)>,
102-
J: Iterator<Item = (TextureId, Range<TextureUsageFlags>)>,
103-
{
104-
105-
let buffer_barriers = buffer_iter.map(|(id, transit)| {
106-
let b = &buffer_guard[id];
107-
trace!("transit {:?} {:?}", id, transit);
108-
hal::memory::Barrier::Buffer {
109-
states: conv::map_buffer_state(transit.start) .. conv::map_buffer_state(transit.end),
110-
target: &b.raw,
111-
range: None .. None,
112-
families: None,
113-
}
114-
});
115-
let texture_barriers = texture_iter.map(|(id, transit)| {
116-
let t = &texture_guard[id];
117-
trace!("transit {:?} {:?}", id, transit);
118-
let aspects = t.full_range.aspects;
119-
hal::memory::Barrier::Image {
120-
states: conv::map_texture_state(transit.start, aspects)
121-
..conv::map_texture_state(transit.end, aspects),
122-
target: &t.raw,
123-
range: t.full_range.clone(), //TODO?
124-
families: None,
125-
}
126-
});
99+
) {
100+
let buffer_barriers = base.buffers
101+
.consume_by_replace(&head.buffers)
102+
.map(|(id, transit)| {
103+
let b = &buffer_guard[id];
104+
trace!("transit buffer {:?} {:?}", id, transit);
105+
hal::memory::Barrier::Buffer {
106+
states: conv::map_buffer_state(transit.start) .. conv::map_buffer_state(transit.end),
107+
target: &b.raw,
108+
range: None .. None,
109+
families: None,
110+
}
111+
});
112+
let texture_barriers = base.textures
113+
.consume_by_replace(&head.textures)
114+
.map(|(id, transit)| {
115+
let t = &texture_guard[id];
116+
trace!("transit texture {:?} {:?}", id, transit);
117+
let aspects = t.full_range.aspects;
118+
hal::memory::Barrier::Image {
119+
states: conv::map_texture_state(transit.start, aspects)
120+
..conv::map_texture_state(transit.end, aspects),
121+
target: &t.raw,
122+
range: t.full_range.clone(), //TODO?
123+
families: None,
124+
}
125+
});
126+
base.views.consume(&head.views);
127127

128128
let stages = all_buffer_stages() | all_image_stages();
129129
unsafe {

src/command/render.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,17 @@ pub extern "C" fn wgpu_render_pass_end_pass(pass_id: RenderPassId) -> CommandBuf
4444
Some(ref mut last) => {
4545
CommandBuffer::insert_barriers(
4646
last,
47-
cmb.trackers.buffers.consume_by_replace(&pass.trackers.buffers),
48-
cmb.trackers.textures.consume_by_replace(&pass.trackers.textures),
47+
&mut cmb.trackers,
48+
&pass.trackers,
4949
&*HUB.buffers.read(),
5050
&*HUB.textures.read(),
5151
);
5252
unsafe { last.finish() };
5353
}
5454
None => {
55-
cmb.trackers.buffers
56-
.consume_by_extend(&pass.trackers.buffers)
57-
.unwrap();
58-
cmb.trackers.textures
59-
.consume_by_extend(&pass.trackers.textures)
60-
.unwrap();
55+
cmb.trackers.consume_by_extend(&pass.trackers);
6156
}
6257
}
63-
cmb.trackers.views.consume(&pass.trackers.views);
6458

6559
cmb.raw.push(pass.raw);
6660
pass.cmb_id.value

src/device.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use crate::{
1212
#[cfg(feature = "local")]
1313
use crate::{
1414
BindGroupLayoutId, PipelineLayoutId, SamplerId, SwapChainId,
15-
ShaderModuleId, CommandEncoderId, RenderPipelineId, ComputePipelineId,
15+
ShaderModuleId, CommandEncoderId, RenderPipelineId, ComputePipelineId,
1616
};
1717

1818
use arrayvec::ArrayVec;
@@ -1072,16 +1072,13 @@ pub extern "C" fn wgpu_queue_submit(
10721072
hal::command::CommandBufferInheritanceInfo::default(),
10731073
);
10741074
}
1075-
//TODO: fix the consume
1076-
let TrackerSet { ref mut buffers, ref mut textures, ref mut views } = *trackers;
10771075
command::CommandBuffer::insert_barriers(
10781076
&mut transit,
1079-
buffers.consume_by_replace(&comb.trackers.buffers),
1080-
textures.consume_by_replace(&comb.trackers.textures),
1077+
&mut *trackers,
1078+
&comb.trackers,
10811079
&*buffer_guard,
10821080
&*texture_guard,
10831081
);
1084-
views.consume(&comb.trackers.views);
10851082
unsafe {
10861083
transit.finish();
10871084
}
@@ -1751,4 +1748,4 @@ pub extern "C" fn wgpu_buffer_unmap(
17511748
}
17521749

17531750
unsafe { device.raw.unmap_memory(&buffer.memory) };
1754-
}
1751+
}

src/track.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,16 @@ impl TrackerSet {
103103
views: TextureViewTracker::new(),
104104
}
105105
}
106+
107+
pub fn consume_by_extend(&mut self, other: &Self) {
108+
self.buffers
109+
.consume_by_extend(&other.buffers)
110+
.unwrap();
111+
self.textures
112+
.consume_by_extend(&other.textures)
113+
.unwrap();
114+
self.views.consume(&other.views);
115+
}
106116
}
107117

108118
impl<I: NewId> DummyTracker<I> {

0 commit comments

Comments
 (0)