WGSLLanguageFeatures
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 WGSL-Spracherweiterungen meldet, die von der WebGPU-Implementierung unterstützt werden.
Das WGSLLanguageFeatures-Objekt wird über die GPU.wgslLanguageFeatures-Eigenschaft aufgerufen.
Hinweis: Nicht alle WGSL-Spracherweiterungen sind in 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 unter WGSL-Spracherweiterungen in der WGSL-Spezifikation definiert. Beachten Sie, dass die genaue Menge verfügbarer Funktionen je nach Implementierung und physischem Gerät variiert und sich im Laufe der Zeit ändern kann.
-
packed_4x8_integer_dot_product-
: Ermöglicht DP4a (Dot-Produkt von 4 Elementen und Akkumulation) GPU-Instruktionen, die über Ihren WGSL-Code verwendet werden können. Diese führen effizient 8-Bit-Integer-Dot-Produkte aus, um die Berechnung zu beschleunigen, den Speicher- und Netzwerkbandbreitenbedarf zu reduzieren und die Leistung im Vergleich zu den äquivalenten
f32-Versionen zu verbessern. Sie werden häufig in maschinellen Lernmodellen zur Inferenzierung innerhalb von KI-Frameworks verwendet.Speziell, wenn
packed_4x8_integer_dot_productverfügbar ist, kann WGSL-Code verwenden:- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integers packen, um als Eingaben für Dot-Produkt-Instruktionen verwendet zu werden (über die
dot4U8Packed()unddot4I8Packed()eingebauten Funktionen). - Pack- und Unpack-Instruktionen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Integers (über eingebaute Funktionen wie
pack4xI8()undpack4xI8Clamp()).
- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integers packen, um als Eingaben für Dot-Produkt-Instruktionen verwendet zu werden (über die
-
-
pointer_composite_access-
: Ermöglicht WGSL-Shader-Code, Komponenten komplexer Datentypen mit der gleichen Punkt-Notation (
.) zuzugreifen, unabhängig davon, ob Sie direkt mit den Daten oder mit einem Zeiger darauf arbeiten.Wenn
pointer_composite_accessverfügbar ist:- Wenn
fooein Zeiger ist:foo.barist als bequemere Schreibweise für(*foo).barverfügbar. Der Asterisk (*) würde normalerweise benötigt, um den Zeiger in eine "Referenz" zu verwandeln, die dereferenziert werden kann, aber nun sind Zeiger und Referenzen nahezu austauschbar. - Wenn
fookein Zeiger ist: Der Punkt-Operator (.) funktioniert genau so, wie Sie es gewohnt sind, um direkt auf Mitglieder zuzugreifen. - Wenn
paein Zeiger ist, der die Startadresse eines Arrays speichert, dann gibtpa[i]direkten Zugriff auf die Speicherstelle, an der dasite Element dieses Arrays gespeichert ist.
Siehe Syntaxzucker für Dereferenzieren von Kompositen in WGSL für weitere Details und ein Beispiel.
- Wenn
-
-
readonly_and_readwrite_storage_textures- : Wenn verfügbar, ermöglichen die
"read-only"und"read-write"storageTexture.access-Werte, beim Festlegen von Speichertextur-Bindegruppen-Typen in einem Bindegruppenlayout verwendet zu werden. Diese ermöglichen WGSL-Code, Speichertexturen zu lesen und zu beschreiben bzw. zu lesen und zu schreiben.
- : Wenn verfügbar, ermöglichen die
-
subgroup_id- : Wenn verfügbar, sind die
subgroup_idundnum_subgroupseingebauten WGSL-Werte in Rechenshaders nutzbar. Diese verbessern den Prozess der Arbeitsscheduling über Untergruppen, indem sie den Speicher indexieren, um überlappende Speicherzugriffe zu vermeiden. Sehen Sie WGSL subgroup_id extension für weitere Details.Hinweis: Damit die
subgroup_idWGSL-Funktion nutzbar ist, muss diesubgroups-Erweiterung imGPUDeviceaktiviert sein (sieheGPUSupportedFeatures).
- : Wenn verfügbar, sind die
-
subgroup_uniformity- : Wenn verfügbar, ändert den Gültigkeitsbereich der Uniformitätsanalyse für die Untergruppe und die Quad eingebauten Funktionen auf die Untergruppenebene (anstatt der Arbeitsgruppeneebene). Diese Funktion ermöglicht die Betrachtung von Untergruppenfunktionalität als uniform in mehr Fällen, verbessert die Benutzerfreundlichkeit für Entwickler und reduziert die Notwendigkeit, Uniformitätsprüfungen ganz zu deaktivieren. Eine praktische Auswirkung ist, dass mehr Werte als untergruppenuniform betrachtet werden, wie der
subgroup_ideingebaute Wert. Sehen Sie WGSL subgroup_uniformity extension für weitere Details.
- : Wenn verfügbar, ändert den Gültigkeitsbereich der Uniformitätsanalyse für die Untergruppe und die Quad eingebauten Funktionen auf die Untergruppenebene (anstatt der Arbeitsgruppeneebene). Diese Funktion ermöglicht die Betrachtung von Untergruppenfunktionalität als uniform in mehr Fällen, verbessert die Benutzerfreundlichkeit für Entwickler und reduziert die Notwendigkeit, Uniformitätsprüfungen ganz zu deaktivieren. Eine praktische Auswirkung ist, dass mehr Werte als untergruppenuniform betrachtet werden, wie der
-
texture_and_sampler_let- Wenn verfügbar, erlaubt es WGSL-Shaders, Textur- und Sampler-Objekte in
let-Deklarationen zu speichern.
- Wenn verfügbar, erlaubt es WGSL-Shaders, Textur- und Sampler-Objekte in
-
uniform_buffer_standard_layout-
: Wenn verfügbar, nutzen Uniformpuffer die gleichen Speicherlayout-Einschränkungen wie Speicherpuffer, was es einfacher macht, Datenstrukturen über beide Arten von Puffern hinweg zu teilen. Das bedeutet, dass Uniformpuffer nicht mehr eine 16-Byte-Ausrichtung bei Array-Elementen haben müssen oder verschachtelte Strukturoffsets auf ein Vielfaches von 16 Bytes aufgefüllt werden müssen.
Siehe WGSL uniform_buffer_standard_layout extension für weitere Details.
-
-
unrestricted_pointer_parameters- : Lockert Einschränkungen bei Zeigern, die an WGSL-Funktionen übergeben werden. Wenn verfügbar, sind folgende erlaubt:
-
Parameterzeiger zu Speicher-, Uniform- und Arbeitsgruppenadressräumen, die an benutzerdefinierte Funktionen übergeben werden.
-
Zeiger auf Strukturmitglieder und Array-Elemente, die an benutzerdefinierte Funktionen übergeben werden.
Siehe Zeiger als Funktionsparameter für weitere Details.
-
- : Lockert Einschränkungen bei Zeigern, die an WGSL-Funktionen übergeben werden. Wenn verfügbar, sind folgende erlaubt:
Instanzeigenschaften
Die folgende Eigenschaft ist für alle schreibgeschützten setähnlichen Objekte verfügbar:
size-
Gibt die Anzahl der Werte im Set zurück.
Instanzmethoden
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 gegebenen Wert im Set vorhanden ist oder nicht.
values()-
Gibt ein neues Iterator-Objekt zurück, das Werte für jedes Element im Set in Einfügereihenfolge ausgibt.
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 im Set enthaltenen Wert 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
| Spezifikation |
|---|
| WebGPU> # gpuwgsllanguagefeatures> |