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. Gebruik deze functies niet in een productieomgeving.
Dit document beschrijft hoe u de ontwikkelaarsfuncties van WebGPU kunt inschakelen en biedt een uitgebreide lijst.
Voorwaarde
Volg deze stappen om de ontwikkelaarsfuncties van WebGPU in Chrome in te schakelen:
- Schakel de optie "WebGPU Developer Features" in via
chrome://flags/#enable-webgpu-developer-features. - Start de Chrome-browser opnieuw op.
Kwantisering van tijdstempelquery's uitschakelen
Met behulp van tijdstempelquery's kunnen WebGPU-applicaties de uitvoeringstijd van GPU-opdrachten tijdens reken- en renderfasen nauwkeurig meten (tot op de nanoseconde). Deze query's zijn essentieel voor het analyseren van de prestaties en het gedrag van GPU-workloads. Zie Tijdstempelquery's in reken- en renderfasen voor meer informatie.
Vanwege de bezorgdheid 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, toont GPUAdapterInfo de volgende attributen:
- Het
device(gestandaardiseerd) is een leverancierspecifieke adapter-identificatiecode. - Het
description(gestandaardiseerd) is een leesbare tekenreeks met details over de adapter. - Het
driver(niet-gestandaardiseerd) is een voor mensen leesbare tekenreeks die de driver beschrijft. - Het
backendattribuut (niet-gestandaardiseerd) geeft de grafische backend aan, zoals"WebGPU","D3D11","D3D12","metal","vulkan","openGL","openGLES"of"null". - Het
type(niet-gestandaardiseerd) identificeert het GPU-type:"discrete GPU","integrated GPU","CPU"of"unknown". - Het attribuut
d3dShaderModel(niet-gestandaardiseerd) specificeert het maximaal ondersteunde D3D-shadermodelnummer; bijvoorbeeld, 62 geeft aan dat HLSL SM 6.2 wordt ondersteund. - Het attribuut
vkDriverVersion(niet-gestandaardiseerd) is de door de leverancier opgegeven Vulkan-stuurprogrammaversie. - Het
powerPreferenceattribuut (niet-gestandaardiseerd) is"low-power"of"high-performance", afhankelijk van de GPUPowerPreference in GPURequestAdapterOptions .
Om geheugenbeperkingen te voorkomen bij het toewijzen van grote hoeveelheden geheugen tijdens de ontwikkeling van uw app, geeft GPUAdapterInfo niet-gestandaardiseerde informatie memoryHeaps weer, 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 , waarmee strikte wiskundige precisie tijdens de compilatie van shadermodules kan worden in- of uitgeschakeld. Deze optie wordt ondersteund door Metal en Direct3D. Wanneer strictMath is ingeschakeld, houdt de compiler zich aan precieze wiskundige regels. Omgekeerd zorgt het uitschakelen ervan ervoor dat de compiler shaders kan optimaliseren door:
- De mogelijkheid van NaN- en Infinity-waarden wordt hierbij buiten beschouwing gelaten.
- -0 behandelen als +0.
- Delen vervangen door sneller vermenigvuldigen 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 zonder kopiëren
Het niet-gestandaardiseerde booleaanse attribuut `GPUExternalTexture isZeroCopy laat je weten of de video die is geïmporteerd met `importExternalTexture()` 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');
}