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. 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:

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