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 setlike 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 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 unter WGSL-Spracherweiterungen definiert. Beachten Sie, dass der genaue Umfang der verfügbaren Funktionen je nach Implementierung und physischem Gerät variiert und sich im Laufe der Zeit ändern kann.
packed_4x8_integer_dot_product-
Erlaubt DP4a (Dot Product of 4 Elements and Accumulate) GPU-Anweisungen, die über Ihren WGSL-Code verwendet werden. Diese führen effizient 8-Bit-Integer-Skalarprodukt-Berechnungen durch, 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 Machine Learning-Modellen für Inferenz innerhalb von KI-Frameworks verwendet.Insbesondere wenn
packed_4x8_integer_dot_productverfügbar ist, kann WGSL-Code:- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integern packen, als Eingaben für Skalarprodukt-Anweisungen nutzen (über die eingebauten Funktionen
dot4U8Packed()unddot4I8Packed()). - Pack- und Entpack-Anweisungen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Integern nutzen (über eingebaute Funktionen wie
pack4xI8()undpack4xI8Clamp()).
- 32-Bit-Integer-Skalare, die 4-Komponenten-Vektoren von 8-Bit-Integern packen, als Eingaben für Skalarprodukt-Anweisungen nutzen (über die eingebauten Funktionen
pointer_composite_access-
Ermöglicht es WGSL-Shader-Code, Komponenten komplexer Datentypen mit der gleichen Punkt-Schreibweise (
.) 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 eine bequemere Möglichkeit, um(*foo).barzu schreiben. Das Sternchen (*) wäre normalerweise erforderlich, um den Zeiger in eine "Referenz" zu verwandeln, die dereferenziert werden kann, aber jetzt sind sowohl Zeiger als auch Referenzen fast 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 gibt Ihnenpa[i]direkten Zugriff auf die Speicherstelle, an der dasite 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-
Erlaubt es, die Werte
"read-only"und"read-write"fürstorageTexture.accesszu setzen, wenn Speichertexturbindungsgruppen-Eintragstypen in einem Bindungsgruppen-Layout angegeben werden. Diese ermöglichen es WGSL-Code, Speichertexturen zu lesen bzw. Schreib-/Lesezugriff auf Speichertexturen zu haben. subgroup_id-
Wenn verfügbar, können die WGSL-eingebauten Werte
subgroup_idundnum_subgroupsin Berechnungsshadern verwendet werden. Sie verbessern den Prozess der Aufgabenplanung über Subgruppen, indem sie Speicher adressieren, um überlappende Speicherzugriffe zu vermeiden. Siehe WGSL subgroup_id extension für weitere Details.Hinweis: Damit das
subgroup_idWGSL-Feature genutzt werden kann, 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 der Arbeitsgruppenebene). Diese Funktion ermöglicht es, dass Subgruppen-Funktionalität in mehr Fällen als einheitlich betrachtet wird, was die Benutzerfreundlichkeit für Entwickler verbessert und die Notwendigkeit reduziert, Uniformitätsprüfungen vollständig zu deaktivieren. Eine praktische Folge ist, dass mehr Werte als subgruppen-einheitlich betrachtet werden, wie zum Beispiel der eingebaute Wert
subgroup_id. Siehe WGSL subgroup_uniformity extension für weitere Details. texture_and_sampler_let-
Wenn verfügbar, erlaubt es WGSL-Shadern, Texture- und Sampler-Objekte in
let-Deklarationen zu speichern. uniform_buffer_standard_layout-
Wenn verfügbar, verwenden Uniformpuffer die gleichen Speicherlayout-Beschränkungen wie Speicherpuffer, was es erleichtert, Datenstrukturen über beide Arten von Puffern zu teilen. Das bedeutet, dass Uniformpuffer nicht mehr dazu gezwungen sind, eine 16-Byte-Ausrichtung bei Array-Elementen zu haben oder die Versätze verschachtelter Strukturen auf ein Vielfaches von 16 Bytes zu füllen.
Siehe WGSL uniform_buffer_standard_layout extension für weitere Details.
unrestricted_pointer_parameters-
Lockert die Einschränkungen für Zeiger, die an WGSL-Funktionen übergeben werden. Wenn verfügbar, sind die folgenden erlaubt:
-
Parameterzeiger auf Speicher-, Uniform- und Arbeitsgruppenadressenrä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.
-
Instanz-Eigenschaften
Die folgende Eigenschaft ist für alle schreibgeschützten setlike Objekte verfügbar:
size-
Gibt die Anzahl der Werte im Set zurück.
Instanz-Methoden
Die folgenden Methoden sind für alle schreibgeschützten setlike Objekte verfügbar:
has()-
Gibt einen booleschen Wert 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 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> |