Gepubliceerd: 3 juni 2025
De WebGPU API-implementatie van Chrome bevat functies die uitsluitend bedoeld zijn voor ontwikkeling en testen. Deze functies vallen buiten de standaard WebGPU-specificatie en mogen niet in productie worden gebruikt.
In dit document vindt u een uitgebreide lijst met instructies voor het inschakelen van WebGPU-ontwikkelaarsfuncties.
Voorwaarde
Volg deze stappen om WebGPU-ontwikkelaarsfuncties in Chrome in te schakelen:
- Schakel de vlag "WebGPU Developer Features" in via
chrome://flags/#enable-webgpu-developer-features
. - Start de Chrome-browser opnieuw.
Kwantificering van tijdstempelquery's uitschakelen
Met tijdstempelquery's kunnen WebGPU-applicaties de uitvoeringstijd van GPU-opdrachten tijdens reken- en renderpasses nauwkeurig meten (tot op de nanoseconde). Deze query's zijn essentieel voor het analyseren van de prestaties en het gedrag van GPU-werklasten. Raadpleeg Tijdstempelquery's in reken- en renderpasses voor meer informatie.
Vanwege zorgen over timingaanvallen worden tijdstempelquery's gekwantiseerd met een resolutie van 100 microseconden, wat een goed compromis biedt tussen precisie en beveiliging. Deze kwantisering wordt automatisch uitgeschakeld wanneer de vlag 'WebGPU Developer Features' is ingeschakeld.
Uitgebreide adapterinformatie
Om een beter inzicht te krijgen in de gebruikte adapter, geeft GPUAdapterInfo de volgende kenmerken weer:
- Het
device
(gestandaardiseerd) is een leverancierspecifieke adapter-ID. - Het
description
(gestandaardiseerd) is een voor mensen leesbare tekenreeks met adapterdetails. - Het
driver
-kenmerk (niet-gestandaardiseerd) is een voor mensen leesbare tekenreeks die de driver beschrijft. - Het
backend
-attribuut (niet-gestandaardiseerd) geeft de grafische backend aan, zoals"WebGPU"
,"D3D11"
,"D3D12"
,"metal"
,"vulkan"
,"openGLES"
"openGL"
, "openGLES""null"
. - Het
type
(niet gestandaardiseerd) identificeert het GPU-type:"discrete GPU"
,"integrated GPU"
,"CPU"
of"unknown"
. - Het kenmerk
d3dShaderModel
(niet-gestandaardiseerd) specificeert het maximaal ondersteunde D3D-shadermodelnummer. 62 geeft bijvoorbeeld ondersteuning voor HLSL SM 6.2 aan. - Het kenmerk
vkDriverVersion
(niet-gestandaardiseerd) is de door de leverancier opgegeven versie van de Vulkan-driver. - Het kenmerk
powerPreference
(niet-gestandaardiseerd) is"low-power"
of"high-performance"
, gebaseerd op de GPUPowerPreference in GPURequestAdapterOptions .
Om te anticiperen op geheugenbeperkingen bij het toewijzen van grote hoeveelheden geheugen tijdens de ontwikkeling van uw app, geeft GPUAdapterInfo memoryHeaps
vrij in de vorm van niet-gestandaardiseerde informatie, zoals de grootte en het type van de geheugenheaps die beschikbaar zijn op de adapter.
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) { /* ... */ }
}
Shadermodule compilatieoptie strikte wiskunde
De GPUShaderModuleDescriptor bevat een niet-gestandaardiseerde Booleaanse optie strictMath
, die strikte wiskundige precisie in- of uitschakelt tijdens de compilatie van shadermodules. Deze optie wordt ondersteund op Metal en Direct3D. Wanneer strictMath
is ingeschakeld, houdt de compiler zich aan precieze wiskundige regels. Omgekeerd stelt het uitschakelen ervan de compiler in staat shaders te optimaliseren door:
- De mogelijkheid van NaN- en Infinity-waarden wordt buiten beschouwing gelaten.
- -0 behandelen als +0.
- Vervang deling door snellere vermenigvuldiging met het omgekeerde.
- Het herschikken van bewerkingen op basis van associatieve en distributieve eigenschappen.
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 importeren met nul-kopie
Met het niet-gestandaardiseerde Booleaanse kenmerk GPUExternalTexture isZeroCopy
kunt u weten of de video die met importExternalTexture() is geïmporteerd, rechtstreeks door de GPU is benaderd, zonder dat er een tussenliggende kopie nodig was.
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');
}