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.
Das WGSLLanguageFeatures-Interface der WebGPU API ist ein set-ähnliches Objekt, das die von der WebGPU-Implementierung unterstützten WGSL-Spracherweiterungen berichtet.
Auf das WGSLLanguageFeatures-Objekt wird über die GPU.wgslLanguageFeatures-Eigenschaft zugegriffen.
Hinweis: Nicht alle WGSL-Spracherweiterungen sind für WebGPU in allen Browsern verfügbar, die die API unterstützen. Es wird empfohlen, Erweiterungen, die Sie nutzen möchten, gründlich zu testen.
Verfügbare Funktionen
Die folgenden WGSL-Spracherweiterungen sind in den WGSL-Spracherweiterungen in der WGSL-Spezifikation definiert. Beachten Sie, dass der genaue Satz 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 die Verwendung von DP4a (Dot Product of 4 Elements and Accumulate) GPU-Anweisungen über Ihren WGSL-Code. Diese führen effizient 8-Bit-Integer-Punktprodukte aus, um Berechnungen zu beschleunigen, Speicher und Netzwerkkapazitäten zu sparen und die Leistung im Vergleich zu den äquivalenten
f32-Versionen zu verbessern. Diese werden häufig in Inferenz-Modellen des maschinellen Lernens innerhalb von KI-Frameworks verwendet.Konkret kann bei Verfügbarkeit von
packed_4x8_integer_dot_productWGSL-Code Folgendes nutzen:- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integern packen, um sie als Eingaben für Punktprodukt-Anweisungen zu verwenden (über die eingebauten Funktionen
dot4U8Packed()unddot4I8Packed()). - Pack- und Unpack-Anweisungen 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 sie als Eingaben für Punktprodukt-Anweisungen zu verwenden (über die eingebauten Funktionen
pointer_composite_access-
Ermöglicht es WGSL-Shader-Code, Komponenten von komplexen Datentypen mit demselben Punkt (
.)-Syntax sowohl direkt auf die Daten als auch über einen Zeiger darauf zuzugreifen.Wenn
pointer_composite_accessverfügbar ist:- Wenn
fooein Zeiger ist, istfoo.bareine bequemere Möglichkeit,(*foo).barzu schreiben. Der Asterisk (*) würde normalerweise benötigt, um den Zeiger in eine "Referenz" zu verwandeln, die dereferenziert werden kann, aber jetzt sind Zeiger und Referenzen fast austauschbar. - Wenn
fookein Zeiger ist, funktioniert der Punktoperator (.) genau so, wie Sie es gewohnt sind, um Mitglieder direkt zuzugreifen. - Wenn
paein Zeiger ist, der die Startadresse eines Arrays speichert, dann ermöglichtpa[i]den direkten Zugriff auf die Speicherstelle, an der dasi-te Element dieses Arrays gespeichert ist.
Weitere Informationen und ein Beispiel finden Sie unter Syntax sugar for dereferencing composites in WGSL.
- Wenn
readonly_and_readwrite_storage_textures-
Wenn verfügbar, ermöglicht es, die Werte
"read-only"und"read-write"vonstorageTexture.accessfestzulegen, wenn Speichertextur-Bindegruppen-Eintragstypen in einem Bindegruppen-Layout spezifiziert werden. Diese ermöglichen WGSL-Code, Speichertexturen zu lesen und zu schreiben. subgroup_id-
Wenn verfügbar, sind die WGSL-eingebauten Werte
subgroup_idundnum_subgroupsin Berechnungsshaders nutzbar. Diese verbessern den Prozess der Arbeitsverteilung über Untergruppen, indem sie Speicher indexieren, um überschneidende Speicherzugriffe zu vermeiden. Weitere Details finden Sie in der WGSL subgroup_id extension.Hinweis: Um die
subgroup_idWGSL-Funktion nutzbar zu machen, muss diesubgroupsErweiterung imGPUDeviceaktiviert werden (sieheGPUSupportedFeatures). subgroup_uniformity-
Wenn verfügbar, ändert sich der Umfang der Gleichmäßigkeitsanalyse für die Untergruppen- und Quad-Eingabefunktionen zur Untergruppenebene (anstatt zur Arbeitsgruppenebene). Diese Funktion ermöglicht es, die Untergruppenfunktionalität in mehr Fällen als gleichmäßig zu betrachten, verbessert die Benutzerfreundlichkeit für Entwickler und reduziert die Notwendigkeit, Gleichmäßigkeitsprüfungen vollständig zu deaktivieren. Eine praktische Auswirkung ist, dass mehr Werte als untergruppengleich angesehen werden, wie z.B. der eingebaute Wert
subgroup_id. Weitere Details finden Sie in der WGSL subgroup_uniformity extension. uniform_buffer_standard_layout-
Wenn verfügbar, nutzen Uniformpuffer dieselben Speicherlayout-Beschränkungen wie Speicherkapazitätspuffer, was das Teilen von Datenstrukturen zwischen beiden Arten von Puffern erleichtert. Das bedeutet, dass Uniformpuffer nicht mehr eine 16-Byte-Ausrichtung auf Array-Elemente haben müssen oder Offsets von geschachtelten Strukturen auf ein Vielfaches von 16 Byte polstern müssen.
Siehe WGSL uniform_buffer_standard_layout extension für weitere Details.
unrestricted_pointer_parameters-
Lockert Beschränkungen für Zeiger, die an WGSL-Funktionen übergeben werden. Wenn verfügbar, sind folgende Punkte erlaubt:
-
Parameterzeiger auf Speicher-, Uniform- und Arbeitsgruppenadressenräume können an benutzerdefinierte Funktionen übergeben werden.
-
Zeiger auf Strukturelemente und Array-Elemente können an benutzerdefinierte Funktionen übergeben werden.
Weitere Informationen finden Sie unter Pointers As Function Parameters.
-
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 Booleschen Wert zurück, der angibt, ob ein Element mit dem angegebenen 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 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 Rückruffunktion einmal für jeden im Set vorhandenen 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> |