Skip to content

Godot 4.7.1 WebGPU export templates — Forward+ renders (patch series 0001–0033)

Latest

Choose a tag to compare

@lxsolutions lxsolutions released this 28 Jul 03:59
· 105 commits to main since this release
6dc5177

Godot 4.7.1 WebGPU export templates, patch series 0001–0033.

These are the first published templates that render Forward+ in a browser. The previous release (p0014) could not — it predates the eleven patches that made the clustered renderer work.

What changed since p0014

Forward+ went from failing in shader translation to presenting a frame. Measured on an NVIDIA Tesla P40 through headed Chrome/WebGPU, Chariot exported with --rendering-method forward_plus:

Renderer forward_plus
Objects / primitives 188 / 2,015,266
Frame rate 59 fps
commandEncoder.finish invalid 0 of 10,842
queue.submit rejected 0 of 10,842
Bind-group failure classes 0
Canvas dominant-colour fraction 0.085 (a cleared buffer measures ≥0.95)
Adapter isFallbackAdapter=false
wasm traps / device loss 0

Screenshot: docs/images/forward-plus-first-frame.png

The eleven patches, each measured separately, are described in docs/architecture/webgpu-runtime-status.md.

What is NOT claimed

  • Three validation errors remain — the sampler2DMS class in ResolveShaderRD and SsEffectsDownsample. They are demonstrably not on the path to the presented frame: zero command buffers are rejected and the frame draws with them present.
  • One scene, one GPU, one browser. Chrome on Linux, Tesla P40. Safari, iOS, AMD, Intel and Apple GPUs are unverified.
  • The D24 depth fallback and the float32→float16 view path are unexercised — this adapter exposes both features, so neither branch has ever run.
  • No performance claim beyond the single figure above. Payload is 45.8 MiB uncompressed with a cold start in the tens of seconds; that work has not started.

Verify these bytes are what they say

godot.web.template_release.webgpu.zip
  sha256 c1b72f8159086307d1702592a1a7329f16dcba7b39e04ea74a5db0591b061d23
godot.web.template_debug.webgpu.zip
  sha256 895f76dec8df6a8191d54721e5f43700ec87d484a7e9b7c52dee3469fc0183ae

Both are recorded in engine/engine-lock.toml.

provenance.json records the series id sfwebgpu-1:73b9ad0408b9c011, a digest over the base commit and the ordered patch list. Recompute it from a fresh clone:

python tools/provenance/provenance.py id

Identify any Godot web build's lineage, including one you didn't produce:

python tools/provenance/provenance.py verify path/to/build

Reproduce the Forward+ frame

git clone https://github.com/lxsolutions/studio-foundation && cd studio-foundation
# unpack both zips into engine/artifacts/templates/   (or run `just engine-build`)
cd tests/browser && npm ci && cd ../..
just verify-renderer --renderer forward_plus

That single command exports, serves, probes, traces bind-group and command-buffer
validity, and writes one evidence file. It exits 0 only when a non-fallback
GPU adapter, varied composited pixels and non-zero engine draw counters all
agree — 1 for a definite negative, 2 inconclusive, 3 if preconditions
are missing. A missing browser or absent templates is never reported as "does not
render".

render-probe reports rendered only when a non-fallback adapter, varied composited pixels and non-zero engine draw counters all agree. It is calibrated against three controls on the test host: a WebGPU clear-only page and an HTML-overlay page must both report not-rendered, and Chariot on Forward Mobile must report rendered.

If you reproduce this — or fail to — please open an issue. Independent confirmation on hardware we do not own is the most useful thing anyone can contribute right now.

Requirements

Chrome/Edge 113+ with WebGPU enabled, or another browser with WebGPU support. nothreads builds; no cross-origin isolation required.

Attribution

The WebGPU backend originated in dwalter/godotwebgpu (commit f329e39c), MIT. Godot Engine © 2014-present Godot Engine contributors and © 2007-2014 Juan Linietsky, Ariel Manzur, MIT. Full notice in NOTICE.md.