GPUSupportedFeatures

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 GPUSupportedFeatures-Interface der WebGPU API ist ein Set-ähnliches Objekt, das zusätzliche Funktionalitäten beschreibt, die von einem GPUAdapter unterstützt werden.

Das GPUSupportedFeatures-Objekt für den aktuellen Adapter kann über die GPUAdapter.features-Eigenschaft abgerufen werden — verwenden Sie dies, um zu überprüfen, welche Funktionen Ihre aktuelle Konfiguration unterstützt. Um ein GPUDevice mit einer bestimmten aktivierten Funktion zu erstellen, müssen Sie diese im requiredFeatures-Array des GPUAdapter.requestDevice()-Descriptors angeben.

Beachten Sie, dass nicht alle Funktionen in WebGPU in allen unterstützenden Browsern verfügbar sein werden, selbst wenn die Funktionen von der zugrunde liegenden Hardware unterstützt werden. Dies könnte auf Einschränkungen im zugrunde liegenden System, Browser oder Adapter zurückzuführen sein. Zum Beispiel:

  • Das zugrunde liegende System kann nicht garantieren, dass eine Funktion auf eine Weise freigegeben wird, die mit einem bestimmten Browser kompatibel ist.
  • Der Browseranbieter hat möglicherweise keinen sicheren Weg gefunden, um die Unterstützung dieser Funktion zu implementieren, oder hat es einfach noch nicht getan.

Wenn Sie hoffen, eine bestimmte zusätzliche Funktion in einer WebGPU-App zu nutzen, wird gründliches Testen empfohlen.

Verfügbare Funktionen

Die folgenden zusätzlichen Funktionen sind in WebGPU definiert. Beachten Sie, dass der genaue Umfang der verfügbaren Funktionen zwischen verschiedenen Implementierungen und physischen Geräten variieren und sich im Laufe der Zeit ändern wird.

