Skip to content

Commit 49d2c33

Browse files
committed
Storage indexing
1 parent 0892b80 commit 49d2c33

File tree

9 files changed

+124
-159
lines changed

9 files changed

+124
-159
lines changed

src/command/compute.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ pub extern "C" fn wgpu_compute_pass_end_pass(pass_id: ComputePassId) -> CommandB
3838

3939
HUB.command_buffers
4040
.write()
41-
.get_mut(pass.cmb_id.value)
42-
.raw
41+
[pass.cmb_id.value].raw
4342
.push(pass.raw);
4443
pass.cmb_id.value
4544
}
@@ -49,8 +48,7 @@ pub extern "C" fn wgpu_compute_pass_dispatch(pass_id: ComputePassId, x: u32, y:
4948
unsafe {
5049
HUB.compute_passes
5150
.write()
52-
.get_mut(pass_id)
53-
.raw
51+
[pass_id].raw
5452
.dispatch([x, y, z]);
5553
}
5654
}
@@ -62,9 +60,9 @@ pub extern "C" fn wgpu_compute_pass_set_bind_group(
6260
bind_group_id: BindGroupId,
6361
) {
6462
let mut pass_guard = HUB.compute_passes.write();
65-
let pass = pass_guard.get_mut(pass_id);
63+
let pass = &mut pass_guard[pass_id];
6664
let bind_group_guard = HUB.bind_groups.read();
67-
let bind_group = bind_group_guard.get(bind_group_id);
65+
let bind_group = &bind_group_guard[bind_group_id];
6866

6967
//Note: currently, WebGPU compute passes have synchronization defined
7068
// at a dispatch granularity, so we insert the necessary barriers here.
@@ -81,10 +79,9 @@ pub extern "C" fn wgpu_compute_pass_set_bind_group(
8179

8280
if let Some(pipeline_layout_id) = pass.binder.provide_entry(index as usize, bind_group_id, bind_group) {
8381
let pipeline_layout_guard = HUB.pipeline_layouts.read();
84-
let pipeline_layout = pipeline_layout_guard.get(pipeline_layout_id);
8582
unsafe {
8683
pass.raw.bind_compute_descriptor_sets(
87-
&pipeline_layout.raw,
84+
&pipeline_layout_guard[pipeline_layout_id].raw,
8885
index as usize,
8986
iter::once(&bind_group.raw),
9087
&[],
@@ -99,9 +96,9 @@ pub extern "C" fn wgpu_compute_pass_set_pipeline(
9996
pipeline_id: ComputePipelineId,
10097
) {
10198
let mut pass_guard = HUB.compute_passes.write();
102-
let pass = pass_guard.get_mut(pass_id);
99+
let pass = &mut pass_guard[pass_id];
103100
let pipeline_guard = HUB.compute_pipelines.read();
104-
let pipeline = pipeline_guard.get(pipeline_id);
101+
let pipeline = &pipeline_guard[pipeline_id];
105102

106103
unsafe {
107104
pass.raw.bind_compute_pipeline(&pipeline.raw);
@@ -112,7 +109,7 @@ pub extern "C" fn wgpu_compute_pass_set_pipeline(
112109
}
113110

114111
let pipeline_layout_guard = HUB.pipeline_layouts.read();
115-
let pipeline_layout = pipeline_layout_guard.get(pipeline.layout_id);
112+
let pipeline_layout = &pipeline_layout_guard[pipeline.layout_id];
116113
let bing_group_guard = HUB.bind_groups.read();
117114

118115
pass.binder.pipeline_layout_id = Some(pipeline.layout_id.clone());
@@ -124,12 +121,12 @@ pub extern "C" fn wgpu_compute_pass_set_pipeline(
124121
.enumerate()
125122
{
126123
if let Some(bg_id) = entry.expect_layout(bgl_id) {
127-
let bind_group = bing_group_guard.get(bg_id);
124+
let desc_set = &bing_group_guard[bg_id].raw;
128125
unsafe {
129126
pass.raw.bind_compute_descriptor_sets(
130127
&pipeline_layout.raw,
131128
index,
132-
iter::once(&bind_group.raw),
129+
iter::once(desc_set),
133130
&[]
134131
);
135132
}

src/command/mod.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ impl CommandBufferHandle {
102102
{
103103

104104
let buffer_barriers = buffer_iter.map(|(id, transit)| {
105-
let b = buffer_guard.get(id);
105+
let b = &buffer_guard[id];
106106
trace!("transit {:?} {:?}", id, transit);
107107
hal::memory::Barrier::Buffer {
108108
states: conv::map_buffer_state(transit.start) .. conv::map_buffer_state(transit.end),
@@ -112,7 +112,7 @@ impl CommandBufferHandle {
112112
}
113113
});
114114
let texture_barriers = texture_iter.map(|(id, transit)| {
115-
let t = texture_guard.get(id);
115+
let t = &texture_guard[id];
116116
trace!("transit {:?} {:?}", id, transit);
117117
let aspects = t.full_range.aspects;
118118
hal::memory::Barrier::Image {
@@ -148,7 +148,7 @@ pub extern "C" fn wgpu_command_encoder_finish(
148148
) -> CommandBufferId {
149149
HUB.command_buffers
150150
.write()
151-
.get_mut(command_encoder_id)
151+
[command_encoder_id]
152152
.is_recording = false; //TODO: check for the old value
153153
command_encoder_id
154154
}
@@ -158,9 +158,9 @@ pub fn command_encoder_begin_render_pass(
158158
desc: RenderPassDescriptor,
159159
) -> RenderPass<Backend> {
160160
let mut cmb_guard = HUB.command_buffers.write();
161-
let cmb = cmb_guard.get_mut(command_encoder_id);
161+
let cmb = &mut cmb_guard[command_encoder_id];
162162
let device_guard = HUB.devices.read();
163-
let device = device_guard.get(cmb.device_id.value);
163+
let device = &device_guard[cmb.device_id.value];
164164
let view_guard = HUB.texture_views.read();
165165

166166
let mut current_comb = device.com_allocator.extend(cmb);
@@ -187,7 +187,7 @@ pub fn command_encoder_begin_render_pass(
187187
let swap_chain_links = &mut cmb.swap_chain_links;
188188

189189
let depth_stencil_key = depth_stencil_attachment.map(|at| {
190-
let view = view_guard.get(at.attachment);
190+
let view = &view_guard[at.attachment];
191191
if let Some(ex) = extent {
192192
assert_eq!(ex, view.extent);
193193
} else {
@@ -213,13 +213,12 @@ pub fn command_encoder_begin_render_pass(
213213
});
214214

215215
let color_keys = color_attachments.iter().map(|at| {
216-
let view = view_guard.get(at.attachment);
216+
let view = &view_guard[at.attachment];
217217

218218
if view.is_owned_by_swap_chain {
219219
let link = match HUB.textures
220220
.read()
221-
.get(view.texture_id.value)
222-
.swap_chain_link
221+
[view.texture_id.value].swap_chain_link
223222
{
224223
Some(ref link) => SwapChainLink {
225224
swap_chain_id: link.swap_chain_id.clone(),
@@ -308,7 +307,7 @@ pub fn command_encoder_begin_render_pass(
308307
.key()
309308
.attachments
310309
.iter()
311-
.map(|&id| &view_guard.get(id).raw);
310+
.map(|&id| &view_guard[id].raw);
312311

313312
unsafe {
314313
device
@@ -381,7 +380,7 @@ pub fn command_encoder_begin_compute_pass(
381380
command_encoder_id: CommandEncoderId,
382381
) -> ComputePass<Backend> {
383382
let mut cmb_guard = HUB.command_buffers.write();
384-
let cmb = cmb_guard.get_mut(command_encoder_id);
383+
let cmb = &mut cmb_guard[command_encoder_id];
385384

386385
let raw = cmb.raw.pop().unwrap();
387386
let stored = Stored {

src/command/render.rs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub extern "C" fn wgpu_render_pass_end_pass(pass_id: RenderPassId) -> CommandBuf
3838
}
3939

4040
let mut cmb_guard = HUB.command_buffers.write();
41-
let cmb = cmb_guard.get_mut(pass.cmb_id.value);
41+
let cmb = &mut cmb_guard[pass.cmb_id.value];
4242

4343
match cmb.raw.last_mut() {
4444
Some(ref mut last) => {
@@ -73,7 +73,7 @@ pub extern "C" fn wgpu_render_pass_set_index_buffer(
7373
let mut pass_guard = HUB.render_passes.write();
7474
let buffer_guard = HUB.buffers.read();
7575

76-
let pass = pass_guard.get_mut(pass_id);
76+
let pass = &mut pass_guard[pass_id];
7777
let buffer = pass.trackers.buffers
7878
.get_with_extended_usage(
7979
&*buffer_guard,
@@ -109,7 +109,7 @@ pub extern "C" fn wgpu_render_pass_set_vertex_buffers(
109109
slice::from_raw_parts(offset_ptr, count)
110110
};
111111

112-
let pass = pass_guard.get_mut(pass_id);
112+
let pass = &mut pass_guard[pass_id];
113113
for &id in buffers {
114114
pass.trackers.buffers
115115
.get_with_extended_usage(
@@ -122,7 +122,7 @@ pub extern "C" fn wgpu_render_pass_set_vertex_buffers(
122122

123123
let buffers = buffers
124124
.iter()
125-
.map(|&id| &buffer_guard.get(id).raw)
125+
.map(|&id| &buffer_guard[id].raw)
126126
.zip(offsets.iter().map(|&off| off as u64));
127127

128128
unsafe {
@@ -141,8 +141,7 @@ pub extern "C" fn wgpu_render_pass_draw(
141141
unsafe {
142142
HUB.render_passes
143143
.write()
144-
.get_mut(pass_id)
145-
.raw
144+
[pass_id].raw
146145
.draw(
147146
first_vertex .. first_vertex + vertex_count,
148147
first_instance .. first_instance + instance_count,
@@ -162,8 +161,7 @@ pub extern "C" fn wgpu_render_pass_draw_indexed(
162161
unsafe {
163162
HUB.render_passes
164163
.write()
165-
.get_mut(pass_id)
166-
.raw
164+
[pass_id].raw
167165
.draw_indexed(
168166
first_index .. first_index + index_count,
169167
base_vertex,
@@ -179,9 +177,9 @@ pub extern "C" fn wgpu_render_pass_set_bind_group(
179177
bind_group_id: BindGroupId,
180178
) {
181179
let mut pass_guard = HUB.render_passes.write();
182-
let pass = pass_guard.get_mut(pass_id);
180+
let pass = &mut pass_guard[pass_id];
183181
let bind_group_guard = HUB.bind_groups.read();
184-
let bind_group = bind_group_guard.get(bind_group_id);
182+
let bind_group = &bind_group_guard[bind_group_id];
185183

186184
pass.trackers.buffers
187185
.consume_by_extend(&bind_group.used.buffers)
@@ -193,7 +191,7 @@ pub extern "C" fn wgpu_render_pass_set_bind_group(
193191

194192
if let Some(pipeline_layout_id) = pass.binder.provide_entry(index as usize, bind_group_id, bind_group) {
195193
let pipeline_layout_guard = HUB.pipeline_layouts.read();
196-
let pipeline_layout = pipeline_layout_guard.get(pipeline_layout_id);
194+
let pipeline_layout = &pipeline_layout_guard[pipeline_layout_id];
197195
unsafe {
198196
pass.raw.bind_graphics_descriptor_sets(
199197
&pipeline_layout.raw,
@@ -211,9 +209,9 @@ pub extern "C" fn wgpu_render_pass_set_pipeline(
211209
pipeline_id: RenderPipelineId,
212210
) {
213211
let mut pass_guard = HUB.render_passes.write();
214-
let pass = pass_guard.get_mut(pass_id);
212+
let pass = &mut pass_guard[pass_id];
215213
let pipeline_guard = HUB.render_pipelines.read();
216-
let pipeline = pipeline_guard.get(pipeline_id);
214+
let pipeline = &pipeline_guard[pipeline_id];
217215

218216
unsafe {
219217
pass.raw.bind_graphics_pipeline(&pipeline.raw);
@@ -224,7 +222,7 @@ pub extern "C" fn wgpu_render_pass_set_pipeline(
224222
}
225223

226224
let pipeline_layout_guard = HUB.pipeline_layouts.read();
227-
let pipeline_layout = pipeline_layout_guard.get(pipeline.layout_id);
225+
let pipeline_layout = &pipeline_layout_guard[pipeline.layout_id];
228226
let bing_group_guard = HUB.bind_groups.read();
229227

230228
pass.binder.pipeline_layout_id = Some(pipeline.layout_id.clone());
@@ -236,12 +234,12 @@ pub extern "C" fn wgpu_render_pass_set_pipeline(
236234
.enumerate()
237235
{
238236
if let Some(bg_id) = entry.expect_layout(bgl_id) {
239-
let bind_group = bing_group_guard.get(bg_id);
237+
let desc_set = &bing_group_guard[bg_id].raw;
240238
unsafe {
241239
pass.raw.bind_graphics_descriptor_sets(
242240
&pipeline_layout.raw,
243241
index,
244-
iter::once(&bind_group.raw),
242+
iter::once(desc_set),
245243
&[]
246244
);
247245
}

src/command/transfer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub extern "C" fn wgpu_command_buffer_copy_buffer_to_buffer(
4242
size: u32,
4343
) {
4444
let mut cmb_guard = HUB.command_buffers.write();
45-
let cmb = cmb_guard.get_mut(command_buffer_id);
45+
let cmb = &mut cmb_guard[command_buffer_id];
4646
let buffer_guard = HUB.buffers.read();
4747

4848
let (src_buffer, src_usage) = cmb.trackers.buffers
@@ -101,7 +101,7 @@ pub extern "C" fn wgpu_command_buffer_copy_buffer_to_texture(
101101
copy_size: Extent3d,
102102
) {
103103
let mut cmb_guard = HUB.command_buffers.write();
104-
let cmb = cmb_guard.get_mut(command_buffer_id);
104+
let cmb = &mut cmb_guard[command_buffer_id];
105105
let buffer_guard = HUB.buffers.read();
106106
let texture_guard = HUB.textures.read();
107107

@@ -184,7 +184,7 @@ pub extern "C" fn wgpu_command_buffer_copy_texture_to_buffer(
184184
copy_size: Extent3d,
185185
) {
186186
let mut cmb_guard = HUB.command_buffers.write();
187-
let cmb = cmb_guard.get_mut(command_buffer_id);
187+
let cmb = &mut cmb_guard[command_buffer_id];
188188
let buffer_guard = HUB.buffers.read();
189189
let texture_guard = HUB.textures.read();
190190

@@ -260,7 +260,7 @@ pub extern "C" fn wgpu_command_buffer_copy_texture_to_texture(
260260
copy_size: Extent3d,
261261
) {
262262
let mut cmb_guard = HUB.command_buffers.write();
263-
let cmb = cmb_guard.get_mut(command_buffer_id);
263+
let cmb = &mut cmb_guard[command_buffer_id];
264264
let texture_guard = HUB.textures.read();
265265

266266
let (src_texture, src_usage) = cmb.trackers.textures

0 commit comments

Comments
 (0)