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.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();
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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(),
|
||||||
|
|
Loading…
Add table
Reference in a new issue