Wat is er nieuw in WebGPU (Chrome 125)

François Beaufort
François Beaufort

Het aantal WebGPU-functies lijkt deze keer misschien wat beperkt, maar er staan ​​een paar grote verbeteringen op stapel! Toekomstige releases zullen functies bevatten zoals verbeteringen in de snelheid van shadercompilatie en wijzigingen in het asynchrone model van de implementatie met 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 gegevensuitwisseling tussen threads.

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 de standaardisatie 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 'Experimental Web Platform Features' op chrome://flags/#enable-experimental-web-platform-features zodat ontwikkelaars het kunnen uitproberen en feedback kunnen delen, aangezien de voordelen in de praktijk nog niet zijn bewezen in de context van WebGPU.

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

Je moet deze extensie ook expliciet inschakelen in je WGSL-code met enable chromium_experimental_subgroups . Wanneer deze optie is ingeschakeld, krijg je 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 subgroepgrootte.
  • subgroupBallot(value): Retourneert een set bitvelden waarbij de bit die overeenkomt met subgroup_invocation_id 1 is als value true is voor die actieve aanroep en 0 anders.
  • subgroupBroadcast(value, id) : Zendt de value van de aanroep met subgroup_invocation_id , overeenkomend id uit naar alle aanroepen binnen de subgroep. Let op: id moet een compile-time constante zijn.

Het volgende codefragment biedt een basis waarmee u kunt experimenteren en de mogelijkheden van subgroepen kunt 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().
  }`,
});

Renderen naar een plakje 3D-textuur

U kunt nu rechtstreeks naar segment(en) van 3D-texturen renderen binnen render passes, wat de mogelijkheden uitbreidt tot voorbij de gebruikelijke 2D-textuurrendering, met het nieuwe depthSlice lid in een GPURenderPassColorAttachment . Deze toevoeging stelt u bijvoorbeeld in staat om voxelgebaseerde scènes en effecten te creëren door rechtstreeks in 3D-textuurvolumes te renderen. Zie issue dawn:1020 .

Dawn-updates

Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 140

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

Chroom 131

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

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