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 greift man über die GPUAdapter.features
-Eigenschaft zu — 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()
-Descriptors angeben.
Es ist zu beachten, dass nicht alle Funktionen in allen Browsern, die WebGPU unterstützen, 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 möglicherweise die Bereitstellung einer Funktion nicht auf eine Weise garantieren, die mit einem bestimmten Browser kompatibel ist.
- Der Browser-Anbieter hat möglicherweise keinen sicheren Weg gefunden, die Unterstützung für diese Funktion zu implementieren, oder hat es einfach noch nicht geschafft.
Wenn Sie hoffen, in einer WebGPU-App eine bestimmte zusätzliche Funktion zu nutzen, sind umfassende Tests ratsam.
Verfügbare Funktionen
Die folgenden zusätzlichen Funktionen sind in WebGPU definiert. Beachten Sie, dass die genaue Menge an verfügbaren Funktionen je nach Implementierung und physischen Geräten variieren und sich im Laufe der Zeit ändern wird.
Funktionsname | Beschreibung |
---|---|
bgra8unorm-storage |
Wenn aktiviert, erlaubt es STORAGE_BINDING usage von bgra8unorm -format GPUTexture s. |
clip-distances |
Wenn aktiviert, erlaubt es die Verwendung von clip_distances in WGSL. |
core-features-and-limits |
Wenn aktiviert, bedeutet das, dass der GPUAdapter /GPUDevice alle grundlegenden WebGPU-Funktionen und -Grenzwerte verwenden kann, was Anwendungen erlaubt, Geräte mit den Grafikschnittstellen Direct 3D 12, Metal und Vulkan zu unterstützen (beachten Sie, dass Safari nur Metal unterstützt). Dies wird auch als "Kern"-WebGPU bezeichnet. Derzeit steht auf allen Adaptern "Kern"-WebGPU zur Verfügung, und es wird auf allen Geräten automatisch aktiviert, auch wenn es nicht angefordert wurde. Diese Funktion ermöglicht es Adaptern und Geräten, zwischen "Kern"-WebGPU und "Kompatibilitätsmodus" zu unterscheiden, der Unterstützung für ältere Grafikschnittstellen (wie Direct 3D 11 und OpenGL ES) auf Kosten von Leistung und Funktionsumfang bietet. |
depth-clip-control |
Ermöglicht das Deaktivieren der Tiefen-Clipping. Ist depth-clip-control aktiviert, ist die unclippedDepth -Eigenschaft auf dem primitive -Objekt verfügbar, das Teil des createRenderPipeline() oder createRenderPipelineAsync() -Descriptors ist, wenn ein GPURenderPipeline erstellt wird. primitive beschreibt, wie eine Pipeline Primitive aus ihren Verzeichnereingaben konstruiert und rastert. Setzen Sie unclipped-depth auf true , um das Tiefen-Clipping zu deaktivieren. |
depth32float-stencil8 |
Ermöglicht die Erstellung von Texturen mit dem Format depth32float-stencil8 . Ist depth32float-stencil8 aktiviert, 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 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 der einzigen Farbverknüpfung an @location(0) verwendet. In WebGPU ermöglicht dual-source-blending die folgenden Mischfaktoroperationen (spezifiziert in den dstFactor und srcFactor -Eigenschaften von createRenderPipeline() und createRenderPipelineAsync() -Descriptors): src1 , one-minus-src1 , src1-alpha und one-minus-src1-alpha . |
float32-blendable |
Wenn aktiviert, erlaubt es Mischung von r32float -, rg32float -, und rgba32float -format GPUTexture s. |
float32-filterable |
Wenn aktiviert, erlaubt es Filterung von r32float -, rg32float -, und rgba32float -format GPUTexture s. |
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 Instanzen von GPURenderPassEncoder und GPURenderBundleEncoder verfügbar sind. |
rg11b10ufloat-renderable |
Wenn aktiviert, erlaubt es RENDER_ATTACHMENT usage von rg11b10ufloat -format GPUTexture s sowie deren Mischung und Multisampling. |
shader-f16 |
Wenn aktiviert, erlaubt es die Verwendung des halbgenauen Gleitkommatyps f16 in WGSL. |
subgroups |
Wenn aktiviert, erlaubt es die Verwendung von Untergruppen in WGSL. Untergruppen ermöglichen SIMD-Ebene-Parallelität, was Threads in einer Arbeitsgruppe erlaubt, zu kommunizieren und kollektive mathematische Operationen wie das Berechnen einer Summe von Zahlen durchzuführen, 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 fest kodierten Algorithmus haben, der eine Untergruppe einer bestimmten Größe erfordert. Sie können f16 -Werte mit Untergruppen verwenden, wenn Sie ein GPUDevice mit den 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 texture-compression-bc ebenfalls aktiviert sein, da es die Verwendung der BC-Texturformate in den ersten beiden Dimensionen ermöglicht (siehe texture-compression-bc oben). texture-compression-bc-sliced-3d erlaubt die Verwendung dieser Texturen in der dritten Dimension. 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 texture-compression-astc ebenfalls aktiviert sein, da es die Verwendung der ASTC-Texturformate in den ersten beiden Dimensionen ermöglicht (siehe texture-compression-astc oben). texture-compression-astc-sliced-3d erlaubt die Verwendung dieser Texturen in der dritten Dimension. 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 Zeitstempel-Abfragen, die die Zeit messen, die benötigt wird, um Berechnungs- und Renderdurchläufe durchzuführen. Wenn timestamp-query aktiviert ist, kann der timestamp -Wert für die type -Eigenschaft des createQuerySet() -Descriptors verwendet werden, wenn ein GPUQuerySet erstellt wird. Zusätzlich kann die timestampWrites -Eigenschaft auf den beginComputePass() und beginRenderPass() -Descriptors gesetzt werden, wenn ein GPUComputePassEncoder und GPURenderPassEncoder erstellt werden. GPUQuerySet -Objekte werden innerhalb der Objekte referenziert, die in der timestampWrites -Eigenschaft enthalten sind, um spezifische Stellen zu benennen, an denen Zeitstempel geschrieben werden sollen. |
Instanz-Eigenschaften
Die folgenden Eigenschaften stehen allen schreibgeschützten Set
-ähnlichen Objekten zur Verfügung (die unten stehenden Links verweisen auf die Set
-Referenzseite des globalen Objekts).
size
-
Gibt die Anzahl der Werte im Set zurück.
Instanz-Methoden
Die folgenden Methoden stehen allen schreibgeschützten Set
-ähnlichen Objekten zur Verfügung (die unten stehenden Links verweisen auf die Set
-Referenzseite des globalen Objekts).
has()
-
Gibt einen booleschen Wert 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 die Werte für jedes Element im Set in Einfügereihenfolge erzeugt.
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ügereihenfolge enthält. forEach()
-
Ruft eine bereitgestellte Callback-Funktion einmal für jeden Wert im Set in Einfügereihenfolge auf.
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> # gpusupportedfeatures> |
Browser-Kompatibilität
Loading…
Siehe auch
- Die WebGPU API
- Die Spezifikation Feature Index