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

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.

Die GPUSupportedFeatures-Schnittstelle der WebGPU API ist ein Set-ähnliches Objekt, das zusätzliche Funktionalitäten beschreibt, die von einem GPUAdapter unterstützt werden.

Auf das GPUSupportedFeatures-Objekt für den aktuellen Adapter wird über die GPUAdapter.features-Eigenschaft zugegriffen — verwenden Sie dies, um zu testen, welche Funktionen Ihr aktuelles Setup unterstützt. Um ein GPUDevice mit einer bestimmten aktivierten Funktion zu erstellen, müssen Sie diese im requiredFeatures-Array des GPUAdapter.requestDevice()-Deskriptors angeben.

Sie sollten beachten, 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 durch Einschränkungen im zugrunde liegenden System, Browser oder Adapter bedingt sein. Zum Beispiel:

  • Das zugrunde liegende System kann möglicherweise nicht garantieren, dass eine Funktion auf eine Weise bereitgestellt wird, die mit einem bestimmten Browser kompatibel ist.
  • Der Browser-Anbieter hat möglicherweise noch keinen sicheren Weg gefunden, Unterstützung für diese Funktion zu implementieren, oder hat es einfach noch nicht geschafft.

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 sich die genaue Menge der verfügbaren Funktionen je nach Implementierung und physischem Gerät unterscheidet und im Laufe der Zeit ändern wird.

