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

View in English Always switch to English

GPUSupportedFeatures

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.

Das Interface GPUSupportedFeatures der WebGPU API ist ein Set-ähnliches Objekt, das zusätzliche Funktionen beschreibt, die von einem GPUAdapter unterstützt werden.

Auf das GPUSupportedFeatures-Objekt des aktuellen Adapters greifen Sie über die Eigenschaft GPUAdapter.features zu. Damit können Sie prüfen, welche Features Ihre aktuelle Umgebung unterstützt. Um ein GPUDevice mit einem bestimmten aktivierten Feature zu erstellen, müssen Sie dieses im Array requiredFeatures des Deskriptors von GPUAdapter.requestDevice() angeben.

Beachten Sie, dass nicht alle Features in jedem Browser, der WebGPU unterstützt, für WebGPU verfügbar sind – selbst wenn die zugrunde liegende Hardware sie unterstützt. Das kann an Einschränkungen des zugrunde liegenden Systems, des Browsers oder des Adapters liegen. Zum Beispiel:

  • Das zugrunde liegende System kann möglicherweise nicht gewährleisten, dass ein Feature auf eine Weise bereitgestellt wird, die mit einem bestimmten Browser kompatibel ist.
  • Der Browserhersteller hat möglicherweise noch keinen sicheren Weg gefunden, das Feature zu unterstützen, oder hatte noch keine Gelegenheit, die Unterstützung zu implementieren.

Wenn Sie ein bestimmtes zusätzliches Feature in einer WebGPU-App nutzen möchten, sollten Sie es gründlich testen.

Verfügbare Features

Die folgenden zusätzlichen Features sind in WebGPU definiert. Beachten Sie, dass die genaue Menge der verfügbaren Features je nach Implementierung und physischem Gerät variiert und sich im Laufe der Zeit ändern wird.

Feature-Name Beschreibung
bgra8unorm-storage Wenn aktiviert, erlaubt dieses Feature die usage STORAGE_BINDING für GPUTexture-Objekte mit dem format bgra8unorm.
clip-distances Wenn aktiviert, erlaubt dieses Feature die Verwendung von clip_distances in WGSL.
core-features-and-limits Wenn aktiviert, zeigt dieses Feature an, dass der GPUAdapter bzw. das GPUDevice alle WebGPU-Kernfeatures und -Limits verwenden kann. Dadurch können Anwendungen Geräte unterstützen, die moderne Grafik-APIs der jeweiligen Plattform nutzen. Standardmäßig ist core-features-and-limits bei allen Adaptern aktiviert; sie unterstützen daher WebGPU mit den Kernfeatures. Um einen Adapter im Kompatibilitätsmodus zu erstellen, geben Sie beim Aufruf von GPU.requestAdapter() für featureLevel den Wert compatibility an. Der Kompatibilitätsmodus unterstützt ältere Grafik-APIs (wie Direct3D 11 und OpenGL ES 3.1), allerdings auf Kosten der Leistung und des Funktionsumfangs.

