Nieuw in WebGPU (Chrome 125)

François Beaufort
François Beaufort

Het aantal WebGPU-functies is misschien wat beperkt, maar er komen grote verbeteringen aan. Toekomstige releases bevatten functies zoals verbeteringen in de snelheid van shadercompilatie en wijzigingen in het asynchrone model van de implementatie met WGPUFuture.

Subgroepen (functie in ontwikkeling)

De functie voor subgroepen maakt parallelle verwerking op SIMD-niveau mogelijk, waardoor threads binnen een groep kunnen communiceren en gezamenlijke wiskundige bewerkingen kunnen uitvoeren (bijvoorbeeld de som van 16 getallen berekenen). Dit is een zeer efficiënte vorm van gegevens delen tussen threads.

Subgroepbewerkingen worden ondersteund door moderne GPU API's, maar de namen en implementatiegegevens variëren. Het Chrome-team heeft de overeenkomsten vastgesteld en werkt nu aan de standaardisatie van deze functie. Neem het voorstel en de reactie door als u vragen heeft.

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 deze kunnen uitproberen en feedback kunnen delen, omdat de voordelen in de echte wereld nog niet zijn bewezen in de context van WebGPU.

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

Je moet deze extensie ook expliciet aanzetten in je WGSL-code met enable chromium_experimental_subgroups. Als deze functie aanstaat, 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 grootte van subgroepen.
  • 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 anders 0.
  • subgroupBroadcast(value, id): Zendt de value van de aanroep met subgroup_invocation_id die overeenkomt met id uit naar alle aanroepen binnen de subgroep. Opmerking: id moet een constante zijn tijdens het compileren.

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().
  }`,
});

Weergeven als segment van 3D-textuur

Je kunt nu rechtstreeks renderen naar segmenten van 3D-texturen in renderpasses. Hiermee breid je de mogelijkheden uit tot buiten de gebruikelijke 2D-textuurrendering, met het nieuwe lid depthSlice in een GPURenderPassColorAttachment. Met deze toevoeging kun je bijvoorbeeld op voxels gebaseerde scènes en effecten maken door rechtstreeks in 3D-textuurvolumes te renderen. Ga naar issue dawn:1020.

Updates voor Dawn

Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

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