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.

Das WGSLLanguageFeatures-Interface 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 verfügbar, die die API unterstützen. Es wird empfohlen, dass Sie alle Erweiterungen, die Sie verwenden möchten, gründlich testen.

Verfügbare Funktionen

Die folgenden WGSL-Spracherweiterungen sind in WGSL-Spracherweiterungen in der WGSL-Spezifikation definiert. Beachten Sie, dass das genaue Set an verfügbaren Funktionen je nach Implementierung und physischen Geräten variieren kann und sich im Laufe der Zeit ändern kann.

packed_4x8_integer_dot_product

Ermöglicht die Nutzung von DP4a (Dot Product von 4 Elementen und Akkumulieren) GPU-Anweisungen über Ihren WGSL-Code. Diese führen 8-Bit-Integer-Punktprodukte effizient aus, um Berechnungen zu beschleunigen, Speicher und Netzwerkbandbreite zu sparen und die Leistung im Vergleich zu den entsprechenden f32-Versionen zu verbessern. Sie werden häufig in Maschinenlernmodellen beim Inferencing innerhalb von KI-Frameworks verwendet.

Insbesondere, wenn packed_4x8_integer_dot_product verfügbar ist, kann WGSL-Code verwenden:

  • Packing von 32-Bit-Integer-Scalaren in 4-Komponenten-Vektoren von 8-Bit-Integern, um als Eingaben für Punktprodukt-Anweisungen zu dienen (über die eingebauten Funktionen dot4U8Packed() und dot4I8Packed()).
  • Pack- und Unpack-Anweisungen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Integern (über eingebaute Funktionen wie pack4xI8() und pack4xI8Clamp()).
pointer_composite_access

Ermöglicht WGSL-Shader-Code, auf 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_access verfügbar ist:

  • Wenn foo ein Zeiger ist: foo.bar steht als bequemere Schreibweise für (*foo).bar zur Verfügung. Der Stern (*) würde normalerweise benötigt, um den Zeiger in eine "Referenz" zu verwandeln, die dereferenziert werden kann, aber jetzt sind sowohl Zeiger als auch Referenzen fast austauschbar.
  • Wenn foo kein Zeiger ist: Der Punkt-Operator (.) funktioniert genau so wie gewohnt für den direkten Zugriff auf Mitglieder.
  • Wenn pa ein Zeiger ist, der die Startadresse eines Arrays speichert, dann gibt pa[i] direkten Zugriff auf die Speicherstelle, an der das ite Element dieses Arrays gespeichert ist.

Siehe Syntaxzucker für das Dereferenzieren von Komposita in WGSL für weitere Details und ein Beispiel.

readonly_and_readwrite_storage_textures

Wenn verfügbar, ermöglicht das Setzen der Werte "read-only" und "read-write" für storageTexture.access bei der Angabe von Speichertyp-Bindungsgruppen in einem Bindungsgruppen-Layout. Diese ermöglichen WGSL-Code das Lesen von Speichertypen bzw. das Lesen/Schreiben von Speichertypen.

unrestricted_pointer_parameters

Lockert die Beschränkungen für Zeiger, die an WGSL-Funktionen übergeben werden. Wenn verfügbar, sind die folgenden Aktionen erlaubt:

  • Parameterzeiger auf Speicher-, Uniform- und Arbeitsgruppenadressräume, 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.

Instanz-Eigenschaften

Die folgende Eigenschaft ist für alle schreibgeschützten setähnlichen Objekte verfügbar:

size

Gibt die Anzahl der Werte in der Menge zurück.

Instanz-Methoden

Die folgenden Methoden sind für alle schreibgeschützten setähnlichen Objekte verfügbar:

has()

Gibt ein boolesches Ergebnis zurück, das angibt, ob ein Element mit dem angegebenen Wert in der Menge vorhanden ist oder nicht.

values()

Gibt ein neues Iterator-Objekt zurück, das Werte für jedes Element in der Menge in Einfüge-Reihenfolge 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 in der Menge in Einfüge-Reihenfolge enthält.

forEach()

Ruft die bereitgestellte Callback-Funktion einmal für jeden Wert in der Menge in Einfüge-Reihenfolge auf.

Beispiele

Überprüfen, ob eine Erweiterung verfügbar ist

js
if (
  navigator.gpu.wgslLanguageFeatures.has(
    "readonly_and_readwrite_storage_textures",
  )
) {
  console.log("Read-only and read-write storage textures are available");
}

Setgröße zurückgeben und durch Werte iterieren

js
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

Browser-Kompatibilität

Siehe auch