WGSLLanguageFeatures
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 wird über die GPU.wgslLanguageFeatures Eigenschaft zugegriffen.
Hinweis: Nicht alle WGSL-Spracherweiterungen sind in allen Browsern, die die API unterstützen, für WebGPU verfügbar. Wir empfehlen, dass Sie alle Erweiterungen, die Sie nutzen möchten, gründlich testen.
Verfügbare Funktionen
Die folgenden WGSL-Spracherweiterungen sind in den WGSL-Spracherweiterungen in der WGSL-Spezifikation definiert. Beachten Sie, dass das genaue Set von Funktionen je nach Implementierung und physischem Gerät variieren und sich im Laufe der Zeit ändern kann.
linear_indexing-
Bietet die folgenden eingebauten Werte, um die manuelle Indexberechnung aus 3D-Koordinaten zu erleichtern, die Lesbarkeit von WGSL-Code zu verbessern und häufige wiederkehrende Berechnungen im Prozess zu eliminieren.
global_invocation_index: Die lineare Position des aktuellen Aufrufs innerhalb des gesamten Compute-Shader-Gitters. Einu32-Eingabewert, der basierend auf demglobal_invocation_id,workgroup_sizeundnum_workgroupsberechnet wird.workgroup_index: Die lineare Position der aktuellen Arbeitsgruppe im gesamten Compute-Shader-Gitter. Einu32-Eingabewert, bei dem alle Aufrufe innerhalb derselben Arbeitsgruppe denselben Index teilen.
Siehe WGSL linear_indexing extension für weitere Details und ein Beispiel.
packed_4x8_integer_dot_product-
Erlaubt die Nutzung von DP4a (Dot Product of 4 Elements and Accumulate) GPU-Instruktionen über Ihren WGSL-Code. Diese führen effizient 8-Bit-Integer-Dot-Produkte aus, um die Berechnung zu beschleunigen, Speicher und Netzwerkkapazitäten zu sparen und die Leistung im Vergleich zu den äquivalenten
f32-Versionen zu verbessern. Sie werden häufig in Maschinenlernmodellen zum Inferenzieren innerhalb von KI-Frameworks verwendet.Speziell wenn
packed_4x8_integer_dot_productverfügbar ist, kann der WGSL-Code verwenden:- 32-Bit-Ganzzahl-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Ganzzahlen packen, um als Eingaben für Dot-Produkt-Instruktionen genutzt zu werden (über die
dot4U8Packed()unddot4I8Packed()eingebauten Funktionen). - Pack- und Unpack-Instruktionen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Ganzzahlen (über eingebaute Funktionen wie
pack4xI8()undpack4xI8Clamp()).
- 32-Bit-Ganzzahl-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Ganzzahlen packen, um als Eingaben für Dot-Produkt-Instruktionen genutzt zu werden (über die
pointer_composite_access-
Ermöglicht WGSL-Shader-Code den Zugriff auf Komponenten komplexer Datentypen mit demselben Punkt-(
.)-Syntax, 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 Stern (*) wäre normalerweise notwendig, um den Zeiger in eine "Referenz" umzuwandeln, die dereferenziert werden kann, aber jetzt sind Zeiger und Referenzen fast austauschbar. - Wenn
fookein Zeiger ist: Der Punkt-Operator (.) funktioniert genau wie gewohnt, um Mitglieder direkt zuzugreifen. - Wenn
paein Zeiger ist, der die Startadresse eines Arrays speichert, dann gibtpa[i]Ihnen direkten Zugriff auf den Speicherort, an dem dasi-te Element dieses Arrays gespeichert ist.
Siehe Syntax sugar for dereferencing composites in WGSL für weitere Details und ein Beispiel.
- Wenn
readonly_and_readwrite_storage_textures-
Wenn verfügbar, ermöglicht es, die
"read-only"und"read-write"storageTexture.accessWerte festzulegen, wenn Speichertextur-Bind-Group-Eintragstypen in einem Bind-Group-Layout spezifiziert werden. Diese ermöglichen WGSL-Code das Lesen von Speichertexturen und das Lesen/Schreiben von Speichertexturen. subgroup_id-
Wenn verfügbar, sind die
subgroup_idundnum_subgroupseingebauten Werte in Compute-Shadern nutzbar. Diese verbessern das Planen von Arbeiten über Subgruppen hinweg, indem sie den Speicher indexieren, um überlappende Speicherzugriffe zu vermeiden. Siehe WGSL subgroup_id extension für weitere Details.Hinweis: Damit das
subgroup_idWGSL-Feature nutzbar ist, muss diesubgroupsErweiterung imGPUDeviceaktiviert sein (sieheGPUSupportedFeatures). subgroup_uniformity-
Wenn verfügbar, ändert es den Umfang der Uniformitätsanalyse für die Subgruppen- und Quad-eingebauten Funktionen auf die Subgruppenebene (anstatt auf die Arbeitsgruppenebene). Dieses Feature ermöglicht es, dass Subgruppenfunktionalität in mehr Fällen als uniform betrachtet wird, was die Nutzbarkeit für Entwickler verbessert und die Notwendigkeit verringert, Uniformitätsprüfungen vollständig zu deaktivieren. Eine praktische Auswirkung ist, dass mehr Werte als Subgruppen-uniform betrachtet werden, wie der
subgroup_ideingebaute Wert. Siehe WGSL subgroup_uniformity extension für weitere Details. texture_and_sampler_let-
Wenn verfügbar, erlaubt es WGSL-Shadern, Textur- und Sampler-Objekte in
let-Deklarationen zu speichern. uniform_buffer_standard_layout-
Wenn verfügbar, verwenden Uniform-Buffer dieselben Speicherlayout-Einschränkungen wie Speicher-Buffer, was es erleichtert, Datenstrukturen über beide Arten von Buffern hinweg zu teilen. Dies bedeutet, dass Uniform-Buffer nicht mehr zu einer 16-Byte-Ausrichtung bei Array-Elementen oder dazu gezwungen sind, die Offsets von geschachtelten Strukturen auf ein Vielfaches von 16 Byte aufzufüllen.
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, auf. Wenn verfügbar, sind die folgenden erlaubt:
-
Parameterzeiger auf Speicher-, Uniform- und Arbeitsgruppen-Speicherräume, die an benutzerdefinierte Funktionen übergeben werden.
-
Zeiger auf Strukturmitglieder und Array-Elemente, die an benutzerdefinierte Funktionen übergeben werden.
Siehe Pointers As Function Parameters für weitere Details.
-
Instanzeigenschaften
Die folgende Eigenschaft steht allen schreibgeschützten setähnlichen Objekten zur Verfügung:
size-
Gibt die Anzahl der Werte im Set zurück.
Instanzmethoden
Die folgenden Methoden stehen allen schreibgeschützten setähnlichen Objekten zur Verfügung:
has()-
Gibt einen boolean 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 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 Rückruffunktion einmal für jeden im Set in Einfügereihenfolge vorhandenen Wert auf.
Beispiele
>Prü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 Werte durchlaufen
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> |