diff --git a/CHANGELOG.md b/CHANGELOG.md index 26c23969b9..27200b170d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -84,6 +84,13 @@ Bottom level categories: - Fixed WebGL not displaying srgb targets correctly if a non-screen filling viewport was previously set. By @Wumpf in [#3093](https://github.com/gfx-rs/wgpu/pull/3093) +#### deno-webgpu + +- Let `setVertexBuffer` and `setIndexBuffer` calls on + `GPURenderBundleEncoder` throw an error if the `size` argument is + zero, rather than treating that as "until the end of the buffer". + By @jimblandy in [#3171](https://github.com/gfx-rs/wgpu/pull/3171) + ### Examples - Log adapter info in hello example on wasm target by @JolifantoBambla in [#2858](https://github.com/gfx-rs/wgpu/pull/2858) diff --git a/deno_webgpu/src/bundle.rs b/deno_webgpu/src/bundle.rs index 65c120fdfc..6c1e1cae43 100644 --- a/deno_webgpu/src/bundle.rs +++ b/deno_webgpu/src/bundle.rs @@ -1,6 +1,6 @@ // Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. -use deno_core::error::AnyError; +use deno_core::error::{type_error, AnyError}; use deno_core::op; use deno_core::OpState; use deno_core::Resource; @@ -255,16 +255,14 @@ pub fn op_webgpu_render_bundle_encoder_set_index_buffer( let render_bundle_encoder_resource = state .resource_table .get::(render_bundle_encoder_rid)?; + let size = Some( + std::num::NonZeroU64::new(size).ok_or_else(|| type_error("size must be larger than 0"))?, + ); render_bundle_encoder_resource .0 .borrow_mut() - .set_index_buffer( - buffer_resource.0, - index_format, - offset, - std::num::NonZeroU64::new(size), - ); + .set_index_buffer(buffer_resource.0, index_format, offset, size); Ok(WebGpuResult::empty()) } @@ -284,13 +282,16 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer( let render_bundle_encoder_resource = state .resource_table .get::(render_bundle_encoder_rid)?; + let size = Some( + std::num::NonZeroU64::new(size).ok_or_else(|| type_error("size must be larger than 0"))?, + ); wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_vertex_buffer( &mut render_bundle_encoder_resource.0.borrow_mut(), slot, buffer_resource.0, offset, - std::num::NonZeroU64::new(size), + size, ); Ok(WebGpuResult::empty())