Experimenteren met subgroepen
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.
Een minimale implementatie van het voorstel voor subgroepen is beschikbaar voor lokale tests achter de vlag 'Unsafe WebGPU Support' op chrome://flags/#enable-unsafe-webgpu.
Je kunt ook subgroepen op je site uitproberen met echte gebruikers door je aan te melden voor de origin trial. Lees Aan de slag met oorsprongsproeven voor instructies om je site voor te bereiden op het gebruik van oorsprongsproeven. De origin trial loopt van Chrome 128 tot 131 (eindigt op 19 februari 2025). Ga naar Intentie om te experimenteren.
Als de "subgroups"-functie beschikbaar is in een GPUAdapter, vraag je een GPUDevice met deze functie aan om ondersteuning voor subgroepen in WGSL te krijgen en de minSubgroupSize- en maxSubgroupSize-limieten te controleren.
Je moet deze extensie ook expliciet aanzetten in je WGSL-code met enable 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 metsubgroup_invocation_id1 is alsvaluewaar is voor die actieve aanroep en anders 0.subgroupBroadcast(value, id): Zendt devaluevan de aanroep metsubgroup_invocation_iddie overeenkomt metiduit naar alle aanroepen binnen de subgroep. Opmerking:idmoet een constante zijn tijdens het compileren.
In de toekomst worden er meer ingebouwde functies toegevoegd, zoals subgroupAdd, subgroupAll, subgroupElect en subgroupShuffle. Ga naar probleem 354738715.
Als je f16 wilt toestaan in subgroepbewerkingen, vraag je een GPUDevice aan met de functies "subgroups", "subgroups-f16" en "shader-f16". Zet deze daarna aan in je WGSL-code met enable f16, subgroups, subgroups_f16;.
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("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...
Dieptebias instellen voor lijnen en punten wordt beëindigd
Door een wijziging in de WebGPU-specificatie is het een validatiefout om depthBias, depthBiasSlopeScale en depthBiasClamp in te stellen op een waarde die niet nul is als de topologie voor een weergavepijplijn een lijn- of punttype is. We tonen een waarschuwing in de DevTools-console over deze aankomende validatie en dwingen de waarden in deze omstandigheden af naar 0, zodat ontwikkelaars genoeg tijd hebben om hun code te updaten. Ga naar probleem 352567424.
Waarschuwing voor niet-opgevangen fout in DevTools verbergen als preventDefault
In de DevTools-console worden geen waarschuwingen meer getoond voor uncapturederror-gebeurtenissen als er een event-listener voor uncapturederror is geregistreerd en de methode Event preventDefault() is aangeroepen in de callback van de event-listener. Dit gedrag komt overeen met de gebeurtenisafhandeling in JavaScript. Raadpleeg 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 samplet eerst en daarna
Met het WGSL-kenmerk interpolate kunt u door de gebruiker gedefinieerde interpolatie van IO-gegevens beheren. Met de nieuwe interpolatie-samplingparameters first (standaard) en either heeft u meer controle: first gebruikt de waarde van het eerste hoekpunt van de primitieve vorm, terwijl either het eerste of laatste hoekpunt toestaat. Ga naar probleem 340278447.
Updates voor Dawn
De implementatie van WGPUFuture van Dawn om asynchrone bewerkingen af te handelen, is nu afgerond. Belangrijke concepten zijn onder andere wgpuInstanceProcessEvents voor opportunistische gebeurtenisverwerking en WGPUCallbackMode voor het definiëren van callback-locaties. WGPUFuture geeft eenmalige gebeurtenissen met een oneindige levensduur aan en wgpuInstanceWaitAny wacht op de voltooiing van een toekomst of een time-out. Ga naar probleem 42240932.
De waarde CompositeAlphaMode::Auto wordt nu niet meer gerapporteerd door Surface::GetCapabilities(). De kaart is nog steeds geldig en is gelijk aan Surface::GetCapabilities().alphaMode[0]. Ga naar probleem 292.
De OpenGL-backend ondersteunt nu Surface met een y-flip blit voor elke Present()-aanroep. Ga naar probleem 344814083.
De methode Adapter::GetProperties() is beëindigd. Gebruik in plaats daarvan Adapter::GetInfo().
Jaswant, een externe bijdrager, heeft alle CMake-bestanden herschreven, waardoor ze makkelijker te updaten zijn en pre-builds mogelijk zijn. Neem de snelstartgids door voor het gebruik van Dawn in CMake-projecten.
Dit zijn maar enkele van de belangrijkste punten. 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
- WGSL-extensie fragment_depth
- Textuurcompressie niet uitgelijnd
- Kleurruimten srgb-lineair en display-p3-lineair
- Aanvullende hoekpuntindeling snorm10-10-10-2
- f16-ondersteuning op Linux voor NVIDIA
- Updates voor Dageraad
Chrome 153-154
- WGSL buffer_view-extensie
- WGSL-extensie voor swizzle-toewijzing
- Updates voor WGSL-extensies
- Updates voor Dageraad
Chrome 151-152
- Subgroepgrootte beheren
- OperationError voor validatiefouten voor setImmediates
- Updates voor Dageraad
Chrome 149-150
Chrome 147-148
Chrome 146
- Ondersteuning voor de WebGPU-compatibiliteitsmodus op OpenGL ES 3.1
- Tijdelijke bijlagen
- WGSL-extensie texture_and_sampler_let
- Updates voor Dageraad
Chrome 145
- WGSL-extensie subgroup_uniformity
- Experimentele synchrone buffermapping in werknemers
- Updates voor Dageraad
Chrome 144
- WGSL-extensie subgroup_id
- WGSL uniform_buffer_standard_layout-extensie
- WebGPU op Linux
- Snellere writeBuffer en writeTexture
- Updates voor Dageraad
Chrome 143
- Swizzle van textuurcomponent
- Gebruik van alleen-lezen opslagtextuur bgra8unorm verwijderen
- Updates voor Dageraad
Chrome 142
Chrome 141
- Tint IR afgerond
- Analyse van gehele getallen in de WGSL-compiler
- SPIR-V 1.4-update voor Vulkan-backend
- Updates voor Dageraad
Chrome 140
- Apparaatverzoeken verbruiken de adapter
- Afkorting voor het gebruik van textuur als de textuurweergave wordt gebruikt
- WGSL textureSampleLevel ondersteunt 1D-textures
- Gebruik van alleen-lezen opslagtextuur bgra8unorm beëindigen
- Kenmerk isFallbackAdapter van GPUAdapter verwijderen
- Updates voor Dageraad
Chrome 139
- Ondersteuning voor 3D-texturen voor BC- en ASTC-gecomprimeerde indelingen
- Nieuwe functie kernfuncties en limieten
- Origin trial voor de compatibiliteitsmodus van WebGPU
- Updates voor Dageraad
Chrome 138
- Afkorting voor het gebruik van een buffer als bindende bron
- Wijzigingen in de formaatvereisten voor buffers die bij het maken zijn toegewezen
- Architectuurrapport voor recente GPU's
- Kenmerk isFallbackAdapter van GPUAdapter beëindigen
- Updates voor Dageraad
Chrome 137
- Textuurweergave gebruiken voor externe textuurbinding
- Buffers copy without specifying offsets and size
- WGSL workgroupUniformLoad met een pointer naar atomic
- Kenmerk powerPreference van GPUAdapterInfo
- Kenmerk compatibilityMode verwijderen uit GPURequestAdapterOptions
- Updates voor Dageraad
Chrome 136
- Kenmerk isFallbackAdapter van GPUAdapterInfo
- Verbeteringen in de compilatietijd van shaders op D3D12
- Canvasafbeeldingen opslaan en kopiëren
- Beperkingen voor de compatibiliteitsmodus voor impact
- Updates voor Dageraad
Chrome 135
- Pijplijnindeling maken met een null-bindgroepindeling toestaan
- Toestaan dat viewports buiten de grenzen van de weergavedoelen vallen
- Makkelijker toegang tot de experimentele compatibiliteitsmodus op Android
- De limiet maxInterStageShaderComponents verwijderen
- Updates voor Dageraad
Chrome 134
- Workloads voor machine learning verbeteren met subgroepen
- Ondersteuning verwijderen voor zwevende filterbare textuurtypen als mengbaar
- Updates voor Dageraad
Chrome 133
- Aanvullende unorm8x4-bgra- en 1-component vertex-indelingen
- Toestaan dat onbekende limieten worden aangevraagd met een niet-gedefinieerde waarde
- Wijzigingen in de uitlijningsregels voor WGSL
- WGSL-prestatieverbeteringen met discard
- VideoFrame.displaySize gebruiken voor externe texturen
- Afbeeldingen met niet-standaard richtingen verwerken met copyExternalImageToTexture
- De ontwikkelaarservaring verbeteren
- De compatibiliteitsmodus aanzetten met featureLevel
- Opschoning van experimentele subgroepfuncties
- De limiet maxInterStageShaderComponents beëindigen
- Updates voor Dageraad
Chrome 132
- Gebruik van textuurweergave
- 32-bits floating-point texture blending
- GPUDevice-kenmerk adapterInfo
- Als u het canvascontext configureert met een ongeldige indeling, treedt er een JavaScript-fout op
- Beperkingen voor het filteren van samplers op texturen
- Uitgebreide experimenten met subgroepen
- De ontwikkelaarservaring verbeteren
- Experimentele ondersteuning voor genormaliseerde 16-bits textuurindelingen
- Updates voor Dageraad
Chrome 131
- Afstanden knippen in WGSL
- GPUCanvasContext getConfiguration()
- Punt- en lijnprimitieven mogen geen dieptebias hebben
- Inclusieve scan met ingebouwde functies voor subgroepen
- Experimentele ondersteuning voor indirect tekenen met meerdere tekeningen
- Optie voor compilatie van shader-modules strict math
- GPUAdapter requestAdapterInfo() verwijderen
- Updates voor Dageraad
Chrome 130
- Mengen van 2 bronnen
- Verbeteringen in de compilatietijd van shaders op Metal
- Beëindiging van GPUAdapter requestAdapterInfo()
- Updates voor Dageraad
Chrome 129
- HDR-ondersteuning met de modus voor tinttoewijzing van het canvas
- Uitgebreide ondersteuning voor subgroepen
- Updates voor Dageraad
Chrome 128
- Experimenteren met subgroepen
- Dieptebias instellen voor lijnen en punten wordt beëindigd
- DevTools-waarschuwing voor niet-vastgelegde fout verbergen als preventDefault
- WGSL interpoleert eerst de sampling en daarna
- Updates voor Dageraad
Chrome 127
- Experimentele ondersteuning voor OpenGL ES op Android
- Kenmerk info van GPUAdapter
- Verbeteringen in WebAssembly-interoperabiliteit
- Verbeterde fouten in opdrachtcodering
- Updates voor Dageraad
Chrome 126
- De limiet voor maxTextureArrayLayers verhogen
- Optimalisatie van bufferuploads voor Vulkan-backend
- Verbeteringen in de compilatietijd van shaders
- Ingediende opdrachtbuffers moeten uniek zijn
- Updates voor Dageraad
Chrome 125
- Subgroepen (functie in ontwikkeling)
- Renderen naar een segment van een 3D-textuur
- Updates voor Dageraad
Chrome 124
- Alleen-lezen en lees-/schrijftopslagtexturen
- Ondersteuning voor service workers en shared workers
- Nieuwe kenmerken voor adapterinformatie
- Bug fixes
- Updates voor Dageraad
Chrome 123
- Ondersteuning voor ingebouwde DP4a-functies in WGSL
- Onbeperkte aanwijzerparameters in WGSL
- Syntactische suiker voor het derefereren van samengestelde typen in WGSL
- Aparte alleen-lezen status voor stencils en diepte
- Updates voor Dageraad
Chrome 122
- Uw bereik vergroten met de compatibiliteitsmodus (functie in ontwikkeling)
- De limiet voor maxVertexAttributes verhogen
- Updates voor Dageraad
Chrome 121
- WebGPU ondersteunen op Android
- DXC gebruiken in plaats van FXC voor shadercompilatie in Windows
- Tijdstempelquery's in berekenings- en weergavefasen
- Standaard toegangspunten voor shadermodules
- Ondersteuning voor display-p3 als GPUExternalTexture-kleurruimte
- Informatie over geheugen-heaps
- Updates voor Dageraad
Chrome 120
- Ondersteuning voor 16-bits zwevendekommawaarden in WGSL
- De grenzen verleggen
- Wijzigingen in de diepte-stencilstatus
- Updates van adaptergegevens
- Kwantisatie van tijdstempelquery's
- Functies voor voorjaarsschoonmaak
Chrome 119
- Filterbare 32-bits float-texturen
- unorm10-10-10-2-hoekpuntindeling
- rgb10a2uint-textuurindeling
- Updates voor Dageraad
Chrome 118
- Ondersteuning voor HTMLImageElement en ImageData in
copyExternalImageToTexture() - Experimentele ondersteuning voor opslagtexturen met lees-/schrijfrechten en alleen-lezenrechten
- Updates voor Dageraad
Chrome 117
- Knooppuntbuffer verwijderen
- Bindgroep verwijderen
- Fouten bij het maken van een asynchrone pijplijn negeren als het apparaat kwijt is
- Updates voor het maken van SPIR-V-shadermodules
- De ontwikkelaarservaring verbeteren
- Caching-pipelines met automatisch gegenereerde indeling
- Updates voor Dageraad
Chrome 116
- WebCodecs-integratie
- Verloren apparaat geretourneerd door GPUAdapter
requestDevice() - Zorgen dat video's vloeiend worden afgespeeld als
importExternalTexture()wordt aangeroepen - Specificatieovereenstemming
- De ontwikkelaarservaring verbeteren
- Updates voor Dageraad
Chrome 115
- Ondersteunde WGSL-taalextensies
- Experimentele ondersteuning voor Direct3D 11
- Standaard discrete GPU bij netvoeding
- De ontwikkelaarservaring verbeteren
- Updates voor Dageraad
Chrome 114
- JavaScript van Optimize
- getCurrentTexture() voor niet-ingestelde canvas geeft InvalidStateError
- WGSL-updates
- Updates voor Dageraad