GPUSupportedFeatures
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
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 wird über die GPUAdapter.features
Eigenschaft aufgerufen - nutzen Sie diese, um zu testen, welche Features Ihre aktuelle Konfiguration unterstützt. Um ein GPUDevice
mit einem bestimmten aktivierten Feature zu erstellen, müssen Sie es im requiredFeatures
Array des GPUAdapter.requestDevice()
Deskriptors angeben.
Sie sollten beachten, dass nicht alle Features für WebGPU in allen unterstützenden Browsern verfügbar sein werden, selbst wenn die Features von der zugrunde liegenden Hardware unterstützt werden. Dies könnte aufgrund von Einschränkungen im zugrunde liegenden System, Browser oder Adapter geschehen. Zum Beispiel:
- Das zugrunde liegende System kann möglicherweise nicht die Exposition eines Features in einer Weise garantieren, die mit einem bestimmten Browser kompatibel ist.
- Der Browser-Anbieter hat möglicherweise keinen sicheren Weg gefunden, um die Unterstützung für dieses Feature zu implementieren, oder hat es einfach noch nicht geschafft.
Wenn Sie hoffen, ein bestimmtes zusätzliches Feature in einer WebGPU-Anwendung zu nutzen, wird gründliches Testen empfohlen.
Verfügbare Features
Die folgenden zusätzlichen Features sind in WebGPU definiert. Beachten Sie, dass der genaue Funktionsumfang je nach Implementierung und physischem Gerät variieren und sich im Laufe der Zeit ändern wird.
Feature-Name | Beschreibung |
---|---|
bgra8unorm-storage |
Wenn aktiviert, ermöglicht STORAGE_BINDING usage des bgra8unorm -format GPUTexture s. |
clip-distances |
Wenn aktiviert, ermöglicht die Verwendung von clip_distances in WGSL. |
depth-clip-control |
Ermöglicht das Deaktivieren des depth-clipping. Wenn depth-clip-control aktiviert ist, ist die unclippedDepth Eigenschaft auf dem primitive Objekt verfügbar, das Teil des Deskriptors ist, wenn Sie eine GPURenderPipeline mit createRenderPipeline() oder createRenderPipelineAsync() erstellen. primitive beschreibt, wie eine Pipeline Primitive aus den Vertex-Eingaben konstruiert und rastert. Setzen Sie unclipped-depth auf true , um das depth-clipping zu deaktivieren. |
depth32float-stencil8 |
Ermöglicht 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() Deskriptors verwendet werden, wenn Sie eine GPUTexture erstellen. |
dual-source-blending |
Wenn aktiviert, ermöglicht die Verwendung von dual_source_blending in WGSL, das beide Pixelausgaben (@blend_src(0) und @blend_src(1) ) als Eingaben für eine Mischoperation mit dem Einzel-Farbanhang an @location(0) verwendet. In WebGPU ermöglicht dual-source-blending die folgenden Blendfaktor-Operationen (angegeben in den dstFactor und srcFactor Eigenschaften der createRenderPipeline() und createRenderPipelineAsync() Deskriptoren): src1 , one-minus-src1 , src1-alpha und one-minus-src1-alpha . |
float32-blendable |
Wenn aktiviert, ermöglicht das Blending von r32float -, rg32float - und rgba32float -format GPUTexture s. |
float32-filterable |
Wenn aktiviert, ermöglicht das Filtern von r32float -, rg32float - und rgba32float -format GPUTexture s. |
indirect-first-instance |
Wenn aktiviert, ermöglicht 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. |
rg11b10ufloat-renderable |
Wenn aktiviert, ermöglicht RENDER_ATTACHMENT usage von rg11b10ufloat -format GPUTexture s sowie deren Blending und Multisampling. |
shader-f16 |
Wenn aktiviert, ermöglicht die Verwendung des Halb-Präzisions-Gleitkomma-Typs f16 in WGSL. |
subgroups |
Wenn aktiviert, ermöglicht die Verwendung von Subgruppen in WGSL. Subgruppen ermöglichen SIMD-Level-Parallelismus, wodurch Threads in einer Arbeitsgruppe kommunizieren und kollektive mathematische Operationen wie das Berechnen einer Zahlensumme ausführen können, und bieten eine effiziente Methode für das Teilen von Daten zwischen Threads. Beachten Sie, dass die subgroupMinSize und subgroupMaxSize Eigenschaften nützlich sein können, um zu überprüfen, ob Sie beispielsweise einen fest kodierten Algorithmus haben, der eine Subgruppe mit einer bestimmten Größe erfordert. Sie können f16 Werte mit Subgruppen verwenden, wenn Sie ein GPUDevice mit beiden shader-f16 und subgroups Features anfordern. |
texture-compression-bc |
Ermöglicht 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 Sie eine GPUTexture erstellen: 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 |
Ermöglicht die Erstellung von dreidimensionalen BC-komprimierten Texturen. Wenn texture-compression-bc-sliced-3d aktiviert ist, muss texture-compression-bc ebenfalls aktiviert sein, da es die BC-Texturformate ermöglicht, in den ersten beiden Dimensionen verwendet zu werden (siehe texture-compression-bc oben). texture-compression-bc-sliced-3d ermöglicht dieselben Texturen in der dritten Dimension. Adapter, die texture-compression-bc unterstützen, unterstützen immer texture-compression-bc-sliced-3d . Beachten Sie, dass dieses Feature derzeit in keinem Browser unterstützt wird. |
texture-compression-astc |
Ermöglicht 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 Sie eine GPUTexture erstellen: 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 |
Ermöglicht die Erstellung von dreidimensionalen ASTC-komprimierten Texturen. Wenn texture-compression-astc-sliced-3d aktiviert ist, muss texture-compression-astc ebenfalls aktiviert sein, da es die ASTC-Texturformate ermöglicht, in den ersten beiden Dimensionen verwendet zu werden (siehe texture-compression-astc oben). texture-compression-astc-sliced-3d ermöglicht dieselben Texturen in der dritten Dimension. Adapter, die texture-compression-astc unterstützen, unterstützen nicht immer texture-compression-astc-sliced-3d . Beachten Sie, dass dieses Feature derzeit in keinem Browser unterstützt wird. |
texture-compression-etc2 |
Ermöglicht 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 Sie eine GPUTexture erstellen: 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 |
Ermöglicht das Ausführen von Zeitstempelabfragen, die die Zeit messen, die benötigt wird, um Berechnungs- und Renderpassagen auszuführen. Wenn timestamp-query aktiviert ist, kann der timestamp Wert für die type Eigenschaft des createQuerySet() Deskriptors beim Erstellen eines GPUQuerySet festgelegt werden. Zusätzlich kann die timestampWrites Eigenschaft auf dem beginComputePass() und beginRenderPass() Deskriptor beim Erstellen eines GPUComputePassEncoder und GPURenderPassEncoder festgelegt werden. GPUQuerySet Objekte werden innerhalb der Objekte referenziert, die in der timestampWrites Eigenschaft enthalten sind, um anzugeben, wo Zeitstempel geschrieben werden sollen. |
Instanzeigenschaften
Die folgenden Eigenschaften stehen allen schreibgeschützten Set
-ähnlichen Objekten zur Verfügung (die untenstehenden Links verweisen auf die Set
globale Objekt-Referenzseite).
size
Experimentell-
Gibt die Anzahl der Werte im Set zurück.
Instanzmethoden
Die folgenden Methoden stehen allen schreibgeschützten Set
-ähnlichen Objekten zur Verfügung (die untenstehenden Links verweisen auf die Set
globale Objekt-Referenzseite).
has()
Experimentell-
Gibt einen Boolean zurück, der angibt, ob ein Element mit dem gegebenen Wert im Set vorhanden ist oder nicht.
values()
Experimentell-
Gibt ein neues Iterator-Objekt zurück, das die Werte für jedes Element im Set in Einfügereihenfolge liefert.
keys()
Experimentell-
Ein Alias für
values()
. entries()
Experimentell-
Gibt ein neues Iterator-Objekt zurück, das ein Array von
[value, value]
für jedes Element im Set in Einfügereihenfolge enthält. forEach()
Experimentell-
Ruft eine bereitgestellte Callback-Funktion einmal für jeden Wert auf, der im Set vorhanden ist, in Einfügereihenfolge.
Beispiele
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
- Die WebGPU API
- Der Spezifikations-Feature-Index