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:
parent
6233c0aff0
commit
451b45ee3a
3 changed files with 29 additions and 12 deletions
|
@ -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();
|
||||
|
||||
|
|
|
@ -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",
|
||||
});
|
||||
if (size !== undefined) {
|
||||
size = webidl.converters.GPUSize64(size, {
|
||||
prefix,
|
||||
context: "Argument 4",
|
||||
});
|
||||
}
|
||||
const device = assertDevice(this, { prefix, context: "this" });
|
||||
const renderBundleEncoderRid = assertResource(this, {
|
||||
prefix,
|
||||
|
|
|
@ -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(
|
||||
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(),
|
||||
|
|
Loading…
Add table
Reference in a new issue