0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-03 17:34:47 -05:00

fix(webgpu): don't default to 0 for setVertexBuffer.size & properly use webidl.setlike (#17800)

This commit is contained in:
Leo Kettmeir 2023-02-23 19:05:50 +01:00 committed by GitHub
parent 6233c0aff0
commit 451b45ee3a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 12 deletions

View file

@ -217,6 +217,16 @@ Deno.test({
Deno.close(Number(resources[resources.length - 1])); 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() { async function checkIsWsl() {
return Deno.build.os === "linux" && await hasMicrosoftProcVersion(); return Deno.build.os === "linux" && await hasMicrosoftProcVersion();

View file

@ -618,11 +618,12 @@ function createGPUSupportedFeatures(features) {
/** @type {GPUSupportedFeatures} */ /** @type {GPUSupportedFeatures} */
const supportedFeatures = webidl.createBranded(GPUSupportedFeatures); const supportedFeatures = webidl.createBranded(GPUSupportedFeatures);
supportedFeatures[webidl.setlikeInner] = new Set(features); supportedFeatures[webidl.setlikeInner] = new Set(features);
return webidl.setlike( webidl.setlike(
supportedFeatures, supportedFeatures,
GPUSupportedFeaturesPrototype, GPUSupportedFeaturesPrototype,
true, true,
); );
return supportedFeatures;
} }
class GPUSupportedFeatures { class GPUSupportedFeatures {
@ -4903,14 +4904,14 @@ class GPURenderBundleEncoder {
* @param {number} offset * @param {number} offset
* @param {number} size * @param {number} size
*/ */
setVertexBuffer(slot, buffer, offset = 0, size = 0) { setVertexBuffer(slot, buffer, offset = 0, size) {
webidl.assertBranded(this, GPURenderBundleEncoderPrototype); webidl.assertBranded(this, GPURenderBundleEncoderPrototype);
const prefix = const prefix =
"Failed to execute 'setVertexBuffer' on 'GPURenderBundleEncoder'"; "Failed to execute 'setVertexBuffer' on 'GPURenderBundleEncoder'";
webidl.requiredArguments(arguments.length, 2, { prefix }); webidl.requiredArguments(arguments.length, 2, { prefix });
slot = webidl.converters.GPUSize32(slot, { slot = webidl.converters.GPUSize32(slot, {
prefix, prefix,
context: "Argument 2", context: "Argument 1",
}); });
buffer = webidl.converters.GPUBuffer(buffer, { buffer = webidl.converters.GPUBuffer(buffer, {
prefix, prefix,
@ -4920,10 +4921,12 @@ class GPURenderBundleEncoder {
prefix, prefix,
context: "Argument 3", context: "Argument 3",
}); });
size = webidl.converters.GPUSize64(size, { if (size !== undefined) {
prefix, size = webidl.converters.GPUSize64(size, {
context: "Argument 4", prefix,
}); context: "Argument 4",
});
}
const device = assertDevice(this, { prefix, context: "this" }); const device = assertDevice(this, { prefix, context: "this" });
const renderBundleEncoderRid = assertResource(this, { const renderBundleEncoderRid = assertResource(this, {
prefix, prefix,

View file

@ -289,7 +289,7 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer(
slot: u32, slot: u32,
buffer: ResourceId, buffer: ResourceId,
offset: u64, offset: u64,
size: u64, size: Option<u64>,
) -> Result<WebGpuResult, AnyError> { ) -> Result<WebGpuResult, AnyError> {
let buffer_resource = state let buffer_resource = state
.resource_table .resource_table
@ -298,10 +298,14 @@ pub fn op_webgpu_render_bundle_encoder_set_vertex_buffer(
state state
.resource_table .resource_table
.get::<WebGpuRenderBundleEncoder>(render_bundle_encoder_rid)?; .get::<WebGpuRenderBundleEncoder>(render_bundle_encoder_rid)?;
let size = Some( let size = if let Some(size) = size {
std::num::NonZeroU64::new(size) Some(
.ok_or_else(|| type_error("size must be larger than 0"))?, 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( wgpu_core::command::bundle_ffi::wgpu_render_bundle_set_vertex_buffer(
&mut render_bundle_encoder_resource.0.borrow_mut(), &mut render_bundle_encoder_resource.0.borrow_mut(),