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 ​​belangrijke verbeteringen op stapel! Toekomstige releases zullen functies bevatten zoals verbeteringen in de compilatiesnelheid van shaders en wijzigingen in het asynchrone implementatiemodel met behulp van WGPUFuture.

Subgroepen (functie in ontwikkeling)

De subgroepfunctie maakt parallellisme op SIMD-niveau mogelijk, waardoor threads binnen een groep met elkaar kunnen communiceren en gezamenlijke wiskundige bewerkingen kunnen uitvoeren (bijvoorbeeld de som van 16 getallen berekenen). 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 in kaart gebracht en werkt nu aan de standaardisatie van deze functie. Bekijk het voorstel en laat een reactie achter 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 in de context van WebGPU nog niet bewezen zijn.

Als de functie "chromium-experimental-subgroups" beschikbaar is in een GPUAdapter , vraag dan een GPUDevice aan met deze functie 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 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 de subgroepgrootte.
  • subgroupBallot(value): Retourneert een set bitvelden waarbij de bit die overeenkomt met subgroup_invocation_id 1 is als value waar is voor die actieve aanroep en 0 anders.
  • subgroupBroadcast(value, id) : Verstuurt de value van de aanroep met subgroup_invocation_id die overeenkomt met id naar alle aanroepen binnen de subgroep. Opmerking: id moet een compile-time constante zijn.

Het volgende codefragment biedt een basis om mee te experimenteren en de mogelijkheden 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().
  }`,
});

Renderen naar een deel van een 3D-textuur

Je kunt nu rechtstreeks renderen naar plakken van 3D-texturen binnen renderpasses, waardoor de mogelijkheden verder gaan dan de gebruikelijke 2D-textuurrendering, met het nieuwe depthSlice lid in een GPURenderPassColorAttachment . Deze toevoeging stelt je bijvoorbeeld in staat om op voxels gebaseerde scènes en effecten te creëren door rechtstreeks te renderen naar 3D-textuurvolumes. Zie issue dawn:1020 .

Dawn-updates

Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113