Funktionsname Beschreibung
bgra8unorm-storage Wenn aktiviert, erlaubt STORAGE_BINDING usage von bgra8unorm-format GPUTextures.
clip-distances Wenn aktiviert, erlaubt die Verwendung von clip_distances in WGSL.
core-features-and-limits Wenn aktiviert, bedeutet dies, dass der GPUAdapter / GPUDevice in der Lage ist, alle Kern-WebGPU-Funktionen und -Grenzen zu verwenden, wodurch Anwendungen Geräte mit den Grafik-APIs Direct 3D 12, Metal und Vulkan unterstützen können (beachten Sie, dass Safari nur Metal unterstützt). Dies wird auch als "core" WebGPU bezeichnet. Derzeit haben alle Adapter "core" WebGPU verfügbar, und es ist auf allen Geräten automatisch aktiviert, selbst wenn es nicht angefordert wird. Diese Funktion ermöglicht es Adaptern und Geräten, zwischen "core" WebGPU und "Kompatibilitätsmodus" zu unterscheiden, das Unterstützung für ältere Grafik-APIs (wie Direct 3D 11 und OpenGL ES) auf Kosten von Leistung und Funktionsumfang bietet.
depth-clip-control Wenn aktiviert, erlaubt es, Tiefen-Clipping zu deaktivieren. Wenn depth-clip-control aktiviert ist, ist die unclippedDepth-Eigenschaft auf dem primitive-Objekt verfügbar, das als Teil des Deskriptors von createRenderPipeline() oder createRenderPipelineAsync() bei der Erstellung einer GPURenderPipeline enthalten ist. primitive beschreibt, wie eine Pipeline Primitiven aus ihren Vertex-Eingaben konstruiert und rastert. Setzen Sie unclipped-depth auf true, um das Tiefen-Clipping zu deaktivieren.
depth32float-stencil8 Wenn aktiviert, erlaubt es die Erstellung von Texturen mit dem Format depth32float-stencil8. Wenn depth32float-stencil8 aktiviert ist, kann der depth32float-stencil8-Wert für die format-Eigenschaft des createTexture()-Deskriptors verwendet werden, wenn eine GPUTexture erstellt wird.
dual-source-blending Wenn aktiviert, erlaubt es die Verwendung von dual_source_blending in WGSL, das beide Pixel-Shader-Ausgaben (@blend_src(0) und @blend_src(1)) als Eingaben für eine Mischoperation mit dem einzigen Farbanhang an @location(0) verwendet. In WebGPU ermöglicht dual-source-blending die folgenden Blendfaktoroperationen (die in den Eigenschaften dstFactor und srcFactor von createRenderPipeline() und createRenderPipelineAsync() angegeben sind): src1, one-minus-src1, src1-alpha und one-minus-src1-alpha.
float32-blendable Wenn aktiviert, erlaubt es das Blending von r32float-, rg32float-, und rgba32float-format GPUTextures.
float32-filterable Wenn aktiviert, erlaubt es das Filtering von r32float-, rg32float-, und rgba32float-format GPUTextures.
indirect-first-instance Wenn aktiviert, erlaubt es die Verwendung von Nicht-Null-firstInstance-Werten in der indirectBuffer-Eigenschaft der drawIndirect() und drawIndexedIndirect()-Methoden, die auf GPURenderPassEncoder und GPURenderBundleEncoder-Instanzen verfügbar sind.
primitive-index Wenn aktiviert, erlaubt es die Verwendung der eingebauten Variable primitive_index in WGSL. Dieser eingebaute Eingabewert liefert einen pro-Primitive-Index an Fragment-Shader auf unterstützter Hardware, ähnlich wie die vorhandenen eingebauten vertex_index und instance_index. Die eingebaute Variable primitive_index ist nützlich für fortgeschrittene grafische Techniken, wie z.B. virtualisierte Geometrie.
rg11b10ufloat-renderable Wenn aktiviert, erlaubt es die RENDER_ATTACHMENT usage von rg11b10ufloat-format GPUTextures sowie deren Blending und Multisampling.
shader-f16 Wenn aktiviert, erlaubt es die Verwendung des halbpräzisen Fließkomma-Datentyps f16 in WGSL.
subgroups Wenn aktiviert, erlaubt es die Verwendung von Subgroups in WGSL. Subgroups ermöglichen SIMD-Level-Parallelismus, der Threads in einer Arbeitsgruppe erlaubt, zu kommunizieren und kollektive mathematische Operationen auszuführen, wie zum Beispiel die Berechnung einer Summe von Zahlen, und bieten eine effiziente Methode zum Teilen von Daten zwischen Threads. Beachten Sie, dass die Eigenschaften subgroupMinSize und subgroupMaxSize nützlich sein können, um zu überprüfen, ob Sie beispielsweise einen hardcodierten Algorithmus haben, der eine Subgruppe einer bestimmten Größe erfordert. Sie können f16-Werte mit Subgroups verwenden, wenn Sie ein GPUDevice mit sowohl den shader-f16 als auch subgroups-Funktionen anfordern.
texture-compression-bc Wenn aktiviert, erlaubt es 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()-Deskriptors verwendet werden, wenn eine 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 Wenn aktiviert, erlaubt es 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 für die Verwendung in den ersten beiden Dimensionen aktiviert (siehe texture-compression-bc oben). texture-compression-bc-sliced-3d ermöglicht, dass diese Texturen auch in der dritten Dimension verwendet werden können.
texture-compression-astc Wenn aktiviert, erlaubt es 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()-Deskriptors verwendet werden, wenn eine 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 Wenn aktiviert, erlaubt es 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 für die Verwendung in den ersten beiden Dimensionen aktiviert (siehe texture-compression-astc oben). texture-compression-astc-sliced-3d ermöglicht, dass diese Texturen auch in der dritten Dimension verwendet werden können.
texture-compression-etc2 Wenn aktiviert, erlaubt es 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()-Deskriptors verwendet werden, wenn eine 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.
texture-formats-tier1 Wenn aktiviert, wird die Funktion rg11b10ufloat-renderable automatisch aktiviert und erlaubt die Erstellung von GPUTextures (über GPUDevice.createTexture()) mit den in Tier 1 angegebenen Formaten. Das Tier-1-Set von Texturformaten ist darauf ausgelegt, Entwicklern zu ermöglichen, bestehende Inhalte für das Web zu portieren, ohne sie umschreiben zu müssen, um die geringeren Fähigkeiten von WebGPU zu nutzen.
texture-formats-tier2 Wenn aktiviert, werden die Funktionen rg11b10ufloat-renderable und texture-formats-tier1 automatisch aktiviert und erlaubt die Erstellung von GPUTextures (über GPUDevice.createTexture()) mit den in Tier 2 angegebenen Formaten. Das Tier-2-Set von Texturformaten unterstützt Speichertexturformate, die in "core" WebGPU nicht unterstützt werden und für fortgeschrittene Anwendungen erforderlich sind.
timestamp-query Wenn aktiviert, erlaubt es, Zeitstempelabfragen auszuführen, die die Zeit messen, die für die Ausführung von Rechen- und Render-Pässen benötigt wird. Wenn timestamp-query aktiviert ist, kann der timestamp-Wert für die type-Eigenschaft des createQuerySet()-Deskriptors festgelegt werden, wenn ein GPUQuerySet erstellt wird. Darüber hinaus kann die timestampWrites-Eigenschaft auf den Deskriptoren beginComputePass() und beginRenderPass() festgelegt werden, wenn eine GPUComputePassEncoder und eine GPURenderPassEncoder erstellt werden. GPUQuerySet-Objekte werden innerhalb der Objekte referenziert, die in der Eigenschaft timestampWrites enthalten sind, um anzugeben, wo Zeitstempel geschrieben werden sollen.

Instanz-Eigenschaften

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

size

Gibt die Anzahl der Werte im Set zurück.

Instanz-Methoden

Die folgenden Methoden sind für alle schreibgeschützten Set-ähnlichen Objekte verfügbar (die Links unten führen zur Set-Referenzseite des 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 Iterator-Objekt zurück, das die Werte für jedes Element im Set 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 im Set in Einfüge-Reihenfolge enthält.

forEach()

Ruft eine bereitgestellte Callback-Funktion einmal für jeden im Set vorhandenen Wert in Einfüge-Reihenfolge 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
# gpusupportedfeatures

Browser-Kompatibilität

Siehe auch