Tracker: WebGPU
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 14.6k
- Forks
- 2.3k
- Avg merge
- 2d 9h
- Merged PRs (30d)
- 42
Description
deck.gl v10
- WebGL-only and WebGPU endpoint proof of concept: #10504 (draft).
Cross-cutting WebGPU status
| Area | Status | Current findings | Tracker action |
|---|---|---|---|
| Native WebGPU aggregation | ⬜ Open | GridLayer, HexagonLayer, ScreenGridLayer, and ContourLayer still select CPU aggregation on WebGPU because the shared aggregator requires WebGL-only features. HeatmapLayer already has a native WebGPU GPU-rendering path. See aggregator selection. |
Keep open; distinguish the Heatmap implementation from the layers still using CPU fallback. |
| Picking, hover, and click | ✅ Complete | #9733 implements asynchronous WebGPU picking and wires it into hover and pointer-down/click events, including stale-hover protection. See picking-mode selection. Synchronous WebGPU picking and asynchronous deep picking remain unsupported. | Check off; retain the async-only limitations in documentation. |
| Effects, text features, and extensions | ⬜ Open | Shadows and post-processing are incomplete; text backgrounds, collision filtering, and clipping remain WebGL-only; and the WGSL shader-hook list is empty. | Split into focused tasks for shadows/effects, TextLayer follow-ups, and WGSL shader hooks/extensions. |
| 64-bit position handling | 🟡 Partial | WGSL projection accepts high/low position pairs, and Float64Array attributes are split into high/low data. Generated and binary coordinate sources still need auditing; Fp64Extension remains WebGL-only. |
Keep open; focus on preserving 64-bit inputs where precision is required and add WebGPU precision/binary-input coverage. |
| WebGL-specific calls | 🟡 Partial | The named setGLDeviceParameters() call is gone. Guarded setParametersWebGL() and withParametersWebGL() calls remain in backend-specific layer drawing, while WebGPU uses render-pass and pipeline parameters. |
Narrow to removing WebGL calls from backend-neutral core paths; retain adapter-specific code in WebGL-only integrations. |
| Unsupported normalized attribute formats | ⬜ Open | The buffer-layout mapper can still produce scalar unorm8 or unorm8x3 layouts on WebGPU, including three-component colors from colorFormat: 'RGB'. |
Keep open; pad or promote unsupported sizes and add WebGPU RGB regression coverage. |
| Shader-module/project feedback from #9509 | 🟡 Partial | WGSL layer uniforms, constant-attribute buffers, and shared website device selection have landed. Remaining cleanup includes project-helper naming, the rotation-result/identity-matrix path, retained driver workarounds, and duplicated WGSL uniform declarations. See the current project WGSL. | Replace the generic follow-up with a focused project/WGSL cleanup checklist. |
| Scatterplot workaround from #9527 | ✅ Superseded | The Scatterplot-specific manual instance count and per-layer depth parameters are absent after #9432 landed. A separate generalized WebGPU render-pass default remains. | Close this item; track removal of the generalized render-pass default separately if still desired. |
deck.gl 9.4
Last verified against GitHub: 2026-08-01.
Status: 🟡 awaiting review · 🟠 author action needed · ✅ landed.
Remaining layer PRs
These are the only WebGPU layer ports that have not landed. All branches were refreshed onto the latest master after TripsLayer landed.
| Priority | Layer | PR | Current state / reviewer action |
|---|---|---|---|
| 1 | TextLayer glyph rendering |
#10473 | 🟡 Ready for review and mergeable. Rebased onto master; fresh CI is running. Glyph rendering is covered; backgrounds, collision filtering, and clipping remain follow-ups. |
| 2 | SimpleMeshLayer |
#10485 | 🟡 Ready for review and mergeable. Rebased onto master; fresh CI is running. Includes the merged Tile3D mesh/point-cloud child work from #10517. WebGPU shadows remain separate. |
| 3 | TerrainLayer |
#10516 | 🟠 Draft and mergeable, stacked directly on the refreshed SimpleMeshLayer branch. Fresh CI is running; mark ready after the base PR lands and CI passes. |
Other open WebGPU work
| Feature | PR | Current state |
|---|---|---|
| React WebGPU device switching | #10506 | 🟡 Ready for review and mergeable. Keeps _customRender authoritative and documents the device/canvas lifecycle. |
| GPU attribute-buffer grouping/interleaving | #10518 | 🟡 Ready for review. |
Recently landed
-
GridLayer: #10482 -
TripsLayer: #10484 -
S2Layer,QuadkeyLayer, andGeohashLayer: #10495 -
H3ClusterLayerandH3HexagonLayer: #10496 -
A5Layer: #10497 - WebGPU v9.4 release notes, support versions, and badges: #10507
The core rendering base is already merged: #10466, #10113, #10142, #10470, #10471, #10472, #10478, #10483, #10493, and #10494.
Superseded work
- #10450: closed; retained only as a reference for focused ports.
- #9723: closed; superseded by the merged SolidPolygonLayer port #10142.
deck.gl 9.3
- Picking: Add async picking APIs to picking manager @ibgreen https://github.com/visgl/deck.gl/pull/9732
- WebGPU examples must provide
pickable: trueotherwiseinstanceColorsare not supplied which will invalidate the pipeline execution
deck.gl 9.2
WEBSITE - Make a few layers run under WebGPU
- WEBSITE: Add a device switcher to deck.gl website - @Kaapp
- WEBSITE: Add PointcloudLayer WebGPU Tab- @Kaapp
- WEBSITE: Add ScatterplotLayer WebGPU Tab - @ibgreen
- WEBSITE: Add LineLayer WebGPU Tab? - @Kaapp
- Move deck layers to premultiplied alpha to enable map overlays @Kaapp
- Fix buffer generation for constant attributes under WebGPU @Kaapp
- Replace Textures in deck with
AsyncTexture@felixpalmer
deck.gl 9.1: Make a few layers run under WebGPU already in 9.1.x
- Publish unblocking fixes #1 in luma.gl 9.1 (v9.1.4) @ibgreen
- Publish more unblocking fixes in luma.gl 9.1 (TBD) @ibgreen
- Port deck.gl
projectshader modules to WGSL @ibgreen - Temporarily fork
examples/website/scatterplottotest/apps/webgpu-scatterplotand port shaders to WGSL @ibgreen - Temporarily fork
examples/website/linetotest/apps/webgpu-lineand port shaders to WGSL @ibgreen - Update AttributeManager to generate buffers for constant values under WebGPU #9506
- Handle or provide clear errors when unused uniforms in a shader are trimmed resulting in too many uniforms supplied to shader - See https://github.com/visgl/luma.gl/pull/2355
- Handle when vertex attribute binding order results in an error regarding incorrect buffer sizes. - See https://github.com/visgl/luma.gl/pull/2363 & https://github.com/visgl/luma.gl/pull/2364
- Replace all calls to
readPixelsWebGL() - Remove all calls to
Model.updateModuleSettings()@felixpalmer
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Choose one unchecked tracker row rather than treating this as a single change. Start with the linked entry point for that row, such as aggregation selection in modules/aggregation-layers/src/grid-layer/grid-layer.ts, buffer layouts in modules/core/src/lib/attribute/gl-utils.ts, or project WGSL in modules/core/src/shaderlib/project/project.wgsl.ts. Done means the focused WebGPU task is implemented, covered by the relevant regression tests, and removed from this tracker.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- computer-graphics
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 20/100