Experimenteren met subgroepen
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.
Een minimale implementatie van het subgroepenvoorstel is beschikbaar voor lokale tests achter de vlag "Unsafe WebGPU Support" op chrome://flags/#enable-unsafe-webgpu
.
Je kunt subgroepen op je site ook uitproberen met echte gebruikers door je aan te melden voor de proefperiode van Origin . Lees Aan de slag met proefperiodes van Origin voor instructies over hoe je je site kunt voorbereiden op het gebruik van proefperiodes van Origin. De proefperiode van Origin loopt van Chrome 128 tot en met 131 (eindigt op 19 februari 2025). Zie 'Intentie om te experimenteren' .
Wanneer de functie "subgroups"
beschikbaar is in een GPUAdapter
, vraag dan een GPUDevice
met deze functie aan om ondersteuning voor subgroepen in WGSL te krijgen en controleer de limieten minSubgroupSize
en maxSubgroupSize
.
U moet deze extensie ook expliciet inschakelen in uw WGSL-code met enable subgroups;
. Wanneer deze optie is 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 subgroepgrootte. -
subgroupBallot(value)
: Retourneert een set bitvelden waarbij de bit die overeenkomt metsubgroup_invocation_id
1 is alsvalue
true is voor die actieve aanroep en 0 anders. -
subgroupBroadcast(value, id)
: Zendt devalue
van de aanroep metsubgroup_invocation_id
, overeenkomendid
uit naar alle aanroepen binnen de subgroep. Let op:id
moet een compile-time constante zijn.
Meer ingebouwde functies zoals subgroupAdd
, subgroupAll
, subgroupElect
en subgroupShuffle
zullen in de toekomst worden toegevoegd. Zie issue 354738715 .
Om f16 in subgroepbewerkingen toe te staan, vraagt u een GPUDevice
aan met de functies "subgroups"
, "subgroups-f16"
en "shader-f16"
. Schakel deze vervolgens in uw WGSL-code in met enable f16, subgroups, subgroups_f16;
.
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("subgroups")) {
throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable subgroups;
var<workgroup> wgmem : u32;
@group(0) @binding(0)
var<storage, read> inputs : array<u32>;
@group(0) @binding(1)
var<storage, read_write> output : array<u32>;
@compute @workgroup_size(64)
fn main(@builtin(subgroup_size) subgroupSize : u32,
@builtin(subgroup_invocation_id) id : u32,
@builtin(local_invocation_index) lid : u32) {
// One thread per workgroup writes the value to workgroup memory.
if (lid == 0) {
wgmem = inputs[lid];
}
workgroupBarrier();
var v = 0u;
// One thread per subgroup reads the value from workgroup memory
// and shares that value with every other thread in the subgroup
// to reduce local memory bandwidth.
if (id == 0) {
v = wgmem;
}
v = subgroupBroadcast(v, 0);
output[lid] = v;
}`,
});
// Send the appropriate commands to the GPU...
Diepteafwijking voor lijnen en punten afschaffen
Door een wijziging in de WebGPU-specificatie is het een validatiefout om depthBias
, depthBiasSlopeScale
en depthBiasClamp
in te stellen op een waarde anders dan nul wanneer de topologie voor een renderpijplijn een lijn- of punttype is. Om ontwikkelaars voldoende tijd te geven om hun code bij te werken, wordt in de DevTools Console een waarschuwing weergegeven over deze aanstaande validatie, terwijl de waarden in deze omstandigheden ook op 0 worden geforceerd. Zie probleem 352567424 .
Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
In de DevTools Console worden waarschuwingen voor uncapturederror
-gebeurtenissen niet meer weergegeven als er een event listener voor uncapturederror
is geregistreerd en de Event preventDefault()
methode is aangeroepen binnen de callback van de event listener. Dit gedrag komt overeen met de gebeurtenisafhandeling in JavaScript. Zie het volgende voorbeeld en probleem 40263619 .
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
device.addEventListener("uncapturederror", (event) => {
// Prevents browser warning to show up in the DevTools Console.
event.preventDefault();
// TODO: Handle event.error
});
WGSL interpoleert eerst de bemonstering en ofwel
Met het WGSL- interpolate
kunt u door de gebruiker gedefinieerde I/O-data-interpolatie beheren. Nieuwe interpolatiebemonsteringsparameters ( first
, standaard) geven u either
extra controle: first
gebruikt de waarde van het eerste hoekpunt van de primitieve, terwijl either
de waarde van het eerste of het laatste hoekpunt wordt toegestaan. Zie probleem 340278447 .
Dawn-updates
De implementatie van Dawn's WGPUFuture voor het verwerken van asynchrone bewerkingen is nu voltooid. Belangrijke concepten zijn onder andere wgpuInstanceProcessEvents voor opportunistische gebeurtenisverwerking en WGPUCallbackMode voor het definiëren van callbacklocaties. WGPUFuture staat voor eenmalige gebeurtenissen met een oneindige levensduur, en wgpuInstanceWaitAny wacht op de voltooiing van een future of een time-out. Zie issue 42240932 .
De waarde CompositeAlphaMode::Auto
wordt nu niet gerapporteerd door Surface::GetCapabilities()
. Deze is nog steeds geldig en gelijk aan Surface::GetCapabilities().alphaMode[0]
. Zie probleem 292 .
De OpenGL-backend ondersteunt nu Surface
met een y-flip blit voor elke Present()
aanroep. Zie probleem 344814083 .
De Adapter::GetProperties()
-methode is verouderd en maakt plaats voor Adapter::GetInfo()
.
Jaswant, een externe medewerker, heeft alle CMake-bestanden herschreven, waardoor ze gemakkelijker te updaten zijn en pre-builds mogelijk zijn. Bekijk de snelstartgids voor het gebruik van Dawn in CMake-projecten.
Dit behandelt slechts enkele van de belangrijkste hoogtepunten. 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
- Apparaatverzoeken verbruiken adapter
- Afkorting voor het gebruik van textuur waar textuurweergave wordt gebruikt
- WGSL textureSampleLevel ondersteunt 1D-texturen
- Verouder het gebruik van bgra8unorm-alleen-lezen-opslagtextuur
- GPUAdapter isFallbackAdapter-kenmerk verwijderen
- Dawn-updates
Chroom 139
- 3D-textuurondersteuning voor gecomprimeerde BC- en ASTC-formaten
- Nieuwe functie 'kernfuncties en beperkingen'
- Origin-proefversie voor WebGPU-compatibiliteitsmodus
- Dawn-updates
Chroom 138
- Afkorting voor het gebruik van buffer als bindingsbron
- Wijzigingen in de groottevereisten voor buffers die bij het aanmaken in kaart zijn gebracht
- Architectuurrapport voor recente GPU's
- Verouder GPUAdapter isFallbackAdapter-kenmerk
- Dawn-updates
Chroom 137
- Gebruik textuurweergave voor externe textuurbinding
- Buffers kopiëren zonder offsets en grootte op te geven
- WGSL-werkgroepUniformLoad met behulp van een pointer naar atomaire
- GPUAdapterInfo powerPreference-kenmerk
- Verwijder GPURequestAdapterOptions compatibilityMode-kenmerk
- Dawn-updates
Chroom 136
- GPUAdapterInfo isFallbackAdapter-kenmerk
- Verbeteringen in de shadercompilatietijd op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de liftcompatibiliteitsmodus
- Dawn-updates
Chroom 135
- Toestaan om pijplijnlay-out te maken met een lay-out voor null-bindgroepen
- Laat viewports zich uitstrekken voorbij de grenzen van de renderdoelen
- Gemakkelijkere toegang tot de experimentele compatibiliteitsmodus op Android
- Verwijder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 134
- Verbeter machine learning-workloads met subgroepen
- Verwijder float-filterbare textuurtypen die ondersteuning bieden als mengbaar
- Dawn-updates
Chroom 133
- Extra unorm8x4-bgra en 1-component vertex-formaten
- Toestaan dat onbekende limieten worden aangevraagd met een ongedefinieerde waarde
- Wijzigingen in de WGSL-uitlijningsregels
- WGSL-prestatiewinst met weggooien
- Gebruik VideoFrame displaySize voor externe texturen
- Verwerk afbeeldingen met niet-standaardoriëntaties met copyExternalImageToTexture
- Verbetering van de ontwikkelaarservaring
- Compatibiliteitsmodus inschakelen met featureLevel
- Opschonen van experimentele subgroepkenmerken
- Verouder maxInterStageShaderComponents-limiet
- Dawn-updates
Chroom 132
- Gebruik van textuurweergave
- 32-bits float-texturen mengen
- GPUDevice adapterInfo-kenmerk
- Het configureren van de canvascontext met een ongeldige indeling levert een JavaScript-fout op
- Filteren van samplerbeperkingen op texturen
- Uitgebreide subgroepsexperimenten
- Verbetering van de ontwikkelaarservaring
- Experimentele ondersteuning voor 16-bits genormaliseerde textuurformaten
- Dawn-updates
Chroom 131
- Clipafstanden in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptebias hebben
- Inclusief ingebouwde scanfuncties voor subgroepen
- Experimentele ondersteuning voor multi-draw indirect
- Shadermodule-compilatieoptie strikte wiskunde
- GPUAdapter requestAdapterInfo() verwijderen
- Dawn-updates
Chroom 130
- Menging van dubbele bronnen
- Verbeteringen in de shadercompilatietijd op Metal
- Veroudering van GPUAdapter requestAdapterInfo()
- Dawn-updates
Chroom 129
Chroom 128
- Experimenteren met subgroepen
- Diepteafwijking voor lijnen en punten afschaffen
- Verberg niet-vastgelegde fout DevTools-waarschuwing als preventDefault
- WGSL interpoleert eerst de bemonstering en ofwel
- Dawn-updates
Chroom 127
- Experimentele ondersteuning voor OpenGL ES op Android
- GPUAdapter info-kenmerk
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde opdrachtencoderfouten
- Dawn-updates
Chroom 126
- Verhoog maxTextureArrayLayers-limiet
- Bufferuploadoptimalisatie voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Dawn-updates
Chroom 125
Chroom 124
- Alleen-lezen en lees-schrijf opslagtexturen
- Ondersteuning van servicemedewerkers en gedeelde werknemers
- Nieuwe adapterinformatie-attributen
- Bugfixes
- Dawn-updates
Chroom 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte pointerparameters in WGSL
- Syntaxissuiker voor het derefereren van composieten in WGSL
- Afzonderlijke alleen-lezenstatus voor stencil- en diepteaspecten
- Dawn-updates
Chroom 122
- Vergroot het bereik met de compatibiliteitsmodus (functie in ontwikkeling)
- Verhoog de maxVertexAttributes-limiet
- Dawn-updates
Chroom 121
- Ondersteuning voor WebGPU op Android
- Gebruik DXC in plaats van FXC voor shadercompilatie op Windows
- Tijdstempelquery's in compute- en renderpassen
- Standaard toegangspunten tot shadermodules
- Ondersteuning display-p3 als GPUExternalTexture-kleurruimte
- Geheugenstapels info
- Dawn-updates
Chroom 120
- Ondersteuning voor 16-bits drijvende-kommawaarden in WGSL
- Verleg de grenzen
- Wijzigingen in de dieptestencilstatus
- Adapterinformatie-updates
- Kwantificering van tijdstempelquery's
- Voorjaarsschoonmaakfuncties
Chroom 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2 vertex-formaat
- rgb10a2uint textuurformaat
- Dawn-updates
Chroom 118
- HTMLImageElement en ImageData-ondersteuning in
copyExternalImageToTexture()
- Experimentele ondersteuning voor lees-schrijf- en alleen-lezen-opslagtextuur
- Dawn-updates
Chroom 117
- Vertexbuffer ongedaan maken
- Bindgroep ongedaan maken
- Fouten bij het maken van een asynchrone pijplijn uitschakelen wanneer het apparaat verloren gaat
- Updates voor het maken van SPIR-V shadermodules
- Verbetering van de ontwikkelaarservaring
- Caching-pipelines met automatisch gegenereerde lay-out
- Dawn-updates
Chroom 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice()
- Zorg ervoor dat de videoweergave vloeiend blijft als
importExternalTexture()
wordt aangeroepen - Specificatieconformiteit
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard discrete GPU op netstroom
- Verbetering van de ontwikkelaarservaring
- Dawn-updates
Chroom 114
- JavaScript optimaliseren
- getCurrentTexture() op een niet-geconfigureerd canvas genereert InvalidStateError
- WGSL-updates
- Dawn-updates