Beachten Sie, dass ein Adapter im Kompatibilitätsmodus nur auf Geräten erstellt wird, die WebGPU mit den Kernfeatures nicht unterstützen. Auf Geräten, die WebGPU mit den Kernfeatures unterstützen, unterstützt auch der Adapter diese (core-features-and-limits ist aktiviert), und Sie können moderne Features verwenden. Ein Beispiel dazu finden Sie unter Kompatibilitätsmodus nur bei Bedarf verwenden.
depth-clip-control Wenn aktiviert, kann Depth-Clipping deaktiviert werden. Ist depth-clip-control aktiviert, steht die Eigenschaft unclippedDepth für das primitive-Objekt im Deskriptor von createRenderPipeline() oder createRenderPipelineAsync() zur Verfügung, wenn eine GPURenderPipeline erstellt wird. primitive beschreibt, wie eine Pipeline aus ihren Vertex-Eingaben Primitive erstellt und rasterisiert. Setzen Sie unclipped-depth auf true, um Depth-Clipping zu deaktivieren.
depth32float-stencil8 Wenn aktiviert, können Texturen mit dem Format depth32float-stencil8 erstellt werden. Ist depth32float-stencil8 aktiviert, kann beim Erstellen einer GPUTexture der Wert depth32float-stencil8 für die Eigenschaft format des Deskriptors von createTexture() verwendet werden.
dual-source-blending Wenn aktiviert, erlaubt dieses Feature die Verwendung von dual_source_blending in WGSL. Dabei werden beide Ausgaben des Pixel-Shaders (@blend_src(0) und @blend_src(1)) als Eingaben für eine Blending-Operation mit dem einzelnen Color-Attachment an @location(0) verwendet. In WebGPU aktiviert dual-source-blending die folgenden Blendfaktoren, die über die Eigenschaften dstFactor und srcFactor der Deskriptoren von createRenderPipeline() und createRenderPipelineAsync() angegeben werden: src1, one-minus-src1, src1-alpha und one-minus-src1-alpha.
float32-blendable Wenn aktiviert, erlaubt dieses Feature das Blending von GPUTexture-Objekten mit dem format r32float, rg32float oder rgba32float.
float32-filterable Wenn aktiviert, erlaubt dieses Feature das Filtern von GPUTexture-Objekten mit dem format r32float, rg32float oder rgba32float.
indirect-first-instance Wenn aktiviert, erlaubt dieses Feature die Verwendung von firstInstance-Werten ungleich null in der Eigenschaft indirectBuffer der Methoden drawIndirect() und drawIndexedIndirect(), die für Instanzen von GPURenderPassEncoder und GPURenderBundleEncoder verfügbar sind.
primitive-index Wenn aktiviert, erlaubt dieses Feature die Verwendung der eingebauten Variablen primitive_index in WGSL. Dieser eingebaute Eingabewert stellt Fragment-Shadern auf unterstützter Hardware einen Index pro Primitiv bereit, ähnlich den vorhandenen eingebauten Werten vertex_index und instance_index. Die eingebaute Variable primitive_index ist für fortgeschrittene Grafiktechniken wie virtualisierte Geometrie nützlich.
rg11b10ufloat-renderable Wenn aktiviert, erlaubt dieses Feature die usage RENDER_ATTACHMENT für GPUTexture-Objekte mit dem format rg11b10ufloat sowie deren Blending und Multisampling.
shader-f16 Wenn aktiviert, erlaubt dieses Feature die Verwendung des Gleitkommatyps f16 mit halber Genauigkeit in WGSL.
subgroups Wenn aktiviert, erlaubt dieses Feature die Verwendung von Subgroups in WGSL. Subgroups ermöglichen Parallelität auf SIMD-Ebene: Threads innerhalb einer Workgroup können miteinander kommunizieren und gemeinsame mathematische Operationen wie das Berechnen einer Summe ausführen. Außerdem bieten sie eine effiziente Möglichkeit, Daten zwischen Threads auszutauschen. Die Eigenschaften subgroupMinSize und subgroupMaxSize können beispielsweise hilfreich sein, wenn Sie prüfen möchten, ob ein Algorithmus mit fest vorgegebener Subgroup-Größe ausgeführt werden kann. Sie können f16-Werte mit Subgroups verwenden, wenn Sie ein GPUDevice anfordern, für das sowohl shader-f16 als auch subgroups aktiviert sind. Wenn subgroups aktiviert ist, kann außerdem das WGSL-Sprachfeature subgroup_id verwendet werden.
texture-component-swizzle Wenn aktiviert, kann beim Aufruf von GPUTexture.createView() die Eigenschaft swizzle gesetzt werden. Mit diesem Feature lassen sich die Werte des Rot-, Grün-, Blau- und Alphakanals einer Textur in einer Texturansicht umordnen oder ersetzen, wenn ein Shader darauf zugreift.
texture-compression-bc Wenn aktiviert, können zweidimensionale BC-komprimierte Texturen erstellt werden. Ist texture-compression-bc aktiviert, können beim Erstellen einer GPUTexture die folgenden Werte für die Eigenschaft format des Deskriptors von createTexture() verwendet werden: bc1-rgba-unorm, bc1-rgba-unorm-srgb, bc2-rgba-unorm, bc2-rgba-unorm-srgb, bc3-rgba-unorm, bc3-rgba-unorm-srgb, bc4-r-unorm, bc4-r-snorm, bc5-rg-unorm, bc5-rg-snorm, bc6h-rgb-ufloat, bc6h-rgb-float, bc7-rgba-unorm und bc7-rgba-unorm-srgb.
texture-compression-bc-sliced-3d Wenn aktiviert, können dreidimensionale BC-komprimierte Texturen erstellt werden. Ist texture-compression-bc-sliced-3d aktiviert, muss auch texture-compression-bc aktiviert sein, damit die BC-Texturformate in den ersten beiden Dimensionen verwendet werden können (siehe texture-compression-bc oben). texture-compression-bc-sliced-3d ermöglicht die Verwendung derselben Texturen in der dritten Dimension.
texture-compression-astc Wenn aktiviert, können zweidimensionale ASTC-komprimierte Texturen erstellt werden. Ist texture-compression-astc aktiviert, können beim Erstellen einer GPUTexture die folgenden Werte für die Eigenschaft format des Deskriptors von createTexture() verwendet werden: astc-4x4-unorm, astc-4x4-unorm-srgb, astc-5x4-unorm, astc-5x4-unorm-srgb, astc-5x5-unorm, astc-5x5-unorm-srgb, astc-6x5-unorm, astc-6x5-unorm-srgb, astc-6x6-unorm, astc-6x6-unorm-srgb, astc-8x5-unorm, astc-8x5-unorm-srgb, astc-8x6-unorm, astc-8x6-unorm-srgb, astc-8x8-unorm, astc-8x8-unorm-srgb, astc-10x5-unorm, astc-10x5-unorm-srgb, astc-10x6-unorm, astc-10x6-unorm-srgb, astc-10x8-unorm, astc-10x8-unorm-srgb, astc-10x10-unorm, astc-10x10-unorm-srgb, astc-12x10-unorm, astc-12x10-unorm-srgb und astc-12x12-unorm``astc-12x12-unorm-srgb.
texture-compression-astc-sliced-3d Wenn aktiviert, können dreidimensionale ASTC-komprimierte Texturen erstellt werden. Ist texture-compression-astc-sliced-3d aktiviert, muss auch texture-compression-astc aktiviert sein, damit die ASTC-Texturformate in den ersten beiden Dimensionen verwendet werden können (siehe texture-compression-astc oben). texture-compression-astc-sliced-3d ermöglicht die Verwendung derselben Texturen in der dritten Dimension.
texture-compression-etc2 Wenn aktiviert, können zweidimensionale ETC2-komprimierte Texturen erstellt werden. Ist texture-compression-etc2 aktiviert, können beim Erstellen einer GPUTexture die folgenden Werte für die Eigenschaft format des Deskriptors von createTexture() verwendet werden: etc2-rgb8unorm, etc2-rgb8unorm-srgb, etc2-rgb8a1unorm, etc2-rgb8a1unorm-srgb, etc2-rgba8unorm, etc2-rgba8unorm-srgb, eac-r11unorm, eac-r11snorm, eac-rg11unorm und eac-rg11snorm.
texture-formats-tier1 Wenn aktiviert, wird automatisch auch rg11b10ufloat-renderable aktiviert. Außerdem können GPUTexture-Objekte über GPUDevice.createTexture() mit den unter Tier 1 angegebenen Formaten erstellt werden. Die Tier-1-Texturformate sollen es Entwicklern ermöglichen, vorhandene Inhalte ins Web zu portieren, ohne sie für die eingeschränkteren Möglichkeiten von WebGPU umschreiben zu müssen.
texture-formats-tier2 Wenn aktiviert, werden automatisch auch rg11b10ufloat-renderable und texture-formats-tier1 aktiviert. Außerdem können GPUTexture-Objekte über GPUDevice.createTexture() mit den unter Tier 2 angegebenen Formaten erstellt werden. Die Tier-2-Texturformate unterstützen Speichertexturformate, die in WebGPU mit den Kernfeatures nicht unterstützt werden und für fortgeschrittene Anwendungsfälle erforderlich sind.
timestamp-query Wenn aktiviert, können Timestamp-Queries ausgeführt werden, die die Ausführungsdauer von Compute- und Render-Passes messen. Ist timestamp-query aktiviert, kann beim Erstellen eines GPUQuerySet der Wert timestamp für die Eigenschaft type des Deskriptors von createQuerySet() gesetzt werden. Außerdem kann beim Erstellen eines GPUComputePassEncoder bzw. GPURenderPassEncoder die Eigenschaft timestampWrites im Deskriptor von beginComputePass() bzw. beginRenderPass() gesetzt werden. Auf GPUQuerySet-Objekte wird in den Objekten verwiesen, die in der Eigenschaft timestampWrites enthalten sind. So wird festgelegt, wohin die Zeitstempel geschrieben werden.

