mirror of
https://github.com/denoland/deno.git
synced 2025-09-28 13:14:48 +00:00
fix(webgpu): add webidl records and simple unions (#9698)
The only functional user facing difference is that this commit allows the use SPIRV shaders, not just WGSL. This matches FF and Chrome Canary.
This commit is contained in:
parent
0bc488c85c
commit
c009dad982
3 changed files with 249 additions and 110 deletions
|
@ -596,6 +596,13 @@
|
|||
|
||||
converters.VoidFunction = convertCallbackFunction;
|
||||
|
||||
converters["UVString?"] = createNullableConverter(
|
||||
converters.USVString,
|
||||
);
|
||||
converters["sequence<double>"] = createSequenceConverter(
|
||||
converters["double"],
|
||||
);
|
||||
|
||||
function requiredArguments(length, required, opts = {}) {
|
||||
if (length < required) {
|
||||
const errMsg = `${
|
||||
|
@ -737,6 +744,26 @@
|
|||
};
|
||||
}
|
||||
|
||||
function createRecordConverter(keyConverter, valueConverter) {
|
||||
return (V, opts) => {
|
||||
if (typeof V !== "object") {
|
||||
throw makeException(
|
||||
TypeError,
|
||||
"can not be converted to dictionary.",
|
||||
opts,
|
||||
);
|
||||
}
|
||||
const result = {};
|
||||
for (const key of V) {
|
||||
const typedKey = keyConverter(key, opts);
|
||||
const value = V[key];
|
||||
const typedValue = valueConverter(value, opts);
|
||||
result[typedKey] = typedValue;
|
||||
}
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
const brand = Symbol("[[webidl.brand]]");
|
||||
|
||||
function createInterfaceConverter(name, prototype) {
|
||||
|
@ -766,12 +793,14 @@
|
|||
|
||||
window.__bootstrap ??= {};
|
||||
window.__bootstrap.webidl = {
|
||||
makeException,
|
||||
converters,
|
||||
requiredArguments,
|
||||
createDictionaryConverter,
|
||||
createEnumConverter,
|
||||
createNullableConverter,
|
||||
createSequenceConverter,
|
||||
createRecordConverter,
|
||||
createInterfaceConverter,
|
||||
brand,
|
||||
createBranded,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue