Skip to content

Commit ad6774f

Browse files
Wumpfcwfitzgerald
andauthored
Remove exposed C symbols from renderpass/computepass recording (#5409)
Co-authored-by: Connor Fitzgerald <[email protected]>
1 parent c1291bd commit ad6774f

File tree

8 files changed

+148
-343
lines changed

8 files changed

+148
-343
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ Bottom level categories:
154154
- Failing to set the device lost closure will call the closure before returning. By @bradwerth in [#5358](https://github.com/gfx-rs/wgpu/pull/5358).
155155
- Use memory pooling for UsageScopes to avoid frequent large allocations. by @robtfm in [#5414](https://github.com/gfx-rs/wgpu/pull/5414)
156156
- Fix deadlocks caused by recursive read-write lock acquisitions [#5426](https://github.com/gfx-rs/wgpu/pull/5426).
157+
- Remove exposed C symbols (`extern "C"` + [no_mangle]) from RenderPass & ComputePass recording. By @wumpf in [#5409](https://github.com/gfx-rs/wgpu/pull/5409).
157158
- Fix surfaces being only compatible with first backend enabled on an instance, causing failures when manually specifying an adapter. By @Wumpf in [#5535](https://github.com/gfx-rs/wgpu/pull/5535).
158159

159160
#### Naga

deno_webgpu/compute_pass.rs

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub fn op_webgpu_compute_pass_set_pipeline(
3131
.resource_table
3232
.get::<WebGpuComputePass>(compute_pass_rid)?;
3333

34-
wgpu_core::command::compute_ffi::wgpu_compute_pass_set_pipeline(
34+
wgpu_core::command::compute_commands::wgpu_compute_pass_set_pipeline(
3535
&mut compute_pass_resource.0.borrow_mut(),
3636
compute_pipeline_resource.1,
3737
);
@@ -52,7 +52,7 @@ pub fn op_webgpu_compute_pass_dispatch_workgroups(
5252
.resource_table
5353
.get::<WebGpuComputePass>(compute_pass_rid)?;
5454

55-
wgpu_core::command::compute_ffi::wgpu_compute_pass_dispatch_workgroups(
55+
wgpu_core::command::compute_commands::wgpu_compute_pass_dispatch_workgroups(
5656
&mut compute_pass_resource.0.borrow_mut(),
5757
x,
5858
y,
@@ -77,7 +77,7 @@ pub fn op_webgpu_compute_pass_dispatch_workgroups_indirect(
7777
.resource_table
7878
.get::<WebGpuComputePass>(compute_pass_rid)?;
7979

80-
wgpu_core::command::compute_ffi::wgpu_compute_pass_dispatch_workgroups_indirect(
80+
wgpu_core::command::compute_commands::wgpu_compute_pass_dispatch_workgroups_indirect(
8181
&mut compute_pass_resource.0.borrow_mut(),
8282
buffer_resource.1,
8383
indirect_offset,
@@ -137,17 +137,12 @@ pub fn op_webgpu_compute_pass_set_bind_group(
137137

138138
let dynamic_offsets_data: &[u32] = &dynamic_offsets_data[start..start + len];
139139

140-
// SAFETY: the raw pointer and length are of the same slice, and that slice
141-
// lives longer than the below function invocation.
142-
unsafe {
143-
wgpu_core::command::compute_ffi::wgpu_compute_pass_set_bind_group(
144-
&mut compute_pass_resource.0.borrow_mut(),
145-
index,
146-
bind_group_resource.1,
147-
dynamic_offsets_data.as_ptr(),
148-
dynamic_offsets_data.len(),
149-
);
150-
}
140+
wgpu_core::command::compute_commands::wgpu_compute_pass_set_bind_group(
141+
&mut compute_pass_resource.0.borrow_mut(),
142+
index,
143+
bind_group_resource.1,
144+
dynamic_offsets_data,
145+
);
151146

152147
Ok(WebGpuResult::empty())
153148
}
@@ -163,16 +158,11 @@ pub fn op_webgpu_compute_pass_push_debug_group(
163158
.resource_table
164159
.get::<WebGpuComputePass>(compute_pass_rid)?;
165160

166-
let label = std::ffi::CString::new(group_label).unwrap();
167-
// SAFETY: the string the raw pointer points to lives longer than the below
168-
// function invocation.
169-
unsafe {
170-
wgpu_core::command::compute_ffi::wgpu_compute_pass_push_debug_group(
171-
&mut compute_pass_resource.0.borrow_mut(),
172-
label.as_ptr(),
173-
0, // wgpu#975
174-
);
175-
}
161+
wgpu_core::command::compute_commands::wgpu_compute_pass_push_debug_group(
162+
&mut compute_pass_resource.0.borrow_mut(),
163+
group_label,
164+
0, // wgpu#975
165+
);
176166

177167
Ok(WebGpuResult::empty())
178168
}
@@ -187,7 +177,7 @@ pub fn op_webgpu_compute_pass_pop_debug_group(
187177
.resource_table
188178
.get::<WebGpuComputePass>(compute_pass_rid)?;
189179

190-
wgpu_core::command::compute_ffi::wgpu_compute_pass_pop_debug_group(
180+
wgpu_core::command::compute_commands::wgpu_compute_pass_pop_debug_group(
191181
&mut compute_pass_resource.0.borrow_mut(),
192182
);
193183

@@ -205,16 +195,11 @@ pub fn op_webgpu_compute_pass_insert_debug_marker(
205195
.resource_table
206196
.get::<WebGpuComputePass>(compute_pass_rid)?;
207197

208-
let label = std::ffi::CString::new(marker_label).unwrap();
209-
// SAFETY: the string the raw pointer points to lives longer than the below
210-
// function invocation.
211-
unsafe {
212-
wgpu_core::command::compute_ffi::wgpu_compute_pass_insert_debug_marker(
213-
&mut compute_pass_resource.0.borrow_mut(),
214-
label.as_ptr(),
215-
0, // wgpu#975
216-
);
217-
}
198+
wgpu_core::command::compute_commands::wgpu_compute_pass_insert_debug_marker(
199+
&mut compute_pass_resource.0.borrow_mut(),
200+
marker_label,
201+
0, // wgpu#975
202+
);
218203

219204
Ok(WebGpuResult::empty())
220205
}

deno_webgpu/render_pass.rs

Lines changed: 33 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub fn op_webgpu_render_pass_set_viewport(
4141
.resource_table
4242
.get::<WebGpuRenderPass>(args.render_pass_rid)?;
4343

44-
wgpu_core::command::render_ffi::wgpu_render_pass_set_viewport(
44+
wgpu_core::command::render_commands::wgpu_render_pass_set_viewport(
4545
&mut render_pass_resource.0.borrow_mut(),
4646
args.x,
4747
args.y,
@@ -68,7 +68,7 @@ pub fn op_webgpu_render_pass_set_scissor_rect(
6868
.resource_table
6969
.get::<WebGpuRenderPass>(render_pass_rid)?;
7070

71-
wgpu_core::command::render_ffi::wgpu_render_pass_set_scissor_rect(
71+
wgpu_core::command::render_commands::wgpu_render_pass_set_scissor_rect(
7272
&mut render_pass_resource.0.borrow_mut(),
7373
x,
7474
y,
@@ -90,7 +90,7 @@ pub fn op_webgpu_render_pass_set_blend_constant(
9090
.resource_table
9191
.get::<WebGpuRenderPass>(render_pass_rid)?;
9292

93-
wgpu_core::command::render_ffi::wgpu_render_pass_set_blend_constant(
93+
wgpu_core::command::render_commands::wgpu_render_pass_set_blend_constant(
9494
&mut render_pass_resource.0.borrow_mut(),
9595
&color,
9696
);
@@ -109,7 +109,7 @@ pub fn op_webgpu_render_pass_set_stencil_reference(
109109
.resource_table
110110
.get::<WebGpuRenderPass>(render_pass_rid)?;
111111

112-
wgpu_core::command::render_ffi::wgpu_render_pass_set_stencil_reference(
112+
wgpu_core::command::render_commands::wgpu_render_pass_set_stencil_reference(
113113
&mut render_pass_resource.0.borrow_mut(),
114114
reference,
115115
);
@@ -128,7 +128,7 @@ pub fn op_webgpu_render_pass_begin_occlusion_query(
128128
.resource_table
129129
.get::<WebGpuRenderPass>(render_pass_rid)?;
130130

131-
wgpu_core::command::render_ffi::wgpu_render_pass_begin_occlusion_query(
131+
wgpu_core::command::render_commands::wgpu_render_pass_begin_occlusion_query(
132132
&mut render_pass_resource.0.borrow_mut(),
133133
query_index,
134134
);
@@ -146,7 +146,7 @@ pub fn op_webgpu_render_pass_end_occlusion_query(
146146
.resource_table
147147
.get::<WebGpuRenderPass>(render_pass_rid)?;
148148

149-
wgpu_core::command::render_ffi::wgpu_render_pass_end_occlusion_query(
149+
wgpu_core::command::render_commands::wgpu_render_pass_end_occlusion_query(
150150
&mut render_pass_resource.0.borrow_mut(),
151151
);
152152

@@ -174,15 +174,10 @@ pub fn op_webgpu_render_pass_execute_bundles(
174174
.resource_table
175175
.get::<WebGpuRenderPass>(render_pass_rid)?;
176176

177-
// SAFETY: the raw pointer and length are of the same slice, and that slice
178-
// lives longer than the below function invocation.
179-
unsafe {
180-
wgpu_core::command::render_ffi::wgpu_render_pass_execute_bundles(
181-
&mut render_pass_resource.0.borrow_mut(),
182-
bundles.as_ptr(),
183-
bundles.len(),
184-
);
185-
}
177+
wgpu_core::command::render_commands::wgpu_render_pass_execute_bundles(
178+
&mut render_pass_resource.0.borrow_mut(),
179+
&bundles,
180+
);
186181

187182
Ok(WebGpuResult::empty())
188183
}
@@ -235,17 +230,12 @@ pub fn op_webgpu_render_pass_set_bind_group(
235230

236231
let dynamic_offsets_data: &[u32] = &dynamic_offsets_data[start..start + len];
237232

238-
// SAFETY: the raw pointer and length are of the same slice, and that slice
239-
// lives longer than the below function invocation.
240-
unsafe {
241-
wgpu_core::command::render_ffi::wgpu_render_pass_set_bind_group(
242-
&mut render_pass_resource.0.borrow_mut(),
243-
index,
244-
bind_group_resource.1,
245-
dynamic_offsets_data.as_ptr(),
246-
dynamic_offsets_data.len(),
247-
);
248-
}
233+
wgpu_core::command::render_commands::wgpu_render_pass_set_bind_group(
234+
&mut render_pass_resource.0.borrow_mut(),
235+
index,
236+
bind_group_resource.1,
237+
dynamic_offsets_data,
238+
);
249239

250240
Ok(WebGpuResult::empty())
251241
}
@@ -261,16 +251,11 @@ pub fn op_webgpu_render_pass_push_debug_group(
261251
.resource_table
262252
.get::<WebGpuRenderPass>(render_pass_rid)?;
263253

264-
let label = std::ffi::CString::new(group_label).unwrap();
265-
// SAFETY: the string the raw pointer points to lives longer than the below
266-
// function invocation.
267-
unsafe {
268-
wgpu_core::command::render_ffi::wgpu_render_pass_push_debug_group(
269-
&mut render_pass_resource.0.borrow_mut(),
270-
label.as_ptr(),
271-
0, // wgpu#975
272-
);
273-
}
254+
wgpu_core::command::render_commands::wgpu_render_pass_push_debug_group(
255+
&mut render_pass_resource.0.borrow_mut(),
256+
group_label,
257+
0, // wgpu#975
258+
);
274259

275260
Ok(WebGpuResult::empty())
276261
}
@@ -285,7 +270,7 @@ pub fn op_webgpu_render_pass_pop_debug_group(
285270
.resource_table
286271
.get::<WebGpuRenderPass>(render_pass_rid)?;
287272

288-
wgpu_core::command::render_ffi::wgpu_render_pass_pop_debug_group(
273+
wgpu_core::command::render_commands::wgpu_render_pass_pop_debug_group(
289274
&mut render_pass_resource.0.borrow_mut(),
290275
);
291276

@@ -303,16 +288,11 @@ pub fn op_webgpu_render_pass_insert_debug_marker(
303288
.resource_table
304289
.get::<WebGpuRenderPass>(render_pass_rid)?;
305290

306-
let label = std::ffi::CString::new(marker_label).unwrap();
307-
// SAFETY: the string the raw pointer points to lives longer than the below
308-
// function invocation.
309-
unsafe {
310-
wgpu_core::command::render_ffi::wgpu_render_pass_insert_debug_marker(
311-
&mut render_pass_resource.0.borrow_mut(),
312-
label.as_ptr(),
313-
0, // wgpu#975
314-
);
315-
}
291+
wgpu_core::command::render_commands::wgpu_render_pass_insert_debug_marker(
292+
&mut render_pass_resource.0.borrow_mut(),
293+
marker_label,
294+
0, // wgpu#975
295+
);
316296

317297
Ok(WebGpuResult::empty())
318298
}
@@ -331,7 +311,7 @@ pub fn op_webgpu_render_pass_set_pipeline(
331311
.resource_table
332312
.get::<WebGpuRenderPass>(render_pass_rid)?;
333313

334-
wgpu_core::command::render_ffi::wgpu_render_pass_set_pipeline(
314+
wgpu_core::command::render_commands::wgpu_render_pass_set_pipeline(
335315
&mut render_pass_resource.0.borrow_mut(),
336316
render_pipeline_resource.1,
337317
);
@@ -401,7 +381,7 @@ pub fn op_webgpu_render_pass_set_vertex_buffer(
401381
None
402382
};
403383

404-
wgpu_core::command::render_ffi::wgpu_render_pass_set_vertex_buffer(
384+
wgpu_core::command::render_commands::wgpu_render_pass_set_vertex_buffer(
405385
&mut render_pass_resource.0.borrow_mut(),
406386
slot,
407387
buffer_resource.1,
@@ -426,7 +406,7 @@ pub fn op_webgpu_render_pass_draw(
426406
.resource_table
427407
.get::<WebGpuRenderPass>(render_pass_rid)?;
428408

429-
wgpu_core::command::render_ffi::wgpu_render_pass_draw(
409+
wgpu_core::command::render_commands::wgpu_render_pass_draw(
430410
&mut render_pass_resource.0.borrow_mut(),
431411
vertex_count,
432412
instance_count,
@@ -452,7 +432,7 @@ pub fn op_webgpu_render_pass_draw_indexed(
452432
.resource_table
453433
.get::<WebGpuRenderPass>(render_pass_rid)?;
454434

455-
wgpu_core::command::render_ffi::wgpu_render_pass_draw_indexed(
435+
wgpu_core::command::render_commands::wgpu_render_pass_draw_indexed(
456436
&mut render_pass_resource.0.borrow_mut(),
457437
index_count,
458438
instance_count,
@@ -479,7 +459,7 @@ pub fn op_webgpu_render_pass_draw_indirect(
479459
.resource_table
480460
.get::<WebGpuRenderPass>(render_pass_rid)?;
481461

482-
wgpu_core::command::render_ffi::wgpu_render_pass_draw_indirect(
462+
wgpu_core::command::render_commands::wgpu_render_pass_draw_indirect(
483463
&mut render_pass_resource.0.borrow_mut(),
484464
buffer_resource.1,
485465
indirect_offset,
@@ -503,7 +483,7 @@ pub fn op_webgpu_render_pass_draw_indexed_indirect(
503483
.resource_table
504484
.get::<WebGpuRenderPass>(render_pass_rid)?;
505485

506-
wgpu_core::command::render_ffi::wgpu_render_pass_draw_indexed_indirect(
486+
wgpu_core::command::render_commands::wgpu_render_pass_draw_indexed_indirect(
507487
&mut render_pass_resource.0.borrow_mut(),
508488
buffer_resource.1,
509489
indirect_offset,

wgpu-core/src/command/bundle.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1548,15 +1548,14 @@ pub mod bundle_ffi {
15481548
offsets: *const DynamicOffset,
15491549
offset_length: usize,
15501550
) {
1551-
let redundant = unsafe {
1552-
bundle.current_bind_groups.set_and_check_redundant(
1553-
bind_group_id,
1554-
index,
1555-
&mut bundle.base.dynamic_offsets,
1556-
offsets,
1557-
offset_length,
1558-
)
1559-
};
1551+
let offsets = unsafe { slice::from_raw_parts(offsets, offset_length) };
1552+
1553+
let redundant = bundle.current_bind_groups.set_and_check_redundant(
1554+
bind_group_id,
1555+
index,
1556+
&mut bundle.base.dynamic_offsets,
1557+
offsets,
1558+
);
15601559

15611560
if redundant {
15621561
return;

0 commit comments

Comments
 (0)