Instanzeigenschaften

Die folgende Eigenschaft steht allen schreibgeschützten Set-ähnlichen Objekten zur Verfügung. Der folgende Link führt zur Referenzseite des globalen Objekts Set.

size

Gibt die Anzahl der Werte im Set zurück.

Instanzmethoden

Die folgenden Methoden stehen allen schreibgeschützten Set-ähnlichen Objekten zur Verfügung. Die folgenden Links führen zur Referenzseite des globalen Objekts Set.

has()

Gibt einen booleschen Wert zurück, der angibt, ob das Set ein Element mit dem angegebenen Wert enthält.

values()

Gibt ein neues Iterator-Objekt zurück, das die Werte der Elemente im Set in Einfügereihenfolge liefert.

keys()

Ein Alias für values().

entries()

Gibt ein neues Iterator-Objekt zurück, das für jedes Element im Set ein Array der Form [value, value] in Einfügereihenfolge enthält.

forEach()

Ruft eine bereitgestellte Callback-Funktion für jeden im Set enthaltenen Wert einmal auf, und zwar in Einfügereihenfolge.

Beispiele

js
async function init() {
  if (!navigator.gpu) {
    throw Error("WebGPU not supported.");
  }

  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) {
    throw Error("Couldn't request WebGPU adapter.");
  }

  const adapterFeatures = adapter.features;

  // Return the size of the set
  console.log(adapterFeatures.size);

  // Check whether a feature is supported by the adapter
  console.log(adapterFeatures.has("texture-compression-astc"));

  // Iterate through all the set values using values()
  const valueIterator = adapterFeatures.values();
  for (const value of valueIterator) {
    console.log(value);
  }

  // Iterate through all the set values using keys()
  const keyIterator = adapterFeatures.keys();
  for (const value of keyIterator) {
    console.log(value);
  }

  // Iterate through all the set values using entries()
  const entryIterator = adapterFeatures.entries();
  for (const entry of entryIterator) {
    console.log(entry[0]);
  }

  // Iterate through all the set values using forEach()
  adapterFeatures.forEach((value) => {
    console.log(value);
  });

  // …
}

Spezifikationen

Spezifikation
WebGPU
# gpusupportedfeatures

Browser-Kompatibilität

Siehe auch