Veröffentlicht: 3. Juni 2025
Die WebGPU API-Implementierung von Chrome enthält Funktionen, die ausschließlich für die Entwicklung und Tests vorgesehen sind. Diese Funktionen fallen nicht unter die WebGPU-Standardspezifikation und dürfen nicht in der Produktion verwendet werden.
In diesem Dokument wird beschrieben, wie Sie WebGPU-Entwicklerfunktionen aktivieren. Außerdem finden Sie dort eine umfassende Liste.
Voraussetzungen
So aktivieren Sie WebGPU-Entwicklerfunktionen in Chrome:
- Aktivieren Sie das Flag „WebGPU-Entwicklerfunktionen“ bei
chrome://flags/#enable-webgpu-developer-features
. - Starten Sie den Chrome-Browser neu.
Quantisierung von Zeitstempelabfragen deaktivieren
Mit Zeitstempelabfragen können WebGPU-Anwendungen die Ausführungszeit von GPU-Befehlen während der Compute- und Rendering-Pässe auf Nanosekunden genau messen. Diese Abfragen sind für die Analyse der Leistung und des Verhaltens der GPU-Arbeitslast unerlässlich. Weitere Informationen finden Sie unter Zeitstempelabfragen in Compute- und Rendering-Passes.
Aus Sicherheitsgründen werden Zeitstempelabfragen aufgrund von Timing-Angriffen mit einer Auflösung von 100 Mikrosekunden quantisiert. Dies bietet einen guten Kompromiss zwischen Genauigkeit und Sicherheit. Diese Quantisierung wird automatisch deaktiviert, wenn das Flag „WebGPU Developer Features“ aktiviert ist.
Erweiterte Adapterinformationen
Um mehr über den verwendeten Adapter zu erfahren, stellt GPUAdapterInfo die folgenden Attribute bereit:
- Das
device
-Attribut (standardisiert) ist eine anbieterspezifische Adapter-ID. - Das Attribut
description
(standardisiert) ist ein für Menschen lesbarer String mit Adapterdetails. - Das Attribut
driver
(nicht standardisiert) ist ein für Menschen lesbarer String, der den Fahrer beschreibt. - Das
backend
-Attribut (nicht standardisiert) gibt das Grafik-Back-End an, z. B."WebGPU"
,"D3D11"
,"D3D12"
,"metal"
,"vulkan"
,"openGL"
,"openGLES"
oder"null"
. - Das Attribut
type
(nicht standardisiert) gibt den GPU-Typ an:"discrete GPU"
,"integrated GPU"
,"CPU"
oder"unknown"
. - Das Attribut
d3dShaderModel
(nicht standardisiert) gibt die maximal unterstützte D3D-Shadermodellnummer an. „62“ steht beispielsweise für die Unterstützung von HLSL SM 6.2. - Das Attribut
vkDriverVersion
(nicht standardisiert) ist die vom Anbieter angegebene Vulkan-Treiberversion. - Das
powerPreference
-Attribut (nicht standardisiert) ist"low-power"
oder"high-performance"
, je nach GPUPowerPreference in GPURequestAdapterOptions.
Um Speichereinschränkungen bei der Zuweisung großer Mengen während der Entwicklung Ihrer App zu antizipieren, gibt GPUAdapterInfo memoryHeaps
nicht standardisierte Informationen wie die Größe und den Typ der Speicherbereiche preis, die auf dem Adapter verfügbar sind.
const adapter = await navigator.gpu.requestAdapter();
for (const { size, properties } of adapter.info.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}
Shader-Modul-Kompilierungsoption „Strict Math“
Der GPUShaderModuleDescriptor enthält eine nicht standardisierte boolesche Option strictMath
, mit der die strikte mathematische Genauigkeit während der Shadermodulkompilierung aktiviert oder deaktiviert wird. Diese Option wird von Metal und Direct3D unterstützt. Wenn strictMath
aktiviert ist, hält sich der Compiler an genaue mathematische Regeln. Wenn Sie sie deaktivieren, kann der Compiler Shader auf folgende Weise optimieren:
- Die Möglichkeit von NaN- und Infinity-Werten wird ignoriert.
- -0 wird als +0 behandelt.
- Ersetzen der Division durch eine schnellere Multiplikation mit dem Kehrwert.
- Umsortieren von Operationen basierend auf assoziativen und distributiven Eigenschaften.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
Video mit Zero-Copy-Technologie importieren
Das nicht standardisierte boolesche Attribut „GPUExternalTexture“ isZeroCopy
gibt an, ob auf das mit importExternalTexture() importierte Video direkt von der GPU zugegriffen wurde, ohne dass eine Zwischenkopie erforderlich war.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });
if (externalTexture.isZeroCopy) {
console.log('Video frame was accessed directly by the GPU');
}