Skip to content

Commit 8f18a00

Browse files
committed
Use Global::render_bundle_encoder_* instead of bundle_ffi
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
1 parent b01f04e commit 8f18a00

2 files changed

Lines changed: 66 additions & 94 deletions

File tree

deno_webgpu/render_bundle.rs

Lines changed: 32 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,6 @@ use crate::get_data_slice;
2222
use crate::texture::GPUTextureFormat;
2323
use crate::Instance;
2424

25-
fn c_string_truncated_at_first_nul<T: Into<Vec<u8>>>(
26-
src: T,
27-
) -> std::ffi::CString {
28-
std::ffi::CString::new(src).unwrap_or_else(|err| {
29-
let nul_pos = err.nul_position();
30-
std::ffi::CString::new(err.into_vec().split_at(nul_pos).0).unwrap()
31-
})
32-
}
33-
3425
pub struct GPURenderBundleEncoder {
3526
pub instance: Instance,
3627
pub error_handler: super::error::ErrorHandler,
@@ -98,15 +89,9 @@ impl GPURenderBundleEncoder {
9889
JsErrorBox::generic("Encoder has already been finished")
9990
})?;
10091

101-
let label = c_string_truncated_at_first_nul(group_label);
102-
// SAFETY: the string the raw pointer points to lives longer than the below
103-
// function invocation.
104-
unsafe {
105-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_push_debug_group(
106-
encoder,
107-
label.as_ptr(),
108-
);
109-
}
92+
self
93+
.instance
94+
.render_bundle_encoder_push_debug_group(encoder, &group_label);
11095

11196
Ok(())
11297
}
@@ -118,7 +103,7 @@ impl GPURenderBundleEncoder {
118103
let encoder = encoder.as_mut().ok_or_else(|| {
119104
JsErrorBox::generic("Encoder has already been finished")
120105
})?;
121-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_pop_debug_group(encoder);
106+
self.instance.render_bundle_encoder_pop_debug_group(encoder);
122107
Ok(())
123108
}
124109

@@ -132,15 +117,9 @@ impl GPURenderBundleEncoder {
132117
JsErrorBox::generic("Encoder has already been finished")
133118
})?;
134119

135-
let label = c_string_truncated_at_first_nul(marker_label);
136-
// SAFETY: the string the raw pointer points to lives longer than the below
137-
// function invocation.
138-
unsafe {
139-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_insert_debug_marker(
140-
encoder,
141-
label.as_ptr(),
142-
);
143-
}
120+
self
121+
.instance
122+
.render_bundle_encoder_insert_debug_marker(encoder, &marker_label);
144123
Ok(())
145124
}
146125

@@ -193,16 +172,12 @@ impl GPURenderBundleEncoder {
193172

194173
let offsets = &data[start..(start + len)];
195174

196-
// SAFETY: wgpu FFI call
197-
unsafe {
198-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_bind_group(
199-
encoder,
200-
index,
201-
bind_group.into_option().map(|bind_group| bind_group.id),
202-
offsets.as_ptr(),
203-
offsets.len(),
204-
);
205-
}
175+
self.instance.render_bundle_encoder_set_bind_group(
176+
encoder,
177+
index,
178+
bind_group.into_option().map(|bind_group| bind_group.id),
179+
offsets,
180+
);
206181
} else {
207182
let offsets = <Option<Vec<u32>>>::convert(
208183
scope,
@@ -216,16 +191,12 @@ impl GPURenderBundleEncoder {
216191
)?
217192
.unwrap_or_default();
218193

219-
// SAFETY: wgpu FFI call
220-
unsafe {
221-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_bind_group(
222-
encoder,
223-
index,
224-
bind_group.into_option().map(|bind_group| bind_group.id),
225-
offsets.as_ptr(),
226-
offsets.len(),
227-
);
228-
}
194+
self.instance.render_bundle_encoder_set_bind_group(
195+
encoder,
196+
index,
197+
bind_group.into_option().map(|bind_group| bind_group.id),
198+
&offsets,
199+
);
229200
}
230201

231202
Ok(())
@@ -241,10 +212,9 @@ impl GPURenderBundleEncoder {
241212
JsErrorBox::generic("Encoder has already been finished")
242213
})?;
243214

