Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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