diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-02-23 19:05:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-23 19:05:50 +0100 |
commit | 451b45ee3a26ed6e393c3deba86937e1a6dc5649 (patch) | |
tree | 8ac88074ae0bdaaaa634ab2b2f0b86fc1dcfc018 | |
parent | 6233c0aff0dc9e58b02dfc9499048385bbf836c6 (diff) |
fix(webgpu): don't default to 0 for setVertexBuffer.size & properly use webidl.setlike (#17800)
-rw-r--r-- | cli/tests/unit/webgpu_test.ts | 10 | ||||
-rw-r--r-- | ext/webgpu/01_webgpu.js | 17 | ||||
-rw-r--r-- | ext/webgpu/bundle.rs | 14 |
3 files changed, 29 insertions, 12 deletions
diff --git a/cli/tests/unit/webgpu_test.ts b/cli/tests/unit/webgpu_test.ts index decceb0f9..2d98167cf 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 3e8e3161e..a310eac2f 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 3d0f11d89..65897d80b 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<u64>, ) -> Result<WebGpuResult, AnyError> { let buffer_resource = state .resource_table @@ -298,10 +298,14 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer( state .resource_table .get::<WebGpuRenderBundleEncoder>(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(), |