Funktionsname Beschreibung
bgra8unorm-storage Wenn aktiviert, erlaubt die STORAGE_BINDING usage von bgra8unorm-format GPUTextures.
clip-distances Wenn aktiviert, erlaubt die Verwendung von clip_distances in WGSL.
depth-clip-control Erlaubt, depth-clipping zu deaktivieren. Wenn depth-clip-control aktiviert ist, steht die unclippedDepth-Eigenschaft auf dem primitive-Objekt zur Verfügung, das als Teil des createRenderPipeline() oder createRenderPipelineAsync()-Descriptors beim Erstellen eines GPURenderPipeline enthalten ist. primitive beschreibt, wie eine Pipeline Primitiven aus ihren Vertex-Eingaben konstruiert und rasterisiert. Stellen Sie unclipped-depth auf true, um depth-clipping zu deaktivieren.
depth32float-stencil8 Erlaubt die Erstellung von Texturen mit dem Format depth32float-stencil8. Wenn depth32float-stencil8 aktiviert ist, kann der Wert depth32float-stencil8 für die format-Eigenschaft des createTexture()-Descriptors verwendet werden, wenn ein GPUTexture erstellt wird.
dual-source-blending Wenn aktiviert, erlaubt die Verwendung von dual_source_blending in WGSL, das beide Pixel-Shader-Ausgaben (@blend_src(0) und @blend_src(1)) als Eingaben zu einer Mischoperation mit dem einzigen Farbanhang bei @location(0) verwendet. In WebGPU ermöglicht dual-source-blending die folgenden Blendfaktor-Operationen (die in den dstFactor und srcFactor-Eigenschaften von createRenderPipeline() und createRenderPipelineAsync()-Descriptoren angegeben werden): src1, one-minus-src1, src1-alpha und one-minus-src1-alpha.
float32-blendable Wenn aktiviert, erlaubt das Blending von r32float-, rg32float-, und rgba32float-format GPUTextures.
float32-filterable Wenn aktiviert, erlaubt das Filtern von r32float-, rg32float-, und rgba32float-format GPUTextures.
indirect-first-instance Wenn aktiviert, erlaubt die Verwendung von nicht-null firstInstance Werten in der indirectBuffer-Eigenschaft der drawIndirect() und drawIndexedIndirect()-Methoden, die auf Instanzen von GPURenderPassEncoder und GPURenderBundleEncoder verfügbar sind.
rg11b10ufloat-renderable Wenn aktiviert, erlaubt die RENDER_ATTACHMENT usage von rg11b10ufloat-format GPUTextures sowie deren Blending und Multisampling.
shader-f16 Wenn aktiviert, erlaubt die Verwendung des Halbgleitkomma-Datentyps f16 in WGSL.
subgroups Wenn aktiviert, erlaubt die Verwendung von subgroups in WGSL. Subgroups ermöglichen SIMD-Level-Parallelismus, wobei Threads in einer Arbeitsgruppe kommunizieren und kollektive mathematische Operationen wie die Berechnung einer Summe von Zahlen ausführen können. Subgroups bieten eine effiziente Methode zum Thread-übergreifenden Datenaustausch. Beachten Sie, dass die subgroupMinSize- und subgroupMaxSize-Eigenschaften nützlich sein können, um zu überprüfen, ob Sie beispielsweise einen fest programmierten Algorithmus haben, der eine Subgroup einer bestimmten Größe erfordert. Sie können f16-Werte mit Subgroups verwenden, wenn Sie ein GPUDevice mit beiden Funktionen, shader-f16 und subgroups, anfordern.
texture-compression-bc Erlaubt die Erstellung von zweidimensionalen BC-komprimierten Texturen. Wenn texture-compression-bc aktiviert ist, können die folgenden Werte für die format-Eigenschaft des createTexture()-Descriptors verwendet werden, wenn ein GPUTexture erstellt wird: 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 Erlaubt die Erstellung von dreidimensionalen BC-komprimierten Texturen. Wenn texture-compression-bc-sliced-3d aktiviert ist, muss auch texture-compression-bc aktiviert sein, da es die BC-Texturformate erlaubt, in den ersten beiden Dimensionen verwendet zu werden (siehe texture-compression-bc, oben). texture-compression-bc-sliced-3d ermöglicht, dass diese Texturen in der dritten Dimension verwendet werden. Adapter, die texture-compression-bc unterstützen, unterstützen immer texture-compression-bc-sliced-3d. Beachten Sie, dass diese Funktion derzeit in keinem Browser unterstützt wird.
texture-compression-astc Erlaubt die Erstellung von zweidimensionalen ASTC-komprimierten Texturen. Wenn texture-compression-astc aktiviert ist, können die folgenden Werte für die format-Eigenschaft des createTexture()-Descriptors verwendet werden, wenn ein GPUTexture erstellt wird: 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 Erlaubt die Erstellung von dreidimensionalen ASTC-komprimierten Texturen. Wenn texture-compression-astc-sliced-3d aktiviert ist, muss auch texture-compression-astc aktiviert sein, da es die ASTC-Texturformate erlaubt, in den ersten beiden Dimensionen verwendet zu werden (siehe texture-compression-astc, oben). texture-compression-astc-sliced-3d ermöglicht, dass diese Texturen in der dritten Dimension verwendet werden. Adapter, die texture-compression-astc unterstützen, unterstützen nicht immer texture-compression-astc-sliced-3d. Beachten Sie, dass diese Funktion derzeit in keinem Browser unterstützt wird.
texture-compression-etc2 Erlaubt die Erstellung von zweidimensionalen ETC2-komprimierten Texturen. Wenn texture-compression-etc2 aktiviert ist, können die folgenden Werte für die format-Eigenschaft des createTexture()-Descriptors verwendet werden, wenn ein GPUTexture erstellt wird: etc2-rgb8unorm, etc2-rgb8unorm-srgb, etc2-rgb8a1unorm, etc2-rgb8a1unorm-srgb, etc2-rgba8unorm, etc2-rgba8unorm-srgb, eac-r11unorm, eac-r11snorm, eac-rg11unorm, und eac-rg11snorm.
timestamp-query Erlaubt das Ausführen von Zeitstempelabfragen, die die Zeit messen, die für die Ausführung von Berechnungs- und Renderpässe benötigt wird. Wenn timestamp-query aktiviert ist, kann der Wert timestamp für die type-Eigenschaft des createQuerySet()-Descriptors gesetzt werden, wenn ein GPUQuerySet erstellt wird. Darüber hinaus kann die timestampWrites-Eigenschaft auf den beginComputePass() und beginRenderPass()-Descriptors gesetzt werden, wenn ein GPUComputePassEncoder und GPURenderPassEncoder bzw. erstellt werden. GPUQuerySet-Objekte werden innerhalb der Objekte referenziert, die in der timestampWrites-Eigenschaft enthalten sind, um anzugeben, wohin die Zeitstempel geschrieben werden sollen.

Instanzeigenschaften

Die folgenden Eigenschaften sind für alle schreibgeschützten Set-ähnlichen Objekte verfügbar (die unten stehenden Links führen zur Referenzseite des Set-globalen Objekts).

size

Gibt die Anzahl der Werte im Set zurück.

Instanzmethoden

Die folgenden Methoden sind für alle schreibgeschützten Set-ähnlichen Objekte verfügbar (die unten stehenden Links führen zur Referenzseite des Set-globalen Objekts).

has()

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

values()

Gibt ein neues Iteratorobjekt zurück, das die Werte für jedes Element im Set in der Einfügereihenfolge durchläuft.

keys()

Ein Alias für values().

entries()

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

forEach()

Ruft eine bereitgestellte Callback-Funktion für jeden im Set vorhandenen Wert in Einfügereihenfolge einmal auf.

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

Specification
WebGPU
# gpu-supportedfeatures

Browser-Kompatibilität

Siehe auch