visgl / visgl/deck.gl

Tracker: WebGPU

Open
#9,504 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

feature
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, and GeohashLayer: #10495
  • H3ClusterLayer and H3HexagonLayer: #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: true otherwise instanceColors are 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 project shader modules to WGSL @ibgreen
  • Temporarily fork examples/website/scatterplot to test/apps/webgpu-scatterplot and port shaders to WGSL @ibgreen
  • Temporarily fork examples/website/line to test/apps/webgpu-line and 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.