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:
Luca Casonato 2021-03-08 14:22:05 +01:00 committed by GitHub
parent 0bc488c85c
commit c009dad982
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 249 additions and 110 deletions

View file

@ -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,