11// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
22
3- use deno_core:: error:: type_error;
4- use deno_core:: error:: AnyError ;
53use deno_core:: op2;
64use deno_core:: OpState ;
75use deno_core:: Resource ;
@@ -13,6 +11,14 @@ use std::rc::Rc;
1311
1412use super :: error:: WebGpuResult ;
1513
14+ #[ derive( Debug , thiserror:: Error ) ]
15+ pub enum BundleError {
16+ #[ error( transparent) ]
17+ Resource ( deno_core:: error:: AnyError ) ,
18+ #[ error( "size must be larger than 0" ) ]
19+ InvalidSize ,
20+ }
21+
1622struct WebGpuRenderBundleEncoder (
1723 RefCell < wgpu_core:: command:: RenderBundleEncoder > ,
1824) ;
@@ -53,7 +59,7 @@ pub struct CreateRenderBundleEncoderArgs {
5359pub fn op_webgpu_create_render_bundle_encoder (
5460 state : & mut OpState ,
5561 #[ serde] args : CreateRenderBundleEncoderArgs ,
56- ) -> Result < WebGpuResult , AnyError > {
62+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
5763 let device_resource = state
5864 . resource_table
5965 . get :: < super :: WebGpuDevice > ( args. device_rid ) ?;
@@ -100,7 +106,7 @@ pub fn op_webgpu_render_bundle_encoder_finish(
100106 state : & mut OpState ,
101107 #[ smi] render_bundle_encoder_rid : ResourceId ,
102108 #[ string] label : Cow < str > ,
103- ) -> Result < WebGpuResult , AnyError > {
109+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
104110 let render_bundle_encoder_resource =
105111 state
106112 . resource_table
@@ -131,7 +137,7 @@ pub fn op_webgpu_render_bundle_encoder_set_bind_group(
131137 #[ buffer] dynamic_offsets_data : & [ u32 ] ,
132138 #[ number] dynamic_offsets_data_start : usize ,
133139 #[ number] dynamic_offsets_data_length : usize ,
134- ) -> Result < WebGpuResult , AnyError > {
140+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
135141 let bind_group_resource =
136142 state
137143 . resource_table
@@ -171,7 +177,7 @@ pub fn op_webgpu_render_bundle_encoder_push_debug_group(
171177 state : & mut OpState ,
172178 #[ smi] render_bundle_encoder_rid : ResourceId ,
173179 #[ string] group_label : & str ,
174- ) -> Result < WebGpuResult , AnyError > {
180+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
175181 let render_bundle_encoder_resource =
176182 state
177183 . resource_table
@@ -195,7 +201,7 @@ pub fn op_webgpu_render_bundle_encoder_push_debug_group(
195201pub fn op_webgpu_render_bundle_encoder_pop_debug_group (
196202 state : & mut OpState ,
197203 #[ smi] render_bundle_encoder_rid : ResourceId ,
198- ) -> Result < WebGpuResult , AnyError > {
204+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
199205 let render_bundle_encoder_resource =
200206 state
201207 . resource_table
@@ -214,7 +220,7 @@ pub fn op_webgpu_render_bundle_encoder_insert_debug_marker(
214220 state : & mut OpState ,
215221 #[ smi] render_bundle_encoder_rid : ResourceId ,
216222 #[ string] marker_label : & str ,
217- ) -> Result < WebGpuResult , AnyError > {
223+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
218224 let render_bundle_encoder_resource =
219225 state
220226 . resource_table
@@ -239,7 +245,7 @@ pub fn op_webgpu_render_bundle_encoder_set_pipeline(
239245 state : & mut OpState ,
240246 #[ smi] render_bundle_encoder_rid : ResourceId ,
241247 #[ smi] pipeline : ResourceId ,
242- ) -> Result < WebGpuResult , AnyError > {
248+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
243249 let render_pipeline_resource =
244250 state
245251 . resource_table
@@ -266,18 +272,17 @@ pub fn op_webgpu_render_bundle_encoder_set_index_buffer(
266272 #[ serde] index_format : wgpu_types:: IndexFormat ,
267273 #[ number] offset : u64 ,
268274 #[ number] size : u64 ,
269- ) -> Result < WebGpuResult , AnyError > {
275+ ) -> Result < WebGpuResult , BundleError > {
270276 let buffer_resource = state
271277 . resource_table
272- . get :: < super :: buffer:: WebGpuBuffer > ( buffer) ?;
273- let render_bundle_encoder_resource =
274- state
275- . resource_table
276- . get :: < WebGpuRenderBundleEncoder > ( render_bundle_encoder_rid) ?;
277- let size = Some (
278- std:: num:: NonZeroU64 :: new ( size)
279- . ok_or_else ( || type_error ( "size must be larger than 0" ) ) ?,
280- ) ;
278+ . get :: < super :: buffer:: WebGpuBuffer > ( buffer)
279+ . map_err ( BundleError :: Resource ) ?;
280+ let render_bundle_encoder_resource = state
281+ . resource_table
282+ . get :: < WebGpuRenderBundleEncoder > ( render_bundle_encoder_rid)
283+ . map_err ( BundleError :: Resource ) ?;
284+ let size =
285+ Some ( std:: num:: NonZeroU64 :: new ( size) . ok_or ( BundleError :: InvalidSize ) ?) ;
281286
282287 render_bundle_encoder_resource
283288 . 0
@@ -296,19 +301,17 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer(
296301 #[ smi] buffer : ResourceId ,
297302 #[ number] offset : u64 ,
298303 #[ number] size : Option < u64 > ,
299- ) -> Result < WebGpuResult , AnyError > {
304+ ) -> Result < WebGpuResult , BundleError > {
300305 let buffer_resource = state
301306 . resource_table
302- . get :: < super :: buffer:: WebGpuBuffer > ( buffer) ?;
303- let render_bundle_encoder_resource =
304- state
305- . resource_table
306- . get :: < WebGpuRenderBundleEncoder > ( render_bundle_encoder_rid) ?;
307+ . get :: < super :: buffer:: WebGpuBuffer > ( buffer)
308+ . map_err ( BundleError :: Resource ) ?;
309+ let render_bundle_encoder_resource = state
310+ . resource_table
311+ . get :: < WebGpuRenderBundleEncoder > ( render_bundle_encoder_rid)
312+ . map_err ( BundleError :: Resource ) ?;
307313 let size = if let Some ( size) = size {
308- Some (
309- std:: num:: NonZeroU64 :: new ( size)
310- . ok_or_else ( || type_error ( "size must be larger than 0" ) ) ?,
311- )
314+ Some ( std:: num:: NonZeroU64 :: new ( size) . ok_or ( BundleError :: InvalidSize ) ?)
312315 } else {
313316 None
314317 } ;
@@ -333,7 +336,7 @@ pub fn op_webgpu_render_bundle_encoder_draw(
333336 instance_count : u32 ,
334337 first_vertex : u32 ,
335338 first_instance : u32 ,
336- ) -> Result < WebGpuResult , AnyError > {
339+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
337340 let render_bundle_encoder_resource =
338341 state
339342 . resource_table
@@ -360,7 +363,7 @@ pub fn op_webgpu_render_bundle_encoder_draw_indexed(
360363 first_index : u32 ,
361364 base_vertex : i32 ,
362365 first_instance : u32 ,
363- ) -> Result < WebGpuResult , AnyError > {
366+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
364367 let render_bundle_encoder_resource =
365368 state
366369 . resource_table
@@ -385,7 +388,7 @@ pub fn op_webgpu_render_bundle_encoder_draw_indirect(
385388 #[ smi] render_bundle_encoder_rid : ResourceId ,
386389 #[ smi] indirect_buffer : ResourceId ,
387390 #[ number] indirect_offset : u64 ,
388- ) -> Result < WebGpuResult , AnyError > {
391+ ) -> Result < WebGpuResult , deno_core :: error :: AnyError > {
389392 let buffer_resource = state
390393 . resource_table
391394 . get :: < super :: buffer:: WebGpuBuffer > ( indirect_buffer) ?;
0 commit comments