summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-02-23 19:05:50 +0100
committerGitHub <noreply@github.com>2023-02-23 19:05:50 +0100
commit451b45ee3a26ed6e393c3deba86937e1a6dc5649 (patch)
tree8ac88074ae0bdaaaa634ab2b2f0b86fc1dcfc018
parent6233c0aff0dc9e58b02dfc9499048385bbf836c6 (diff)
fix(webgpu): don't default to 0 for setVertexBuffer.size & properly use webidl.setlike (#17800)
-rw-r--r--cli/tests/unit/webgpu_test.ts10
-rw-r--r--ext/webgpu/01_webgpu.js17
-rw-r--r--ext/webgpu/bundle.rs14
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(),