Skip to content

Commit 61e5124

Browse files
[deno] Return undefined instead of null from WebGPU APIs (#8266)
See denoland/deno#29603
1 parent 2b71b1f commit 61e5124

File tree

10 files changed

+63
-4
lines changed

10 files changed

+63
-4
lines changed

deno_webgpu/buffer.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ impl GPUBuffer {
114114
*self.map_state.borrow()
115115
}
116116

117+
// In the successful case, the promise should resolve to undefined, but
118+
// `#[undefined]` does not seem to work here.
119+
// https://github.com/denoland/deno/issues/29603
117120
#[async_method]
118121
async fn map_async(
119122
&self,
@@ -250,6 +253,7 @@ impl GPUBuffer {
250253
}
251254

252255
#[nofast]
256+
#[undefined]
253257
fn unmap(&self, scope: &mut v8::HandleScope) -> Result<(), BufferError> {
254258
for ab in self.mapped_js_buffers.replace(vec![]) {
255259
let ab = ab.open(scope);
@@ -267,6 +271,7 @@ impl GPUBuffer {
267271
}
268272

269273
#[fast]
274+
#[undefined]
270275
fn destroy(&self) {
271276
self.instance.buffer_destroy(self.id);
272277
}

deno_webgpu/command_encoder.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ impl GPUCommandEncoder {
193193
}
194194

195195
#[required(2)]
196+
#[undefined]
196197
fn copy_buffer_to_buffer<'a>(
197198
&self,
198199
scope: &mut v8::HandleScope<'a>,
@@ -282,6 +283,7 @@ impl GPUCommandEncoder {
282283
}
283284

284285
#[required(3)]
286+
#[undefined]
285287
fn copy_buffer_to_texture(
286288
&self,
287289
#[webidl] source: GPUTexelCopyBufferInfo,
@@ -317,6 +319,7 @@ impl GPUCommandEncoder {
317319
}
318320

319321
#[required(3)]
322+
#[undefined]
320323
fn copy_texture_to_buffer(
321324
&self,
322325
#[webidl] source: GPUTexelCopyTextureInfo,
@@ -352,6 +355,7 @@ impl GPUCommandEncoder {
352355
}
353356

354357
#[required(3)]
358+
#[undefined]
355359
fn copy_texture_to_texture(
356360
&self,
357361
#[webidl] source: GPUTexelCopyTextureInfo,
@@ -385,6 +389,7 @@ impl GPUCommandEncoder {
385389
}
386390

387391
#[required(1)]
392+
#[undefined]
388393
fn clear_buffer(
389394
&self,
390395
#[webidl] buffer: Ptr<GPUBuffer>,
@@ -399,6 +404,7 @@ impl GPUCommandEncoder {
399404
}
400405

401406
#[required(5)]
407+
#[undefined]
402408
fn resolve_query_set(
403409
&self,
404410
#[webidl] query_set: Ptr<super::query_set::GPUQuerySet>,

deno_webgpu/compute_pass.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ impl GPUComputePassEncoder {
4949
// TODO(@crowlKats): no-op, needs wpgu to implement changing the label
5050
}
5151

52+
#[undefined]
5253
fn set_pipeline(
5354
&self,
5455
#[webidl] pipeline: Ptr<crate::compute_pipeline::GPUComputePipeline>,
@@ -63,6 +64,7 @@ impl GPUComputePassEncoder {
6364
self.error_handler.push_error(err);
6465
}
6566

67+
#[undefined]
6668
fn dispatch_workgroups(
6769
&self,
6870
#[webidl(options(enforce_range = true))] work_group_count_x: u32,
@@ -83,6 +85,7 @@ impl GPUComputePassEncoder {
8385
self.error_handler.push_error(err);
8486
}
8587

88+
#[undefined]
8689
fn dispatch_workgroups_indirect(
8790
&self,
8891
#[webidl] indirect_buffer: Ptr<crate::buffer::GPUBuffer>,
@@ -100,6 +103,7 @@ impl GPUComputePassEncoder {
100103
}
101104

102105
#[fast]
106+
#[undefined]
103107
fn end(&self) {
104108
let err = self
105109
.instance
@@ -108,6 +112,7 @@ impl GPUComputePassEncoder {
108112
self.error_handler.push_error(err);
109113
}
110114

115+
#[undefined]
111116
fn push_debug_group(&self, #[webidl] group_label: String) {
112117
let err = self
113118
.instance
@@ -121,6 +126,7 @@ impl GPUComputePassEncoder {
121126
}
122127

123128
#[fast]
129+
#[undefined]
124130
fn pop_debug_group(&self) {
125131
let err = self
126132
.instance
@@ -129,6 +135,7 @@ impl GPUComputePassEncoder {
129135
self.error_handler.push_error(err);
130136
}
131137

138+
#[undefined]
132139
fn insert_debug_marker(&self, #[webidl] marker_label: String) {
133140
let err = self
134141
.instance
@@ -141,6 +148,7 @@ impl GPUComputePassEncoder {
141148
self.error_handler.push_error(err);
142149
}
143150

151+
#[undefined]
144152
fn set_bind_group<'a>(
145153
&self,
146154
scope: &mut v8::HandleScope<'a>,

deno_webgpu/device.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ impl GPUDevice {
142142
}
143143

144144
#[fast]
145+
#[undefined]
145146
fn destroy(&self) {
146147
self.instance.device_destroy(self.id);
147148
self
@@ -634,6 +635,7 @@ impl GPUDevice {
634635
}
635636

636637
#[required(1)]
638+
#[undefined]
637639
fn push_error_scope(&self, #[webidl] filter: super::error::GPUErrorFilter) {
638640
self
639641
.error_handler

deno_webgpu/query_set.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ impl GPUQuerySet {
5353
}
5454

5555
#[fast]
56+
#[undefined]
5657
fn destroy(&self) -> Result<(), JsErrorBox> {
5758
// TODO(https://github.com/gfx-rs/wgpu/issues/6495): Destroy the query
5859
// set. Until that is supported, it is okay to do nothing here, the

deno_webgpu/queue.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use std::time::Duration;
77
use deno_core::cppgc::Ptr;
88
use deno_core::futures::channel::oneshot;
99
use deno_core::op2;
10-
use deno_core::v8;
1110
use deno_core::GarbageCollected;
1211
use deno_core::WebIDL;
1312
use deno_error::JsErrorBox;
@@ -63,11 +62,11 @@ impl GPUQueue {
6362
}
6463

6564
#[required(1)]
65+
#[undefined]
6666
fn submit(
6767
&self,
68-
scope: &mut v8::HandleScope,
6968
#[webidl] command_buffers: Vec<Ptr<GPUCommandBuffer>>,
70-
) -> Result<v8::Local<v8::Value>, JsErrorBox> {
69+
) -> Result<(), JsErrorBox> {
7170
let ids = command_buffers
7271
.into_iter()
7372
.map(|cb| cb.id)
@@ -79,9 +78,12 @@ impl GPUQueue {
7978
self.error_handler.push_error(Some(err));
8079
}
8180

82-
Ok(v8::undefined(scope).into())
81+
Ok(())
8382
}
8483

84+
// In the successful case, the promise should resolve to undefined, but
85+
// `#[undefined]` does not seem to work here.
86+
// https://github.com/denoland/deno/issues/29603
8587
#[async_method]
8688
async fn on_submitted_work_done(&self) -> Result<(), JsErrorBox> {
8789
let (sender, receiver) = oneshot::channel::<()>();
@@ -124,6 +126,7 @@ impl GPUQueue {
124126
}
125127

126128
#[required(3)]
129+
#[undefined]
127130
fn write_buffer(
128131
&self,
129132
#[webidl] buffer: Ptr<GPUBuffer>,
@@ -148,6 +151,7 @@ impl GPUQueue {
148151
}
149152

150153
#[required(4)]
154+
#[undefined]
151155
fn write_texture(
152156
&self,
153157
#[webidl] destination: GPUTexelCopyTextureInfo,

deno_webgpu/render_bundle.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ impl GPURenderBundleEncoder {
8787
}
8888
}
8989

90+
#[undefined]
9091
fn push_debug_group(
9192
&self,
9293
#[webidl] group_label: String,
@@ -110,6 +111,7 @@ impl GPURenderBundleEncoder {
110111
}
111112

112113
#[fast]
114+
#[undefined]
113115
fn pop_debug_group(&self) -> Result<(), JsErrorBox> {
114116
let mut encoder = self.encoder.borrow_mut();
115117
let encoder = encoder.as_mut().ok_or_else(|| {
@@ -119,6 +121,7 @@ impl GPURenderBundleEncoder {
119121
Ok(())
120122
}
121123

124+
#[undefined]
122125
fn insert_debug_marker(
123126
&self,
124127
#[webidl] marker_label: String,
@@ -140,6 +143,7 @@ impl GPURenderBundleEncoder {
140143
Ok(())
141144
}
142145

146+
#[undefined]
143147
fn set_bind_group<'a>(
144148
&self,
145149
scope: &mut v8::HandleScope<'a>,
@@ -226,6 +230,7 @@ impl GPURenderBundleEncoder {
226230
Ok(())
227231
}
228232

233+
#[undefined]
229234
fn set_pipeline(
230235
&self,
231236
#[webidl] pipeline: Ptr<crate::render_pipeline::GPURenderPipeline>,
@@ -243,6 +248,7 @@ impl GPURenderBundleEncoder {
243248
}
244249

245250
#[required(2)]
251+
#[undefined]
246252
fn set_index_buffer(
247253
&self,
248254
#[webidl] buffer: Ptr<GPUBuffer>,
@@ -265,6 +271,7 @@ impl GPURenderBundleEncoder {
265271
}
266272

267273
#[required(2)]
274+
#[undefined]
268275
fn set_vertex_buffer(
269276
&self,
270277
#[webidl(options(enforce_range = true))] slot: u32,
@@ -288,6 +295,7 @@ impl GPURenderBundleEncoder {
288295
}
289296

290297
#[required(1)]
298+
#[undefined]
291299
fn draw(
292300
&self,
293301
#[webidl(options(enforce_range = true))] vertex_count: u32,
@@ -311,6 +319,7 @@ impl GPURenderBundleEncoder {
311319
}
312320

313321
#[required(1)]
322+
#[undefined]
314323
fn draw_indexed(
315324
&self,
316325
#[webidl(options(enforce_range = true))] index_count: u32,
@@ -336,6 +345,7 @@ impl GPURenderBundleEncoder {
336345
}
337346

338347
#[required(2)]
348+
#[undefined]
339349
fn draw_indirect(
340350
&self,
341351
#[webidl] indirect_buffer: Ptr<GPUBuffer>,
@@ -355,6 +365,7 @@ impl GPURenderBundleEncoder {
355365
}
356366

357367
#[required(2)]
368+
#[undefined]
358369
fn draw_indexed_indirect(
359370
&self,
360371
#[webidl] indirect_buffer: Ptr<GPUBuffer>,

0 commit comments

Comments
 (0)