diff --git a/cli/tests/unit/webgpu_test.ts b/cli/tests/unit/webgpu_test.ts index decceb0f91a3a1..2d98167cfdec77 100644 --- a/cli/tests/unit/webgpu_test.ts +++ b/cli/tests/unit/webgpu_test.ts @@ -217,6 +217,16 @@ Deno.test({ Deno.close(Number(resources[resources.length - 1])); }); +Deno.test({ + ignore: isWsl || isLinuxOrMacCI, +}, async function webgpuAdapterHasFeatures() { + const adapter = await navigator.gpu.requestAdapter(); + assert(adapter); + assert(adapter.features); + const resources = Object.keys(Deno.resources()); + Deno.close(Number(resources[resources.length - 1])); +}); + async function checkIsWsl() { return Deno.build.os === "linux" && await hasMicrosoftProcVersion(); diff --git a/ext/webgpu/01_webgpu.js b/ext/webgpu/01_webgpu.js index 3e8e3161ec77dc..a310eac2fc7a59 100644 --- a/ext/webgpu/01_webgpu.js +++ b/ext/webgpu/01_webgpu.js @@ -618,11 +618,12 @@ function createGPUSupportedFeatures(features) { /** @type {GPUSupportedFeatures} */ const supportedFeatures = webidl.createBranded(GPUSupportedFeatures); supportedFeatures[webidl.setlikeInner] = new Set(features); - return webidl.setlike( + webidl.setlike( supportedFeatures, GPUSupportedFeaturesPrototype, true, ); + return supportedFeatures; } class GPUSupportedFeatures { @@ -4903,14 +4904,14 @@ class GPURenderBundleEncoder { * @param {number} offset * @param {number} size */ - setVertexBuffer(slot, buffer, offset = 0, size = 0) { + setVertexBuffer(slot, buffer, offset = 0, size) { webidl.assertBranded(this, GPURenderBundleEncoderPrototype); const prefix = "Failed to execute 'setVertexBuffer' on 'GPURenderBundleEncoder'"; webidl.requiredArguments(arguments.length, 2, { prefix }); slot = webidl.converters.GPUSize32(slot, { prefix, - context: "Argument 2", + context: "Argument 1", }); buffer = webidl.converters.GPUBuffer(buffer, { prefix, @@ -4920,10 +4921,12 @@ class GPURenderBundleEncoder { prefix, context: "Argument 3", }); - size = webidl.converters.GPUSize64(size, { - prefix, - context: "Argument 4", - }); + if (size !== undefined) { + size = webidl.converters.GPUSize64(size, { + prefix, + context: "Argument 4", + }); + } const device = assertDevice(this, { prefix, context: "this" }); const renderBundleEncoderRid = assertResource(this, { prefix, diff --git a/ext/webgpu/bundle.rs b/ext/webgpu/bundle.rs index 3d0f11d89634fb..65897d80b207d0 100644 --- a/ext/webgpu/bundle.rs +++ b/ext/webgpu/bundle.rs @@ -289,7 +289,7 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer( slot: u32, buffer: ResourceId, offset: u64, - size: u64, + size: Option, ) -> Result { let buffer_resource = state .resource_table @@ -298,10 +298,14 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer( 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"))?, - ); + let size = if let Some(size) = size { + Some( + std::num::NonZeroU64::new(size) + .ok_or_else(|| type_error("size must be larger than 0"))?, + ) + } else { + None + }; wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_vertex_buffer( &mut render_bundle_encoder_resource.0.borrow_mut(),