60 lines
3.0 KiB
Markdown
60 lines
3.0 KiB
Markdown
# M10-07 Status
|
|
|
|
status: done
|
|
task: Bounded WebGL2/Three physical compiler for the declared Shader node subset
|
|
updated: 2026-08-16 America/New_York
|
|
|
|
## Scope
|
|
|
|
The browser material path now compiles only the declared RGB, Value, Math,
|
|
Image Texture, Normal Map, Principled, and Material Output closure. The compiler
|
|
produces a schema-versioned `WEBGL2_THREE_PHYSICAL` report before a Shader Main
|
|
transaction is sent to Blender. Unknown nodes, cycles, duplicate inputs, missing
|
|
or blocked images, oversized graphs, and invalid constants fail closed without
|
|
mutating the source graph.
|
|
|
|
This task does not claim arbitrary Shader Node support, WebGPU compilation,
|
|
complete color management/sampler parity, compile-key invalidation, or pipeline
|
|
rollback; those remain later M10 tasks.
|
|
|
|
## Protocol and Runtime
|
|
|
|
- `web/protocol/shader-compiler.ts` defines the M10-07 allowlist, fixed node/link/
|
|
depth/texture/identifier budgets, deterministic graph fingerprint fallback,
|
|
scalar Math evaluation, and bounded `ShaderCompileReport`.
|
|
- The Engine Worker compiles `setShaderGraph` before the native Main transaction,
|
|
rejects a blocked report, and returns the report with the committed delta.
|
|
- Main-thread and Offscreen viewport material creation share `createPBRMaterial`;
|
|
compiled constants and declared base-color/normal texture bindings are stored in
|
|
material `userData` for the texture adapter.
|
|
|
|
## Evidence
|
|
|
|
- `WEB_TEST_PORT=5521 npm --prefix web run test:shader-compile`: unit 5/5 and
|
|
Chromium 3/3 passed. The suite covers the real Main graph transaction, Math
|
|
result and topological order, Image/Normal bindings through the shared viewport
|
|
path, missing resources, cycles, duplicate inputs, oversized graphs, forged
|
|
fingerprints, and source graph immutability on blocked input.
|
|
- `tests/golden/M10-07/shader-compile.json` fixes the fixture digest, backend,
|
|
allowlist, six Math operations, and compiler budgets.
|
|
- The first attempt on the default port was rejected before browser startup because
|
|
an existing process owned `127.0.0.1:5173`; it is not counted as a feature failure.
|
|
|
|
## Implementation Hashes
|
|
|
|
- Compiler: `50b29c99d73c886a41bb8e10ccd2309068a1c09b23196655659b2f530d31f856`.
|
|
- Engine Worker: `376efe09de20150fc32803745da7e7e55bb41d178302e45b1fd90a2fe7778b2e`.
|
|
- PBR adapter: `f9c2e5ede635d11673f971c985288821af24ed81ecaadc95efefd958637672fd`.
|
|
- Texture adapter: `d5e379e25e0ab8294523690c4d4c79203b6f1610b4d6a608b33a7118f51efa57`.
|
|
- Unit test: `1e5d44b4f73f4ee4e4c9329f73628980df9337632dc48a3d50689f051a89b6e7`.
|
|
- Chromium spec: `c59b9f349bd6ce329ffc89f64eba3fec3e1e02a528978bdc1c3793d921faabc3`.
|
|
- Golden: `6bb8c07f014a0f2c1fd0e9ec16b08b99a524d8d3161bc556767acaf510c6c961`.
|
|
- Package: `ea0fef34497d51448d5478f4a761bef3c4ca816c408fd8a0807eaa0b093d0df8`.
|
|
|
|
## Rollback
|
|
|
|
Remove the compiler, Worker gate, shared material/texture adapter integration,
|
|
M10-07 tests, golden and this status file together. Restore the M10 count to
|
|
6/15 and leave Shader Main's existing capability gate and writeback contract in
|
|
place; do not retain a compiler report that is not enforced before Main mutation.
|