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

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 setartiges 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 Ihnen, alle Erweiterungen, die Sie verwenden 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 an 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

Erlaubt die Nutzung von DP4a (Dot Product of 4 Elements and Accumulate) GPU-Anweisungen über Ihren WGSL-Code. Diese führen effizient 8-Bit-Ganzzahlergebnisprodukte aus, um Berechnungen zu beschleunigen, Speicher- und Netzwerkbandbreite zu sparen und die Leistung im Vergleich zu den entsprechenden f32 Versionen zu verbessern. Diese werden häufig in maschinellen Lernmodellen bei der Inferenz innerhalb von KI-Frameworks eingesetzt.

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

  • 32-Bit-Ganzzahl-Skalare packen 4-Komponenten-Vektoren von 8-Bit-Ganzzahlen, um als Eingaben für Dot-Produkt-Anweisungen (über die dot4U8Packed() und dot4I8Packed() eingebauten Funktionen) verwendet zu werden.
  • Pack- und Entpack-Anweisungen mit gepackten 4-Komponenten-Vektoren von 8-Bit-Ganzzahlen (über eingebaute Funktionen wie pack4xI8() und pack4xI8Clamp()).
pointer_composite_access

Ermöglicht es, dass WGSL-Shader-Code Komponenten komplexer Datentypen unter Verwendung der gleichen Punkt (.) Syntax zugreift, 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 kann als bequemere Schreibweise für (*foo).bar verwendet werden. Das Asterisk (*) wäre normalerweise erforderlich, um den Zeiger in eine "Referenz" zu verwandeln, die dereferenziert werden kann, aber jetzt sind Zeiger und Referenzen nahezu austauschbar.
  • Wenn foo kein Zeiger ist: Der Punkt (.) Operator funktioniert genau so, wie Sie es gewohnt sind, um direkt auf Mitglieder zuzugreifen.
  • Wenn pa ein Zeiger ist, der die Startadresse eines Arrays speichert, dann gibt pa[i] Ihnen direkten Zugang zu der Speicherstelle, an der das i-te Element dieses Arrays gespeichert ist.

Weitere Details und ein Beispiel finden Sie unter Syntaxzucker für das Dereferenzieren von Kompositen in WGSL.

readonly_and_readwrite_storage_textures

Wenn verfügbar, ermöglicht es das Setzen der "read-only" und "read-write" storageTexture.access Werte, wenn Speichertextur-Bindgruppe-Eintragstypen in einem Bindgrupp-Layout spezifiziert werden. Diese ermöglichen es WGSL-Code, Speichertexturen zu lesen und Speichertexturen zu lesen/schreiben.

subgroup_id

Wenn verfügbar, sind die WGSL-eingebauten Werte subgroup_id und num_subgroups in Rechenshaders nutzbar. Diese verbessern den Prozess der Arbeitsplanung über Untergruppen hinweg, indem der Speicher indiziert wird, um überlappende Speicherzugriffe zu vermeiden. Weitere Details finden Sie unter WGSL subgroup_id-Erweiterung.

Hinweis: Damit die subgroup_id WGSL-Funktion nutzbar ist, muss die subgroups Erweiterung im GPUDevice aktiviert werden (siehe GPUSupportedFeatures).

uniform_buffer_standard_layout

Wenn verfügbar, verwenden Uniform-Puffer die gleichen Speicherlayout-Einschränkungen wie Speicherpuffer, was es erleichtert, Datenstrukturen zwischen beiden Pufferarten zu teilen. Das bedeutet, Uniform-Puffer sind nicht mehr verpflichtet, 16-Byte-Ausrichtung bei Array-Elementen zu haben oder verschachtelte Struktur-Offsets auf ein Vielfaches von 16 Bytes zu polstern.

Weitere Details finden Sie unter WGSL uniform_buffer_standard_layout Erweiterung.

unrestricted_pointer_parameters

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

  • Parameterzeiger zu Speicher-, Uniform- und Arbeitsgruppen-Adressräumen, die an benutzerdefinierte Funktionen übergeben werden.

  • Zeiger auf Strukturmitglieder und Array-Elemente, die an benutzerdefinierte Funktionen übergeben werden.

    Weitere Details finden Sie unter Zeiger als Funktionsparameter.

Instanzeigenschaften

Die folgende Eigenschaft ist für alle schreibgeschützten setartigen Objekte verfügbar:

size

Gibt die Anzahl der Werte im Set zurück.

Instanzmethoden

Die folgenden Methoden sind für alle schreibgeschützten setartigen Objekte verfügbar:

has()

Gibt einen Boolean zurück, der angibt, ob ein Element mit dem gegebenen Wert im Set vorhanden ist oder nicht.

values()

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

forEach()

Ruft die bereitgestellte Callback-Funktion einmal für jeden Wert im Set in der Einfügereihenfolge 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");
}

Set-Größ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

Spezifikation
WebGPU
# gpuwgsllanguagefeatures

Browser-Kompatibilität

Siehe auch