WGSLLanguageFeatures
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die WGSLLanguageFeatures-Schnittstelle der WebGPU API ist ein setähnliches Objekt, das die von der WebGPU-Implementierung unterstützten WGSL-Spracherweiterungen meldet.
Auf das WGSLLanguageFeatures-Objekt kann über die GPU.wgslLanguageFeatures-Eigenschaft zugegriffen werden.
Hinweis: Nicht alle WGSL-Spracherweiterungen sind für WebGPU in allen Browsern verfügbar, die die API unterstützen. Wir empfehlen, alle Erweiterungen, die Sie verwenden möchten, gründlich zu testen.
Verfügbare Funktionen
Die folgenden WGSL-Spracherweiterungen sind in der WGSL-Spezifikation für Spracherweiterungen definiert. Beachten Sie, dass die genaue Menge der verfügbaren Funktionen je nach Implementierung und physischem Gerät variieren kann und sich im Laufe der Zeit ändern kann.
packed_4x8_integer_dot_product-
Ermöglicht DP4a (Dot Product von 4 Elementen und Akkumulieren) GPU-Instruktionen über Ihren WGSL-Code zu verwenden. Diese führen effizient 8-Bit-Integer-Dot-Produkte aus, um die Berechnung zu beschleunigen, Speicher und Netzwerkbandbreite zu sparen und die Leistung im Vergleich zu den entsprechenden
f32-Versionen zu verbessern. Sie werden häufig in Inferenzmodellen des maschinellen Lernens innerhalb von KI-Frameworks verwendet.Insbesondere, wenn
packed_4x8_integer_dot_productverfügbar ist, kann WGSL-Code verwenden:- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integern packen, um als Eingänge für Dot-Produkt-Instruktionen verwendet zu werden (über die eingebauten Funktionen
dot4U8Packed()unddot4I8Packed()). - Pack- und Unpack-Instruktionen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Integern (über eingebaute Funktionen wie
pack4xI8()undpack4xI8Clamp()).
- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integern packen, um als Eingänge für Dot-Produkt-Instruktionen verwendet zu werden (über die eingebauten Funktionen
pointer_composite_access-
Ermöglicht WGSL-Shader-Code den Zugriff auf Komponenten komplexer Datentypen mit der gleichen Punkt (
.)-Syntax, unabhängig davon, ob Sie direkt mit den Daten arbeiten oder mit einem Zeiger darauf.Wenn
pointer_composite_accessverfügbar ist:- Wenn
fooein Zeiger ist:foo.barist als bequemere Möglichkeit verfügbar,(*foo).barzu schreiben. Der Stern (*) wäre normalerweise notwendig, um den Zeiger in eine "Referenz" umzuwandeln, die dereferenziert werden kann, aber jetzt sind sowohl Zeiger als auch Referenzen fast austauschbar. - Wenn
fookein Zeiger ist: Der Punktoperator (.) funktioniert genau so, wie Sie es gewohnt sind, um Mitglieder direkt zuzugreifen. - Wenn
paein Zeiger ist, der die Startadresse eines Arrays speichert, dann bietetpa[i]direkten Zugriff auf die Speicherstelle, an der dasi-te Element dieses Arrays gespeichert ist.
Siehe Syntaxzucker für das Dereferenzieren von Kompositionsobjekten in WGSL für weitere Details und ein Beispiel.
- Wenn
readonly_and_readwrite_storage_textures-
Wenn verfügbar, ermöglicht die
"readonly"und"readwrite"storageTexture.access-Werte beim Spezifizieren von Speichertypen in einem Bind-Group-Layout gesetzt werden. Diese ermöglichen es dem WGSL-Code, Speicherttexturen zu lesen und sowohl zu lesen als auch zu schreiben. subgroup_id-
Wenn verfügbar, sind die WGSL-eingebauten Werte
subgroup_idundnum_subgroupsin Rechen-Shadern benutzbar. Diese verbessern den Prozess der Arbeitsverteilung über Untergruppen, indem sie den Speicher indexieren, um überlappende Speicherzugriffe zu vermeiden. Siehe WGSL subgroup_id-Erweiterung für mehr Details.Hinweis: Damit das
subgroup_idWGSL-Feature nutzbar ist, muss diesubgroups-Erweiterung imGPUDeviceaktiviert werden (sieheGPUSupportedFeatures). unrestricted_pointer_parameters-
Lockert die Einschränkungen für Zeiger, die an WGSL-Funktionen übergeben werden. Bei Verfügbarkeit sind folgende Dinge erlaubt:
-
Parameterzeiger auf Speicher-, Uniform- und Arbeitsraumadressräume, die an vom Benutzer deklarierte Funktionen übergeben werden.
-
Zeiger zu Strukturmitgliedern und Arrayelementen, die an vom Benutzer deklarierte Funktionen übergeben werden.
Siehe Zeiger als Funktionsparameter für mehr Details.
-
Instanz-Eigenschaften
Die folgende Eigenschaft ist für alle schreibgeschützten setähnlichen Objekte verfügbar:
size-
Gibt die Anzahl der Werte im Set zurück.
Instanz-Methoden
Die folgenden Methoden sind für alle schreibgeschützten setähnlichen Objekte verfügbar:
has()-
Gibt einen Boolean zurück, der angibt, ob ein Element mit dem angegebenen Wert im Set vorhanden ist.
values()-
Gibt ein neues Iterator-Objekt zurück, das Werte für jedes Element im Set in Einfügereihenfolge liefert.
keys()-
Ein Alias für
values(). entries()-
Gibt ein neues Iterator-Objekt zurück, das ein Array von
[value, value]für jedes Element im Set in Einfügereihenfolge enthält. forEach()-
Ruft die bereitgestellte Callback-Funktion einmal für jeden Wert im Set in Einfügereihenfolge auf.
Beispiele
>Überprüfen, ob eine Erweiterung verfügbar ist
if (
navigator.gpu.wgslLanguageFeatures.has(
"readonly_and_readwrite_storage_textures",
)
) {
console.log("Read-only and read-write storage textures are available");
}
Set-Größe zurückgeben und durch Werte iterieren
const wgslFeatures = navigator.gpu.wgslLanguageFeatures;
// Return the size of the set
console.log(wgslFeatures.size);
// Iterate through all the set values using values()
const valueIterator = wgslFeatures.values();
for (const value of valueIterator) {
console.log(value);
}
// …
Spezifikationen
| Specification |
|---|
| WebGPU> # gpuwgsllanguagefeatures> |