244-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_pipeline(
245-
encoder,
246-
pipeline.id,
247-
);
215+
self
216+
.instance
217+
.render_bundle_encoder_set_pipeline(encoder, pipeline.id);
248218
Ok(())
249219
}
250220

@@ -262,7 +232,8 @@ impl GPURenderBundleEncoder {
262232
JsErrorBox::generic("Encoder has already been finished")
263233
})?;
264234

265-
encoder.set_index_buffer(
235+
self.instance.render_bundle_encoder_set_index_buffer(
236+
encoder,
266237
buffer.id,
267238
index_format.into(),
268239
offset,
@@ -285,7 +256,7 @@ impl GPURenderBundleEncoder {
285256
JsErrorBox::generic("Encoder has already been finished")
286257
})?;
287258

288-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_vertex_buffer(
259+
self.instance.render_bundle_encoder_set_vertex_buffer(
289260
encoder,
290261
slot,
291262
buffer.into_option().map(|buffer| buffer.id),
@@ -309,7 +280,7 @@ impl GPURenderBundleEncoder {
309280
JsErrorBox::generic("Encoder has already been finished")
310281
})?;
311282

312-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_draw(
283+
self.instance.render_bundle_encoder_draw(
313284
encoder,
314285
vertex_count,
315286
instance_count,
@@ -334,7 +305,7 @@ impl GPURenderBundleEncoder {
334305
JsErrorBox::generic("Encoder has already been finished")
335306
})?;
336307

337-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_draw_indexed(
308+
self.instance.render_bundle_encoder_draw_indexed(
338309
encoder,
339310
index_count,
340311
instance_count,
@@ -357,7 +328,7 @@ impl GPURenderBundleEncoder {
357328
JsErrorBox::generic("Encoder has already been finished")
358329
})?;
359330

360-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_draw_indirect(
331+
self.instance.render_bundle_encoder_draw_indirect(
361332
encoder,
362333
indirect_buffer.id,
363334
indirect_offset,
@@ -377,7 +348,7 @@ impl GPURenderBundleEncoder {
377348
JsErrorBox::generic("Encoder has already been finished")
378349
})?;
379350

380-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_draw_indexed_indirect(
351+
self.instance.render_bundle_encoder_draw_indexed_indirect(
381352
encoder,
382353
indirect_buffer.id,
383354
indirect_offset,
@@ -402,14 +373,9 @@ impl GPURenderBundleEncoder {
402373
JsErrorBox::generic("Encoder has already been finished")
403374
})?;
404375

405-
unsafe {
406-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_immediates(
407-
encoder,
408-
offset,
409-
data.len().try_into().unwrap(),
410-
data.as_ptr(),
411-
);
412-
}
376+
self
377+
.instance
378+
.render_bundle_encoder_set_immediates(encoder, offset, data);
413379
Ok(())
414380
}
415381
}

wgpu/src/backend/wgpu_core.rs

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use hashbrown::HashMap;
2121
use arrayvec::ArrayVec;
2222
use smallvec::SmallVec;
2323
use wgc::{
24-
command::bundle_ffi::*, error::ContextErrorSource, pipeline::CreateShaderModuleError,
24+
error::ContextErrorSource, pipeline::CreateShaderModuleError,
2525
resource::BlasPrepareCompactResult,
2626
};
2727
use wgt::{
@@ -3795,7 +3795,9 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
37953795
fn set_pipeline(&mut self, pipeline: &dispatch::DispatchRenderPipeline) {
37963796
let pipeline = pipeline.as_core();
37973797

3798-
wgpu_render_bundle_set_pipeline(&mut self.encoder, pipeline.id)
3798+
self.context
3799+
.0
3800+
.render_bundle_encoder_set_pipeline(&mut self.encoder, pipeline.id);
37993801
}
38003802

38013803
fn set_bind_group(
@@ -3806,15 +3808,9 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
38063808
) {
38073809
let bg = bind_group.map(|bg| bg.as_core().id);
38083810

3809-
unsafe {
3810-
wgpu_render_bundle_set_bind_group(
3811-
&mut self.encoder,
3812-
index,
3813-
bg,
3814-
offsets.as_ptr(),
3815-
offsets.len(),
3816-
)
3817-
}
3811+
self.context
3812+
.0
3813+
.render_bundle_encoder_set_bind_group(&mut self.encoder, index, bg, offsets)
38183814
}
38193815

38203816
fn set_index_buffer(
@@ -3826,8 +3822,13 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
38263822
) {
38273823
let buffer = buffer.as_core();
38283824

3829-
self.encoder
3830-
.set_index_buffer(buffer.id, index_format, offset, size)
3825+
self.context.0.render_bundle_encoder_set_index_buffer(
3826+
&mut self.encoder,
3827+
buffer.id,
3828+
index_format,
3829+
offset,
3830+
size,
3831+
);
38313832
}
38323833

38333834
fn set_vertex_buffer(
@@ -3839,39 +3840,40 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
38393840
) {
38403841
let buffer = buffer.map(|buffer| buffer.as_core().id);
38413842

3842-
wgpu_render_bundle_set_vertex_buffer(&mut self.encoder, slot, buffer, offset, size)
3843+
self.context.0.render_bundle_encoder_set_vertex_buffer(
3844+
&mut self.encoder,
3845+
slot,
3846+
buffer,
3847+
offset,
3848+
size,
3849+
);
38433850
}
38443851

38453852
fn set_immediates(&mut self, offset: u32, data: &[u8]) {
3846-
unsafe {
3847-
wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_immediates(
3848-
&mut self.encoder,
3849-
offset,
3850-
data.len().try_into().unwrap(),
3851-
data.as_ptr(),
3852-
);
3853-
}
3853+
self.context
3854+
.0
3855+
.render_bundle_encoder_set_immediates(&mut self.encoder, offset, data);
38543856
}
38553857

38563858
fn draw(&mut self, vertices: Range<u32>, instances: Range<u32>) {
3857-
wgpu_render_bundle_draw(
3859+
self.context.0.render_bundle_encoder_draw(
38583860
&mut self.encoder,
38593861
vertices.end - vertices.start,
38603862
instances.end - instances.start,
38613863
vertices.start,
38623864
instances.start,
3863-
)
3865+
);
38643866
}
38653867

38663868
fn draw_indexed(&mut self, indices: Range<u32>, base_vertex: i32, instances: Range<u32>) {
3867-
wgpu_render_bundle_draw_indexed(
3869+
self.context.0.render_bundle_encoder_draw_indexed(
38683870
&mut self.encoder,
38693871
indices.end - indices.start,
38703872
instances.end - instances.start,
38713873
indices.start,
38723874
base_vertex,
38733875
instances.start,
3874-
)
3876+
);
38753877
}
38763878

38773879
fn draw_indirect(
@@ -3881,7 +3883,11 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
38813883
) {
38823884
let indirect_buffer = indirect_buffer.as_core();
38833885

3884-
wgpu_render_bundle_draw_indirect(&mut self.encoder, indirect_buffer.id, indirect_offset)
3886+
self.context.0.render_bundle_encoder_draw_indirect(
3887+
&mut self.encoder,
3888+
indirect_buffer.id,
3889+
indirect_offset,
3890+
)
38853891
}
38863892

38873893
fn draw_indexed_indirect(
@@ -3891,7 +3897,7 @@ impl dispatch::RenderBundleEncoderInterface for CoreRenderBundleEncoder {
38913897
) {
38923898
let indirect_buffer = indirect_buffer.as_core();
38933899

3894-
wgpu_render_bundle_draw_indexed_indirect(
3900+
self.context.0.render_bundle_encoder_draw_indexed_indirect(
38953901
&mut self.encoder,
38963902
indirect_buffer.id,
38973903
indirect_offset,

0 commit comments

Comments
 (0)