Native WebGPU on macOS and Windows with AOT application and media support - #43
Conversation
|
Implemented in PR #43, commit ea6b3aa, for the issue's macOS-first Frameforge media milestone. Delivered
Verification at ea6b3aa
Scope and follow-upWindows/Linux media/video hardware parity is explicitly tracked in #61 and #62, using the common service/graph/lease design. Those video backends still report unsupported, not a passing capability. This closes the macOS-first media-engine milestone specified here, not the complete Frameforge editor epic. Full editor rendering still needs external image/video WebGPU APIs in #40, Canvas2D export in #34, and the remaining #53 issues. The real mixed audio track is now available to the recording adapter; MediaRecorder/encoding remains #58. Broader codecs, rotated/color-managed video, full HTML/Web Audio conformance and physical/long-duration A/V/performance qualification are not claimed by these subset tests. Design, limits, exact commands and reproducible AOT harness: Original application reference remains pinned at f414cd44896b659a5c6da2e4fc596a2ded055f2a: CI will validate the pushed revision separately; no cross-platform CI pass is claimed here. |
|
Implemented in PR #43, commits ea6b3aa and af02cc8, for the issue's macOS-first Frameforge media milestone. Delivered
Verification at af02cc8
Scope and follow-upWindows/Linux media/video hardware parity is explicitly tracked in #61 and #62, using the common service/graph/lease design. Those video backends still report unsupported, not a passing capability. This closes the macOS-first media-engine milestone specified here, not the complete Frameforge editor epic. Full editor rendering still needs external image/video WebGPU APIs in #40, Canvas2D export in #34, and the remaining #53 issues. The real mixed audio track is now available to the recording adapter; MediaRecorder/encoding remains #58. Broader codecs, rotated/color-managed video, full HTML/Web Audio conformance and physical/long-duration A/V/performance qualification are not claimed by these subset tests. Design, limits, exact commands and reproducible AOT harness: Original application reference remains pinned at f414cd44896b659a5c6da2e4fc596a2ded055f2a: CI will validate the pushed revision separately; no cross-platform CI pass is claimed here. |
|
Merge stabilization is committed and pushed through 185694f.
The working tree is clean. PR scope/title/evidence are updated; there are no unresolved review threads. Keep draft until the latest revision's CI, native packages and package-consumer checks pass. No merge has been performed. |
|
The latest macOS package failure was Input dispatch now imports the latest observed host timestamp immediately before handling the event. The worker's loop-entry timestamp can otherwise precede a newly dequeued event even when the host observed its compositor boundary before enqueueing the input. A transition can then start on the stale timeline and be advanced past completion at the next loop. The additional acquire load updates only the monotonic document clock: it does not release RAF, add frame production, or change the host-vsync architecture. The original failure was not reproduced in 100 local pre-fix runs. The existing repeated-switch regression remains unchanged; post-fix repetition and the complete native suite are used for local validation. Final CI remains required to verify the affected runner. Post-fix validation: 100/100 repeated-switch runs and full native CTest 18/18 passed. The fix is committed and pushed; final-revision CI is pending. |
Deliver native WebGPU rendering for the unchanged Kestrel CAD application on macOS and Windows using Avalonia, plus AOT-safe application compatibility and macOS-first native media/Web Audio support for Frameforge. This is a bounded milestone within epic #22; the epic remains open.
Rendering and application support
Pinned Dawn/Tint integrates with Metal/IOSurface on macOS and D3D12/shared DXGI images through ANGLE/D3D11 on Windows. Vsync-driven composition, bounded immutable image ownership, producer waits and consumer retirement avoid per-frame CPU pixel readback during normal GPU presentation. Retained images remain visible while resized images are pending. Shared font/text optimizations and CSS fixes include regression coverage.
HTML audio/video now uses a shared asynchronous media service, cancellation generations, bounded queues and real playback/seek clocks. macOS decoded video composes through the retained IOSurface image path with ordinary DOM clipping/stacking, without native overlays. Statically compiled miniaudio supplies audio output/PCM decoding and native mixing, gain, meters and capture tracks. Original Frameforge MediaEngine and waveform worker modules pass a separate Native AOT test.
--media-demoopens an interactive MP4 player. The full Frameforge editor is still unqualified.Binary resources, Blob/Response handling, workers and application compatibility changes support the original AureonStudio/Frameforge assets. Production Avalonia 11 remains supported; samples may opt into Avalonia 12 for cooperative macOS resizing. Native AOT/trim safety is mandatory.
Packaging
This PR ships multiple native libraries. V8 and miniaudio are statically linked into the native engine; Dawn remains shared, and Windows composition also requires ANGLE EGL/GLES. macOS does not require ANGLE. Runtime data and host native dependencies remain packaged assets. Single-native-binary linking is deferred. Native packages include the pinned miniaudio license.
Final stabilization
Commits
c65ab896and01f88e65complete stabilization.01f88e65converts pan/sidebar/zoom diagnostic serialization to generated metadata after the AOT smoke test exposed reflection-only tracing; the full AOT interaction/resize rerun then passed.c65ab896fixes the Windows package compiler failures: the browser bootstrap is assembled from bounded string parts to respect MSVC's literal limit, and worker resource paths are explicitly converted at the runtime boundary. The earlier cross-RID evidence failure resulted from the missing Windows build artifact. After compilation succeeded, Windows exposed a cold-start race in the resource single-flight integration test; its worker realms are now warmed before the simultaneous-load barrier, retaining the existing waiter/shared-byte assertions.Local verification of the updated runtime:
docs/graphics/evidence/2026-09-10-merge-stabilization/.Final-revision CI and package-consumer checks are required before merge. Keep draft while those checks are unresolved. Prior Windows hardware evidence is recorded in the existing integration reports; new Windows/Linux video hardware support is not claimed.
Deferred work and qualification limits
Linux GPU parity (#46), browser WebGL/fallback, Uno GPU qualification, full CTS/WPT conformance, exhaustive device-loss testing and single-binary packaging remain deferred. Windows/Linux media parity is #61/#62. Full Frameforge editor rendering still needs external image/video WebGPU APIs (#40), Canvas2D export (#34), MediaRecorder (#58) and remaining #53 work; physical/long-duration A/V qualification remains #59. Select popups remain #44.
Automated resize/input checks do not establish physical 60fps or identical transient Chrome resizing. The existing milestone document is
docs/graphics/pr43-milestone-scope.md; media design, limits and reproducible commands are inexperiments/WebScene.NativeEngine.Probe/native/media/README.md. Issues #54/#55 close the documented macOS-first media milestones, not complete browser conformance or the full editor.