Two overlapping WebGPURenderer.compileAsync() calls on a warmed scene both
resolve in 0.186.0. In 0.187.0, one rejects with:
TypeError: Cannot destructure property 'useFrameBufferTarget' of 'this._precompilationState' as it is null.
Expected: both calls resolve. Sequential calls succeed in both versions.
Requires Node.js/npm, Python 3, and a WebGPU-capable browser. From the repository root:
npm ci --prefix r186
npm ci --prefix r187
python3 -m http.server 8000 --bind 127.0.0.1Open both pages and confirm the displayed backend is WebGPU:
| Page | Three.js | Concurrent calls |
|---|---|---|
| http://127.0.0.1:8000/r186/ | 0.186.0 | 2 fulfilled, 0 rejected |
| http://127.0.0.1:8000/r187/ | 0.187.0 | 1 fulfilled, 1 rejected |
The pages show the loaded revision, result counts, and rejection stack.
r186/index.html and r187/index.html are
identical; only their pinned dependencies differ. Each creates one scene with
one box and a MeshBasicNodeMaterial, then runs:
await renderer.init();
await renderer.compileAsync(scene, camera); // Warm caches.
const results = await Promise.allSettled([
renderer.compileAsync(scene, camera),
renderer.compileAsync(scene, camera)
]);Keep the warm-up for reliable reproduction. Workaround: await each compile before starting the next.
After installing both repro dependencies above, with Node.js 20+:
npm ci
npx playwright install chromium
npm testAlternatively, use an installed Chromium with BROWSER_PATH=/usr/bin/chromium npm test.
The verifier starts its own server and enables WebGPU on SwiftShader.
Verified on Linux, Chromium 154.0.8037.57, WebGPU/SwiftShader: 10/10 runs
per version matched the table above. Concurrent compilation of individual
warmed meshes also failed only in r187; sequential compilation passed in both.
verification.json contains browser flags, counts, and error
stacks pointing to _finishPreCompile(). The verifier checks the exact error
and requires the WebGPU backend.