WebGPU-ontwikkelaarsfuncties

François Beaufort
François Beaufort

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:

  1. Schakel de vlag "WebGPU Developer Features" in via chrome://flags/#enable-webgpu-developer-features .
  2. 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');
}