Wat is er nieuw in WebGPU (Chrome 125)

François Beaufort
François Beaufort

Het aantal WebGPU-functies lijkt deze keer misschien wat schaars, maar enkele grote verbeteringen staan ​​voor de deur! Toekomstige releases zullen functies bevatten zoals verbeteringen in de snelheid van de shader-compilatie en wijzigingen in het asynchrone model van de implementatie met behulp van WGPUFuture.

Subgroepen (functie in ontwikkeling)

De subgroepenfunctie maakt parallellisme op SIMD-niveau mogelijk, waardoor threads binnen een groep kunnen communiceren en collectieve wiskundige bewerkingen kunnen uitvoeren (bijvoorbeeld het berekenen van de som van 16 getallen). Dit biedt een zeer efficiënte vorm van cross-thread datadeling.

Subgroepbewerkingen worden ondersteund door moderne GPU-API's, maar de naamgeving en implementatiedetails variëren. Het Chrome-team heeft de overeenkomsten geïdentificeerd en werkt nu aan het standaardiseren van deze functie. Bekijk het voorstel en reageer als je vragen hebt.

Er is een minimale en niet-gestandaardiseerde implementatie van subgroepen achter de vlag 'Experimentele webplatformfuncties' op chrome://flags/#enable-experimental-web-platform-features zodat ontwikkelaars het kunnen proberen en feedback kunnen delen als voordelen uit de echte wereld zijn nog niet bewezen in de context van WebGPU.

Wanneer de functie "chromium-experimental-subgroups" beschikbaar is in een GPUAdapter , vraagt ​​u een GPUDevice met deze functie aan om ondersteuning voor experimentele subgroepen te krijgen in WGSL en controleert u de minSubgroupSize en maxSubgroupSize limieten.

U moet deze extensie ook expliciet inschakelen in uw WGSL-code met enable chromium_experimental_subgroups . Indien ingeschakeld, krijgt u toegang tot de volgende toevoegingen:

  • subgroup_invocation_id : een ingebouwde waarde voor de index van de thread binnen de subgroep.
  • subgroup_size : Een ingebouwde waarde voor toegang tot de subgroepgrootte.
  • subgroupBallot(value): Geeft een set bitvelden terug waarbij de bit die overeenkomt met subgroup_invocation_id 1 is als value waar is voor die actieve aanroep en anders 0.
  • subgroupBroadcast(value, id) : Zendt de value uit van de aanroep, waarbij subgroup_invocation_id overeenkomt met id voor alle aanroepen binnen de subgroep. Opmerking: id moet een constante tijdens het compileren zijn.

Het volgende codefragment biedt een basis om aan te sleutelen en het potentieel van subgroepen te ontdekken.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

Render naar een stukje 3D-textuur

U kunt nu rechtstreeks renderen naar segment(en) van 3D-texturen binnen renderpassages, waardoor de mogelijkheden worden uitgebreid tot buiten de gebruikelijke 2D-textuurweergave, met het nieuwe depthSlice lid in een GPURenderPassColorAttachment . Met deze toevoeging kunt u bijvoorbeeld op voxel gebaseerde scènes en effecten creëren door rechtstreeks in 3D-textuurvolumes te renderen. Zie uitgave Dawn:1020 .

Dawn-updates

Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU- serie.

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113