Veröffentlicht am 3. Juni 2025
Die WebGPU API-Implementierung von Chrome enthält Funktionen, die ausschließlich für die Entwicklung und das Testen vorgesehen sind. Diese Funktionen sind nicht Teil der standardmäßigen WebGPU-Spezifikation. Verwenden Sie diese Funktionen nicht in der Produktion.
In diesem Dokument wird beschrieben, wie Sie WebGPU-Entwicklerfunktionen aktivieren, und es enthält eine umfassende Liste.
Voraussetzungen
So aktivieren Sie WebGPU-Entwicklerfunktionen in Chrome:
- Aktivieren Sie das Flag „WebGPU Developer Features“ unter
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 Berechnungs- und Rendering-Durchläufe auf die Nanosekunde genau messen. Diese Abfragen sind wichtig, um die Leistung und das Verhalten von GPU-Arbeitslasten zu analysieren. Weitere Informationen finden Sie unter Zeitstempelabfragen in Compute- und Render-Passes.
Aus Gründen der Timing-Attacke werden Zeitstempelabfragen 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 Attribut
device(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 Treiber beschreibt. - Das Attribut
backend(nicht standardisiert) gibt das Grafik-Backend 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“ bedeutet beispielsweise, dass HLSL SM 6.2 unterstützt wird. - Das Attribut
vkDriverVersion(nicht standardisiert) ist die vom Anbieter angegebene Vulkan-Treiberversion. - Das Attribut
powerPreference(nicht standardisiert) ist"low-power"oder"high-performance", basierend auf der GPUPowerPreference in GPURequestAdapterOptions.
Um Speicherbeschränkungen bei der Zuweisung großer Mengen während der Entwicklung Ihrer App zu berücksichtigen, stellt GPUAdapterInfo memoryHeaps nicht standardisierte Informationen wie die Größe und den Typ der auf dem Adapter verfügbaren Speicher-Heaps bereit.
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) { /* ... */ }
}
Kompilierungsoption für Shadermodule: „strict math“
Der GPUShaderModuleDescriptor enthält die nicht standardisierte boolesche Option strictMath, mit der die strikte mathematische Genauigkeit während der Kompilierung des Shader-Moduls aktiviert oder deaktiviert wird. Diese Option wird für 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 optimieren, indem er:
- Die Möglichkeit von NaN- und Unendlich-Werten wird ignoriert.
- Behandlung von -0 als +0.
- Ersetzen der Division durch eine schnellere Multiplikation mit dem Kehrwert.
- Operationen basierend auf assoziativen und distributiven Eigenschaften neu anordnen
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 ohne Kopieren importieren
Das nicht standardisierte boolesche Attribut isZeroCopy von GPUExternalTexture 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');
}