Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
418 commits
Select commit Hold shift + click to select a range
ccd7179
Implement internal V8 mapped buffer range and unmap operations
danwalmsley Sep 7, 2026
c28bc7a
Detach mapped V8 views by device identity before native teardown
danwalmsley Sep 7, 2026
4379552
Verify mapped ArrayBuffers retain native buffers through wrapper GC
danwalmsley Sep 7, 2026
49d5fac
Bridge asynchronous Dawn buffer mapping to V8 promises
danwalmsley Sep 7, 2026
dccede5
Connect native V8 buffer mapAsync with cancellation and read-write ma…
danwalmsley Sep 7, 2026
35bd977
Settle map rejections even when exception construction throws
danwalmsley Sep 7, 2026
f09f37d
Create owned V8 buffers from JavaScript descriptors with validation a…
danwalmsley Sep 7, 2026
5efc3c5
Add internal V8 device wrappers for buffer creation and destruction
danwalmsley Sep 7, 2026
1a7e980
Verify device destruction cancels and retires pending V8 buffer maps
danwalmsley Sep 7, 2026
5bb3d98
Implement native-backed V8 device labels
danwalmsley Sep 7, 2026
fe76110
Expose immutable enabled-feature snapshots on internal V8 devices
danwalmsley Sep 7, 2026
6cde962
Bridge native Dawn device requests to realm-owned V8 promises
danwalmsley Sep 7, 2026
18a7cfc
Convert V8 WebGPU device descriptors with iterable features and limit…
danwalmsley Sep 7, 2026
801e338
Map standard WebGPU limits to Dawn and validate required adapter limits
danwalmsley Sep 7, 2026
2940dca
Prepare owned native device descriptors from converted JavaScript req…
danwalmsley Sep 7, 2026
7ea1bf1
Connect checked JavaScript device requests to rejection and native su…
danwalmsley Sep 7, 2026
847fd12
Add realm-owned adapter wrappers with deferred native release
danwalmsley Sep 7, 2026
a74e71a
Dispatch adapter requestDevice into native-backed JavaScript device w…
danwalmsley Sep 7, 2026
d7f51af
Cancel pending device promises before adapter registry teardown
danwalmsley Sep 7, 2026
4979e8c
Verify successful native device creation racing adapter registry disp…
danwalmsley Sep 7, 2026
5f6cf97
Connect internal V8 GPU discovery to native adapter and device regist…
danwalmsley Sep 7, 2026
1ae7039
Expose host-selected preferred canvas format on internal GPU discovery
danwalmsley Sep 7, 2026
7bc963c
Report standards-filtered WGSL language features from native Dawn
danwalmsley Sep 7, 2026
b274bb1
Expose immutable native adapter and device limit snapshots in V8
danwalmsley Sep 7, 2026
b2dab28
Extract owned adapter information with explicit fallback classification
danwalmsley Sep 7, 2026
691bf2e
Expose native adapter information snapshots on V8 adapters and devices
danwalmsley Sep 7, 2026
1147e04
Own Dawn shader modules with bounded handles and native WGSL validati…
danwalmsley Sep 7, 2026
52daeea
Defer shader-module finalization through generation-checked engine re…
danwalmsley Sep 7, 2026
a1ee9d0
Add native-backed V8 shader-module wrappers with deferred ownership
danwalmsley Sep 7, 2026
36a7de8
Connect internal GPUDevice shader creation to Dawn
danwalmsley Sep 7, 2026
93cd057
Own Dawn render pipelines and verify retained draw commands
danwalmsley Sep 7, 2026
e7472d0
Add typed V8 render-pipeline wrappers and native references
danwalmsley Sep 7, 2026
c6198c0
Convert programmable pipeline stages and override constants
danwalmsley Sep 7, 2026
528586d
Convert render states using pinned WebGPU enum catalogs
danwalmsley Sep 7, 2026
c806a70
Convert pipeline depth stencil and color target states
danwalmsley Sep 7, 2026
26b35c0
Convert vertex pipeline stages and nullable buffer layouts
danwalmsley Sep 7, 2026
c8fda47
Connect JavaScript render pipeline creation to Dawn
danwalmsley Sep 7, 2026
9961b61
Own Dawn textures and views with retained draw lifetimes
danwalmsley Sep 7, 2026
34863e2
Convert WebGPU texture descriptors and extent unions
danwalmsley Sep 7, 2026
df2b901
Add texture view conversion and deferred V8 wrappers
danwalmsley Sep 7, 2026
c0bba41
Connect JavaScript texture and view creation to Dawn
danwalmsley Sep 7, 2026
fd230ee
Own Dawn command encoders render passes and command buffers
danwalmsley Sep 7, 2026
2056b46
Connect JavaScript command encoders and command buffer finish
danwalmsley Sep 7, 2026
2ba1c29
Record native render passes and triangle draws from JavaScript
danwalmsley Sep 7, 2026
2078d48
Submit JavaScript WebGPU commands and verify rendered pixels
danwalmsley Sep 7, 2026
fbcb754
Convert WebGPU canvas configuration without losing requested modes
danwalmsley Sep 7, 2026
fa5cfb0
Expire shared frame textures before image reuse
danwalmsley Sep 7, 2026
7c6f0c3
Publish shared canvas frames after application queue submission
danwalmsley Sep 7, 2026
80e3907
Adopt imported canvas textures without reallocating storage
danwalmsley Sep 7, 2026
c6cbedc
Expose imported canvas textures through V8 device ownership
danwalmsley Sep 7, 2026
5f97b6f
Preserve canvas texture configuration and validate canvas-only constr…
danwalmsley Sep 7, 2026
fb984bc
Add internal WebGPU canvas context and verify rendered current texture
danwalmsley Sep 7, 2026
9715475
Retire discarded IOSurface canvas frames through GPU completion
danwalmsley Sep 7, 2026
0898211
Share descriptor-preserving IOSurface canvas texture import
danwalmsley Sep 7, 2026
539b9f7
Own IOSurface canvas acquisition and retirement in native provider
danwalmsley Sep 7, 2026
2a32d5a
Render V8 WebGPU canvas into shared IOSurface provider
danwalmsley Sep 7, 2026
a3d40d8
Provision native canvas sharing through JavaScript device requests
danwalmsley Sep 7, 2026
2cde4fe
Unify WebGPU realm ownership and completion routing
danwalmsley Sep 7, 2026
34821b3
Install host-approved WebGPU realm in the document runtime
danwalmsley Sep 7, 2026
ba21233
Bind DOM WebGPU canvases to the macOS shared texture provider
danwalmsley Sep 7, 2026
c629ce7
Publish completed DOM WebGPU frames at rendering opportunities
danwalmsley Sep 7, 2026
906d607
Retain indexed GPU scene images through Ganesh retirement
danwalmsley Sep 7, 2026
82eec29
Bound GPU scene replacement and drain host-context retirement
danwalmsley Sep 7, 2026
381cf3a
Apply versioned scenes with retained GPU bindings before acknowledgement
danwalmsley Sep 7, 2026
fd73a2d
Retire detached GPU visuals under serialized host context ownership
danwalmsley Sep 7, 2026
0a4109a
Connect opt-in composition GPU scenes and detached retirement service
danwalmsley Sep 7, 2026
8250d35
Add per-document host WebGPU admission policy
danwalmsley Sep 7, 2026
024f693
Bridge managed document admission into native WebGPU policy
danwalmsley Sep 7, 2026
bc73b07
Render WebGPU canvas through the ordinary macOS WebScene view
danwalmsley Sep 7, 2026
5adcbf4
Preserve intrinsic inline canvas layout for WebGPU painting
danwalmsley Sep 7, 2026
9c1d76e
Demonstrate a WebGPU shader triangle in the ordinary WebScene view
danwalmsley Sep 7, 2026
7d19563
Exercise WebGPU document resize and repeated-frame stress
danwalmsley Sep 7, 2026
221a13d
Keep completed canvas images visible until replacement or reset
danwalmsley Sep 7, 2026
927f00b
Reclaim unreachable GPU wrappers under release-ticket pressure
danwalmsley Sep 7, 2026
6fae1a4
Defer WebGPU RAF batches until canvas storage is available
danwalmsley Sep 7, 2026
ea6ddd4
Run unchanged Kestrel as a failing WebGPU startup acceptance check
danwalmsley Sep 7, 2026
c8089f9
Implement GPUDevice pushErrorScope with native capture validation
danwalmsley Sep 7, 2026
db5adad
Capture owned bounded Dawn shader compilation diagnostics
danwalmsley Sep 7, 2026
f9cf2ec
Preserve Dawn UTF-16 shader diagnostic coordinates
danwalmsley Sep 7, 2026
73d56c6
Deliver shader compilation information through V8 promises
danwalmsley Sep 7, 2026
ae1eed2
Expose WebGPU flag namespaces with document admission
danwalmsley Sep 7, 2026
22e672a
Own explicit WebGPU binding and pipeline layouts with deferred release
danwalmsley Sep 8, 2026
d8d6e3a
Expose WebGPU bind-group layout creation and descriptor conversion
danwalmsley Sep 8, 2026
8608b5e
Add guarded native WebGPU bind group ownership
danwalmsley Sep 8, 2026
81136f8
Expose WebGPU bind group creation for buffers and textures
danwalmsley Sep 8, 2026
c58e04f
Expose explicit WebGPU pipeline layouts
danwalmsley Sep 8, 2026
7f9854a
Deliver WebGPU error scope promises through engine completions
danwalmsley Sep 8, 2026
da3292f
Integrate GPUDevice with native EventTarget dispatch
danwalmsley Sep 8, 2026
982df69
Deliver GPUDevice lost promises without continuous polling
danwalmsley Sep 8, 2026
9bee1c6
Upload WebGPU buffer sources through GPUQueue.writeBuffer
danwalmsley Sep 8, 2026
8a648e9
Render original Kestrel with WebGPU buffer bindings
danwalmsley Sep 8, 2026
8e4fb2e
Exercise original Kestrel view transitions in WebGPU probe
danwalmsley Sep 8, 2026
793ca0b
Verify Kestrel editing through native command input
danwalmsley Sep 8, 2026
cfbd8cc
Add failing original Kestrel solid creation acceptance probe
danwalmsley Sep 8, 2026
28a3f97
Collect basic form controls in FormData for Kestrel dialogs
danwalmsley Sep 8, 2026
a874bee
Fix closed dialog default layout and open attribute recascade
danwalmsley Sep 8, 2026
91c5a98
Add native HTMLDialogElement identity and state bindings
danwalmsley Sep 8, 2026
462594d
Add dialog close requests and queued close events
danwalmsley Sep 8, 2026
9a3d262
Exclude inert subtrees from native hit testing and focus
danwalmsley Sep 8, 2026
1f6e611
Track scoped native modal ordering and detach lifetime
danwalmsley Sep 8, 2026
8723dae
Route native modal input and paint above document layers
danwalmsley Sep 8, 2026
35d6de4
Resolve positioned auto margins for centered dialog layout
danwalmsley Sep 8, 2026
3e1c150
Add Kestrel theme interaction regression coverage
danwalmsley Sep 8, 2026
df2d3c9
Probe unchanged Kestrel resize behavior during native wheel zoom
danwalmsley Sep 8, 2026
4d4b107
Record original Kestrel computed-style diagnostics
danwalmsley Sep 8, 2026
f1a6782
Discover navigation stylesheets from parsed HTML instead of script st…
danwalmsley Sep 8, 2026
eb625c3
Preserve functional colors when parsing border shorthands
danwalmsley Sep 8, 2026
9bc48a2
Capture native work counters during Kestrel wheel zoom
danwalmsley Sep 8, 2026
c304412
Record mismatched GPU and overlay publication evidence
danwalmsley Sep 8, 2026
6d3b145
Specify coherent scene capture and GPU completion ownership
danwalmsley Sep 8, 2026
4da195d
Retain exact GPU outputs with completion-gated scene tickets
danwalmsley Sep 8, 2026
bd2e30e
Expose exact submitted image capture at the canvas provider boundary
danwalmsley Sep 8, 2026
45acf24
Test and enforce two-phase GPU producer completion
danwalmsley Sep 8, 2026
ffeb24b
Capture exact GPU outputs at runtime rendering boundaries
danwalmsley Sep 8, 2026
06b07f4
Represent pending GPU outputs in captured scene paint order
danwalmsley Sep 8, 2026
b0b6b85
Stage coherent CPU scenes until captured GPU outputs complete
danwalmsley Sep 8, 2026
c141b03
Reject missing GPU outputs and measure native Kestrel right-button pan
danwalmsley Sep 8, 2026
362ead4
Avoid duplicate GPU completion invalidation and verify full scene cap…
danwalmsley Sep 8, 2026
e99069f
Let auto grid rows shrink and preserve resolved stretch heights
danwalmsley Sep 8, 2026
69b0360
Distribute fractional grid tracks without losing their minimum space
danwalmsley Sep 8, 2026
8c0160a
Preflight all GPU dependencies before waiting for scene completion
danwalmsley Sep 8, 2026
1c39618
Avoid allocations on publication retries and time Kestrel frame callb…
danwalmsley Sep 8, 2026
27ed994
Inspect GPU image ownership to diagnose frame admission stalls
danwalmsley Sep 8, 2026
cc3960d
Poll retired GPU images after drawing under the existing host lease
danwalmsley Sep 8, 2026
91150eb
Document vsync publication audit and unqualified pan trace
danwalmsley Sep 8, 2026
5084096
Reject contaminated Kestrel pan measurements
danwalmsley Sep 8, 2026
1613f11
Record ordinary host-frame publication experiment
danwalmsley Sep 8, 2026
138aead
Capture Kestrel publication and draw timelines
danwalmsley Sep 8, 2026
55dc888
Consume bounded queued GPU scenes before drawing
danwalmsley Sep 8, 2026
3cf3bce
Assert Kestrel resize geometry after mailbox changes
danwalmsley Sep 8, 2026
64cc137
Separate compositor acceptance from draw timing
danwalmsley Sep 8, 2026
120cd0f
Release unimported intermediate GPU scene leases promptly
danwalmsley Sep 8, 2026
1d85cd0
Record compositor acquisition reason trace
danwalmsley Sep 8, 2026
cace117
Distinguish compositor callbacks from scene draw cadence
danwalmsley Sep 8, 2026
c038453
Correlate compositor frame demand and mailbox readiness
danwalmsley Sep 8, 2026
3a2f625
Record injected pan input sequences and timestamps
danwalmsley Sep 8, 2026
ad8c79b
Keep resize redraws within a GPU rendering opportunity
danwalmsley Sep 8, 2026
5309278
Capture Kestrel resize redraw verification
danwalmsley Sep 8, 2026
e18430a
Record unqualified continuous resize attempt
danwalmsley Sep 8, 2026
3e91533
Add validated offline Kestrel timing analysis
danwalmsley Sep 8, 2026
fc12256
Exercise original Kestrel sidebar resizing through native input
danwalmsley Sep 8, 2026
4643942
Identify resize redraw hold in sidebar publication stalls
danwalmsley Sep 8, 2026
d1efbf3
Release resize publication hold when its replacement is submitted
danwalmsley Sep 8, 2026
548c263
Record browser comparison viewport and DPR constraints
danwalmsley Sep 8, 2026
fc37fc5
Record rejected resize callback scheduling experiment
danwalmsley Sep 8, 2026
5ae0a91
Validate Kestrel sidebar input before comparing rendering performance
danwalmsley Sep 8, 2026
88e48dc
Publish completed staged GPU scenes during newer rendering opportunities
danwalmsley Sep 8, 2026
c06ecb6
Distinguish headless resize callbacks from physical presentation evid…
danwalmsley Sep 8, 2026
fccdb0e
Revoke compositor engine access before native view destruction
danwalmsley Sep 8, 2026
b77f076
Observe headless render timer independently of scene draw cadence
danwalmsley Sep 8, 2026
62ec233
Drain complete animation callback batches on every admitted host frame
danwalmsley Sep 8, 2026
e367680
Record current graphics-disabled V8 and RAF regression verification
danwalmsley Sep 8, 2026
65d4774
Make Kestrel document viewport explicit for browser comparisons
danwalmsley Sep 8, 2026
cf5a038
Keep DOM node within Linux footprint budget by removing padding
danwalmsley Sep 8, 2026
ae179fe
Run parser-sensitive WPT candidates through native document navigation
danwalmsley Sep 8, 2026
fea3bb1
Verify inert stylesheet navigation with graphics disabled
danwalmsley Sep 8, 2026
2218004
Retain exact Chrome reference harness and generated inputs
danwalmsley Sep 8, 2026
a83465f
Attempt scene publication at every host frame boundary
danwalmsley Sep 8, 2026
38cb0ce
Record resize redraw publication gate diagnosis
danwalmsley Sep 8, 2026
33d252e
Compare Chromium GPU handoff and protect resize RAF ordering
danwalmsley Sep 8, 2026
91e0816
Record rejected wake experiment and Metal dependency handoff direction
danwalmsley Sep 8, 2026
59cfcff
Qualify active Avalonia Metal host device and queue leases
danwalmsley Sep 8, 2026
6c906cf
Verify asynchronous Metal shared event handoff on hardware
danwalmsley Sep 8, 2026
99c34d3
Retain Dawn EndAccess dependencies with captured GPU submissions
danwalmsley Sep 8, 2026
5a8487c
Encode complete Metal producer wait lists without CPU blocking
danwalmsley Sep 8, 2026
59941af
Bridge Dawn shared fence exports to Metal consumer queue waits
danwalmsley Sep 8, 2026
ff55e57
Wrap native Metal textures in pinned Skia backend descriptors
danwalmsley Sep 8, 2026
a94c706
Import retained Dawn IOSurfaces into the Avalonia Metal device
danwalmsley Sep 8, 2026
89b033d
Verify Dawn IOSurface pixels sampled through Avalonia Skia Metal
danwalmsley Sep 8, 2026
133fc75
Retire Metal consumers with nonblocking queue completion markers
danwalmsley Sep 8, 2026
f2d5e19
Integrate Metal image ownership and retirement into retained scenes
danwalmsley Sep 8, 2026
a718d2b
Exercise original Kestrel on Metal and record resize shutdown failure
danwalmsley Sep 8, 2026
54fa280
Seal Metal retirement on compositor before background completion polling
danwalmsley Sep 8, 2026
bffd097
Preserve producer dependency ownership across native image consumers
danwalmsley Sep 8, 2026
5d4928d
Expose retained Metal producer events through versioned consumer hooks
danwalmsley Sep 8, 2026
cffefe8
Submit native producer event dependencies on the managed Metal queue
danwalmsley Sep 8, 2026
8d4f5d3
Negotiate explicit producer GPU wait capability for scene consumers
danwalmsley Sep 8, 2026
96553ed
Publish validated GPU images with producer dependencies for capable c…
danwalmsley Sep 8, 2026
9aaa96e
Record Kestrel frame-demand ordering experiment and remaining timing gap
danwalmsley Sep 8, 2026
15e36e5
Trace bounded compositor mailbox and GPU scene admission timing
danwalmsley Sep 8, 2026
24f6a76
Reuse text shapers across ordered DOM segments and isolate CPU scene …
danwalmsley Sep 8, 2026
5e6cf86
Verify text replay across GPU paint boundaries and record DOM compila…
danwalmsley Sep 8, 2026
9af4b88
Profile sidebar resize stalls and preserve failed drag diagnostics
danwalmsley Sep 8, 2026
e7add27
Identify repeated bitmap reset holds during continuous sidebar resize
danwalmsley Sep 8, 2026
f744354
Specify independent compositor image retention from Chromium resize b…
danwalmsley Sep 8, 2026
5d0b866
Retain compositor-accepted GPU images independently of DOM comparison…
danwalmsley Sep 8, 2026
b584233
Keep accepted canvas presentation images while publishing resized she…
danwalmsley Sep 8, 2026
b7fb25c
Exercise continuous Kestrel window resizing with intermediate scene v…
danwalmsley Sep 8, 2026
859afac
Attribute Kestrel DOM compilation cost to repeated text preparation
danwalmsley Sep 8, 2026
5547397
Cache repeated system font probes while preserving web font precedence
danwalmsley Sep 8, 2026
dfc1045
Record continuous resize cadence after font lookup optimization
danwalmsley Sep 8, 2026
64e83c6
Pace resize probe against display deadlines and separate driver timing
danwalmsley Sep 8, 2026
1868d34
Capture native resize metrics and distinguish property updates from e…
danwalmsley Sep 8, 2026
1e2f891
Trace window surface and engine resize boundaries separately
danwalmsley Sep 8, 2026
0db03fd
Select OpenGL host explicitly for retained WebGPU resize regression
danwalmsley Sep 8, 2026
3549f17
test(graphics): record validated OpenGL sidebar and manual feedback
danwalmsley Sep 8, 2026
2688d05
docs(graphics): update Kestrel qualification scope
danwalmsley Sep 8, 2026
292acdb
test(graphics): verify retained Chrome reference archive integrity
danwalmsley Sep 8, 2026
48e4ced
test(graphics): retain fresh Chrome matrix with repeatability limitat…
danwalmsley Sep 8, 2026
dcb79e7
test(graphics): reject active-command reference captures
danwalmsley Sep 8, 2026
e41f411
test(graphics): record full-workload overlay repeatability recheck
danwalmsley Sep 8, 2026
ee3695f
test(graphics): retain transitive Chrome capture helpers
danwalmsley Sep 8, 2026
ba75727
test(graphics): stress concurrent completion cancellation under sanit…
danwalmsley Sep 8, 2026
39f62ce
test(graphics): stress mailbox shutdown and late callback retirement
danwalmsley Sep 8, 2026
d09e708
test(graphics): record native Dawn loss-path recheck scope
danwalmsley Sep 8, 2026
dde007e
test(graphics): wait for document root during Chrome reference naviga…
danwalmsley Sep 8, 2026
e40a675
test(graphics): quantify remaining Chrome composite differences
danwalmsley Sep 8, 2026
5d561a9
test(graphics): verify surviving device after sibling Dawn loss
danwalmsley Sep 8, 2026
5154a48
test(graphics): retain complete repeatable Chrome matrix evidence
danwalmsley Sep 8, 2026
75bf60d
test(graphics): stress concurrent upload ownership and FIFO ordering
danwalmsley Sep 8, 2026
10fec5a
test(webgpu): verify writeBuffer bytes survive source detachment
danwalmsley Sep 8, 2026
038c067
test(graphics): verify graphics-disabled V8 build remains independent
danwalmsley Sep 8, 2026
aa7eb29
test(graphics): verify ANGLE texture isolation across context teardown
danwalmsley Sep 8, 2026
b7ff21e
fix(graphics): reject lost ANGLE contexts and restore surviving scopes
danwalmsley Sep 8, 2026
b3930ae
fix(graphics): report ANGLE reset during service command execution
danwalmsley Sep 8, 2026
b35d4c0
test(graphics): record matched non-GPU graphics toggle measurements
danwalmsley Sep 8, 2026
fc2da8e
fix(dom): allocate modal ordering lazily within document footprint bu…
danwalmsley Sep 8, 2026
8f43c5b
fix(dom): expose dialog opening and restore modal focus on close
danwalmsley Sep 8, 2026
de118eb
test(dom): verify dialog opening against Chrome and clean Kestrel
danwalmsley Sep 8, 2026
31c1951
test(input): flush setup movement before counting host-exit drag events
danwalmsley Sep 8, 2026
0867127
fix(graphics): preserve ANGLE toolchain environment during SDK metada…
danwalmsley Sep 8, 2026
37ec40f
test: fix Windows command matching and diagnose detached DOM cleanup …
danwalmsley Sep 8, 2026
2a6065a
ci(graphics): cache verified Dawn and ANGLE SDKs by pinned build iden…
danwalmsley Sep 8, 2026
904572d
fix(graphics): query the pinned Windows clang-cl compiler
danwalmsley Sep 8, 2026
7704151
fix(ci): synchronize save fixture setup and preserve dependency verif…
danwalmsley Sep 8, 2026
119f516
fix(graphics): enable long paths for ANGLE dependency verification
danwalmsley Sep 9, 2026
ea302c3
Merge remote-tracking branch 'origin/main' into codex/windows-kestrel…
danwalmsley Sep 9, 2026
dca693b
Merge remote-tracking branch 'origin/codex/epic-22-gpu-foundation' in…
danwalmsley Sep 9, 2026
f73b960
Merge remote-tracking branch 'origin/main' into codex/windows-kestrel…
danwalmsley Sep 9, 2026
13d2c24
Merge remote-tracking branch 'origin/codex/css-positional-variable-fi…
danwalmsley Sep 9, 2026
755f808
Add Windows Kestrel WebGPU composition and frame pacing
danwalmsley Sep 9, 2026
976863b
test(macos): verify Windows integration and align checkpoint comparis…
danwalmsley Sep 9, 2026
5b6d6e9
stabilize(pr43): scope desktop WebGPU milestone and fix validation ha…
danwalmsley Sep 9, 2026
b17eb58
Merge remote-tracking branch 'origin/main' into HEAD
danwalmsley Sep 9, 2026
22ebe4c
ci(graphics): provision the pinned Windows SDK for Dawn packaging
danwalmsley Sep 9, 2026
3b26cbe
Synchronize pointer demand handoff regression test
danwalmsley Sep 9, 2026
0b3100e
Make Kestrel Metal presentation and retained serialization AOT safe
danwalmsley Sep 9, 2026
afe7669
Package platform GPU dependencies and remove ANGLE from macOS
danwalmsley Sep 9, 2026
4b9ba9b
Add opt-in Avalonia 12 Kestrel AOT host while retaining Avalonia 11 d…
danwalmsley Sep 9, 2026
c0dc4cf
Support Aureon modules, workers and WebGPU compute in Native AOT
danwalmsley Sep 9, 2026
ce56d49
Add Frameforge Native AOT compatibility preview and media gap diagnos…
danwalmsley Sep 9, 2026
42c2e34
Start portable media decoding with static miniaudio and native video …
danwalmsley Sep 9, 2026
ea6b3aa
Implement native media playback and Web Audio for Frameforge AOT
danwalmsley Sep 9, 2026
af02cc8
Preserve media DOM branding and the Linux document footprint budget
danwalmsley Sep 9, 2026
c65ab89
Fix Windows runtime compilation and add interactive native video sample
danwalmsley Sep 9, 2026
01f88e6
Make AOT interaction diagnostics safe and record merge smoke checks
danwalmsley Sep 9, 2026
185694f
Stabilize cold-start resource sharing and sampled memory checks
danwalmsley Sep 9, 2026
26e1048
Refresh the host animation clock at input dispatch
danwalmsley Sep 9, 2026
c2a4327
Preserve responsive video aspect ratio and container scroll geometry
danwalmsley Sep 10, 2026
2b66c84
Pace decoded video with host frames and filter scaled GPU images
danwalmsley Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,8 @@
tests/WebPlatformSubset/upstream/** text eol=lf -whitespace
third-party/v8-patches/*.txt text eol=lf
packaging/WebScene.NativeEngine.Runtime/patches/*.txt text eol=lf
eng/graphics/** text eol=lf
tests/GraphicsCompatibility/*.mjs text eol=lf
tests/GraphicsCompatibility/fixtures/*.json text eol=lf
tests/GraphicsCompatibility/fixtures/Kestrel-LICENSE.txt -text
tests/GraphicsCompatibility/fixtures/Kestrel-CAD.zip -text
77 changes: 77 additions & 0 deletions .github/actions/graphics-sdk/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Verified graphics SDK
description: Restore or build an exact pinned SDK and verify its sealed inventory.
inputs:
rid:
required: true
description: Target runtime identifier
component:
required: true
description: dawn or angle
clean:
default: 'false'
description: Ignore the exact cache for an explicit rebuild
runs:
using: composite
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- id: sdk-identity
name: Resolve graphics SDK cache identity
shell: bash
env:
SDK_INPUTS: ${{ hashFiles('eng/graphics/dependencies.lock.json', 'eng/graphics/windows-runtime.json', 'eng/graphics/build.py', 'eng/graphics/DawnSymbolBoundary.cmake', 'eng/graphics/dawn_exports.py', 'eng/graphics/install-windows-sdk.ps1', '.github/actions/graphics-sdk/action.yml') }}
run: |
echo "key=webscene-graphics-sdk-v1-${{ inputs.component }}-${{ inputs.rid }}-${ImageVersion:?Runner image version is required}-$SDK_INPUTS" >> "$GITHUB_OUTPUT"
- id: sdk-cache
name: Restore pinned graphics SDK
if: inputs.clean != 'true'
uses: actions/cache/restore@v4
with:
path: artifacts/graphics-sdk/${{ inputs.rid }}/${{ inputs.component }}
key: ${{ steps.sdk-identity.outputs.key }}
# No prefix fallback: a different build recipe or toolchain must rebuild.
- name: Install pinned Windows SDK for graphics runtime packaging
if: inputs.rid == 'win-x64' && steps.sdk-cache.outputs.cache-hit != 'true'
shell: pwsh
run: ./eng/graphics/install-windows-sdk.ps1
- name: Initialize Windows x64 compiler environment
if: inputs.rid == 'win-x64'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$before = @{}
Get-ChildItem Env: | ForEach-Object { $before[$_.Name] = $_.Value }
$vswhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio/Installer/vswhere.exe'
if (!(Test-Path $vswhere)) { throw 'Visual Studio Installer/vswhere is required.' }
$installation = & $vswhere -latest -version '[17.1,)' -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
if ($LASTEXITCODE -ne 0 -or !$installation) { throw 'An x64 Visual C++ toolchain is required.' }
$developerShell = Join-Path $installation 'Common7/Tools/Launch-VsDevShell.ps1'
& $developerShell -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
if (!(Get-Command cl.exe -ErrorAction SilentlyContinue)) { throw 'Visual C++ initialization did not expose cl.exe.' }
if ($env:VSCMD_ARG_TGT_ARCH -ne 'x64') { throw 'Expected an x64 compiler target.' }
Get-ChildItem Env: | Where-Object { !$before.ContainsKey($_.Name) -or $before[$_.Name] -ne $_.Value } | ForEach-Object {
if ($_.Value.Contains("`n") -or $_.Value.Contains("`r")) { throw "Unexpected multiline environment variable: $($_.Name)" }
"$($_.Name)=$($_.Value)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
}
- name: Install Linux development prerequisites
if: inputs.rid == 'linux-x64'
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y ninja-build clang lld pkg-config libvulkan-dev libx11-dev libx11-xcb-dev libxcb1-dev libxext-dev libxi-dev libxrandr-dev libxinerama-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxfixes-dev libdrm-dev libgbm-dev libwayland-dev libudev-dev
- name: Build pinned SDK
if: steps.sdk-cache.outputs.cache-hit != 'true'
shell: bash
run: python eng/graphics/build.py ${{ inputs.component }} --rid ${{ inputs.rid }} --jobs 2
- name: Verify installed SDK
shell: bash
run: python eng/graphics/verify-sdk.py artifacts/graphics-sdk/${{ inputs.rid }}/${{ inputs.component }} --component ${{ inputs.component }} --rid ${{ inputs.rid }}
# Save immediately after verification: a later probe failure must not throw
# away a successful expensive dependency build. Hits still run all probes.
- name: Save verified graphics SDK
if: steps.sdk-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
with:
path: artifacts/graphics-sdk/${{ inputs.rid }}/${{ inputs.component }}
key: ${{ steps.sdk-identity.outputs.key }}
64 changes: 64 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ jobs:
node-version: 22
- name: Restore
run: dotnet restore WebScene.sln
- name: Verify immutable GPU compatibility fixture
run: python tests/GraphicsCompatibility/prepare-kestrel.py
- name: Graphics evidence boundary checks
run: python -m unittest discover -s eng/graphics/tests -v
- name: Graphics reference workload and trace checks
run: node --test tests/GraphicsCompatibility/reference-tests.mjs
- name: Build Release
run: dotnet build WebScene.sln -c Release --no-restore
- name: Portable Core contracts
Expand Down Expand Up @@ -74,6 +80,64 @@ jobs:
-B artifacts/native-engine-portability
-DCMAKE_BUILD_TYPE=Release
-DWEBSCENE_NATIVE_ENGINE_ENABLE_V8=OFF
-DWEBSCENE_NATIVE_ENGINE_ENABLE_MEDIA=ON
-DWEBSCENE_NATIVE_ENGINE_CERTIFICATION=OFF
- name: Compile native C++ portability target
run: cmake --build artifacts/native-engine-portability --config Release --parallel

- name: Native media decode contracts
run: ctest --test-dir artifacts/native-engine-portability -C Release -R "webscene_(media_decode|audio_graph)_tests" --output-on-failure

native-aot:
name: NativeAOT contracts ${{ matrix.rid }} Avalonia ${{ matrix.avalonia }}
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
rid: osx-arm64
executable: WebScene.GpuHost.Probe
avalonia: 11
avalonia12Sample: false
- os: windows-latest
rid: win-x64
executable: WebScene.GpuHost.Probe.exe
avalonia: 11
avalonia12Sample: false
- os: macos-latest
rid: osx-arm64
executable: WebScene.GpuHost.Probe
avalonia: 12
avalonia12Sample: true
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v5
with:
global-json-file: global.json
- name: Publish NativeAOT with reflection JSON disabled
shell: bash
run: |
set -o pipefail
dotnet publish experiments/WebScene.GpuHost.Probe -c Release -r '${{ matrix.rid }}' \
-p:PublishAot=true -p:JsonSerializerIsReflectionEnabledByDefault=false \
-p:WebSceneAvalonia12Sample=${{ matrix.avalonia12Sample }} \
-o artifacts/aot-contracts 2>&1 | tee artifacts-aot-publish.log
python scripts/verify-aot-warnings.py artifacts-aot-publish.log
- name: Publish Aureon NativeAOT sample
if: matrix.avalonia == 12
shell: bash
run: |
set -o pipefail
dotnet publish experiments/WebScene.AureonStudio -c Release -r '${{ matrix.rid }}' \
-p:PublishAot=true -p:WebSceneAvalonia12Sample=true \
-o artifacts/aureon-aot 2>&1 | tee artifacts-aureon-publish.log
python scripts/verify-aot-warnings.py artifacts-aureon-publish.log
- name: Exercise checkpoint and archive contracts in native executable
shell: bash
run: ./artifacts/aot-contracts/${{ matrix.executable }} --aot-serialization-probe
- uses: actions/upload-artifact@v4
if: always()
with:
name: aot-contracts-${{ matrix.rid }}-avalonia-${{ matrix.avalonia }}
path: artifacts*-publish.log
120 changes: 120 additions & 0 deletions .github/workflows/graphics-prerequisites.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: GPU prerequisite hardware evidence

on:
workflow_dispatch:
inputs:
rid:
description: Native GPU runner profile (runner must be enrolled with these labels)
required: true
type: choice
options: [win-x64, osx-arm64, linux-x64]

permissions:
contents: read

concurrency:
group: gpu-prerequisites-${{ inputs.rid }}
cancel-in-progress: false

jobs:
prerequisites:
# These labels are an enrollment contract, not evidence that runners already exist.
# No untrusted pull_request trigger on persistent hardware machines.
runs-on: [self-hosted, webscene-gpu, '${{ inputs.rid }}']
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Initialize Windows x64 compiler environment
if: inputs.rid == 'win-x64'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$before = @{}
Get-ChildItem Env: | ForEach-Object { $before[$_.Name] = $_.Value }
$vswhere = Join-Path ${env:ProgramFiles(x86)} 'Microsoft Visual Studio/Installer/vswhere.exe'
if (!(Test-Path $vswhere)) { throw 'Visual Studio Installer/vswhere is required.' }
$installation = & $vswhere -latest -version '[17.1,)' -products '*' -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPath
if ($LASTEXITCODE -ne 0 -or !$installation) { throw 'An x64 Visual C++ toolchain is required.' }
$developerShell = Join-Path $installation 'Common7/Tools/Launch-VsDevShell.ps1'
& $developerShell -Arch amd64 -HostArch amd64 -SkipAutomaticLocation
if (!(Get-Command cl.exe -ErrorAction SilentlyContinue)) { throw 'Visual C++ initialization did not expose cl.exe.' }
if ($env:VSCMD_ARG_TGT_ARCH -ne 'x64') { throw 'Expected an x64 compiler target.' }
Get-ChildItem Env: | Where-Object { !$before.ContainsKey($_.Name) -or $before[$_.Name] -ne $_.Value } | ForEach-Object {
if ($_.Value.Contains("`n") -or $_.Value.Contains("`r")) { throw "Unexpected multiline environment variable: $($_.Name)" }
"$($_.Name)=$($_.Value)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
}
- name: Verify Kestrel input and evidence boundaries
id: verified-inputs
run: |
python tests/GraphicsCompatibility/prepare-kestrel.py
python -m unittest discover -s eng/graphics/tests -v
node --test tests/GraphicsCompatibility/reference-tests.mjs
- name: Verify enrolled Windows SDK prerequisite
if: inputs.rid == 'win-x64'
shell: pwsh
run: |
# Persistent runners are provisioned by their administrator; do not install
# machine-wide SDKs implicitly during a hardware qualification run.
$sdkRoot = Join-Path ${env:ProgramFiles(x86)} 'Windows Kits/10'
$sdkVersion = '10.0.28000.0'
foreach ($relative in @(
"Include/$sdkVersion/um/Windows.h",
"Include/$sdkVersion/shared/sdkddkver.h",
"Include/$sdkVersion/ucrt/stdio.h",
"Lib/$sdkVersion/um/x86/kernel32.lib",
"Lib/$sdkVersion/um/x64/kernel32.lib",
"Lib/$sdkVersion/ucrt/x86/ucrt.lib",
"Lib/$sdkVersion/ucrt/x64/ucrt.lib",
"bin/$sdkVersion/x64/rc.exe"
)) {
if (!(Test-Path (Join-Path $sdkRoot $relative))) {
throw "Missing $relative. Provision this runner using eng/graphics/install-windows-sdk.ps1 before qualification."
}
}
- name: Build pinned Dawn
run: python eng/graphics/build.py dawn --rid ${{ inputs.rid }}
- name: Build pinned ANGLE
run: python eng/graphics/build.py angle --rid ${{ inputs.rid }}
- name: Verify SDK relocation and mismatch rejection
run: python eng/graphics/check-sdk-integrity.py --sdk artifacts/graphics-sdk/${{ inputs.rid }}/dawn --rid ${{ inputs.rid }} --output artifacts/graphics-evidence/sdk-integrity.json
- name: Configure and build hardware probes
run: |
cmake -S eng/graphics/probes -B artifacts/graphics-probes -G Ninja -DCMAKE_BUILD_TYPE=Release -DWEBSCENE_GRAPHICS_SDK_ROOT=${{ github.workspace }}/artifacts/graphics-sdk/${{ inputs.rid }}
cmake --build artifacts/graphics-probes --parallel 6
- name: Capture real hardware results
# Do not use CTest's successful process exit when all hardware tests were skipped.
# The evidence runner exits 77 on unavailable hardware, leaving this job non-successful.
run: python eng/graphics/run-probes.py --rid ${{ inputs.rid }} --sdk artifacts/graphics-sdk/${{ inputs.rid }} --probes artifacts/graphics-probes --output artifacts/graphics-evidence/native-probes.json
- name: Capture unchanged Kestrel hardware Chrome references
# Independent evidence remains useful after native build/probe failure.
# The earlier failure still fails the job; this does not waive a GPU gate.
if: ${{ !cancelled() && steps.verified-inputs.outcome == 'success' }}
# Requires an interactive desktop and installed Chrome (or CHROME_BIN).
# Unknown Chrome revisions retain traces but cannot qualify presentation timing.
run: node tests/GraphicsCompatibility/capture-chrome-reference.mjs --output artifacts/chrome-reference
- uses: actions/upload-artifact@v4
if: always()
with:
name: graphics-prerequisites-${{ inputs.rid }}
path: |
artifacts/graphics-evidence/
artifacts/graphics-sdk/**/webscene-graphics-package.json
artifacts/graphics-sdk/**/build-info/
if-no-files-found: warn
- uses: actions/upload-artifact@v4
if: always()
with:
name: graphics-chrome-reference-${{ inputs.rid }}
path: |
artifacts/chrome-reference/reference.json
artifacts/chrome-reference/*.png
artifacts/chrome-reference/*.json.gz
compression-level: 0
retention-days: 90
if-no-files-found: warn
72 changes: 72 additions & 0 deletions .github/workflows/graphics-sdk-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Graphics SDK build validation

on:
pull_request:
paths:
- 'eng/graphics/**'
- '.github/actions/graphics-sdk/**'
- '.github/workflows/graphics-sdk-build.yml'
workflow_dispatch:
inputs:
clean:
description: Rebuild SDKs without restoring the cache
type: boolean
default: false
push:
branches: [main]
paths:
- 'eng/graphics/**'
- '.github/actions/graphics-sdk/**'
- '.github/workflows/graphics-sdk-build.yml'

permissions:
contents: read

concurrency:
group: graphics-sdk-build-${{ github.event.pull_request.number || github.ref }}
# Preserve evidence from long clean SDK builds; the latest pending commit
# runs after the active build completes.
cancel-in-progress: false

jobs:
build:
name: Build ${{ matrix.component }} ${{ matrix.rid }} (no hardware qualification)
strategy:
fail-fast: false
max-parallel: 4
matrix:
component: [dawn, angle]
include:
- rid: win-x64
os: windows-2022
- rid: linux-x64
os: ubuntu-22.04
rid: [win-x64, linux-x64]
runs-on: ${{ matrix.os }}
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/graphics-sdk
with:
rid: ${{ matrix.rid }}
component: ${{ matrix.component }}
clean: ${{ inputs.clean || false }}
- name: Compile and link diagnostic probe
run: |
cmake -S eng/graphics/probes -B artifacts/graphics-probes -G Ninja -DCMAKE_BUILD_TYPE=Release -DWEBSCENE_GRAPHICS_COMPONENTS=${{ matrix.component }} -DWEBSCENE_GRAPHICS_SDK_ROOT=${{ github.workspace }}/artifacts/graphics-sdk/${{ matrix.rid }}
cmake --build artifacts/graphics-probes --parallel 2
- name: Verify shared-handle ownership (no GPU required)
run: ctest --test-dir artifacts/graphics-probes -R "^webscene_nt_handle_tests$" --output-on-failure
# Hosted compilation proves no hardware, pixels, driver support, or conformance.
# GPU execution belongs to the dedicated graphics-prerequisites hardware workflow.
- uses: actions/upload-artifact@v4
if: always()
with:
name: graphics-build-only-${{ matrix.component }}-${{ matrix.rid }}
path: |
artifacts/graphics-sdk/${{ matrix.rid }}/${{ matrix.component }}/
artifacts/graphics-probes/CMakeCache.txt
retention-days: 14
if-no-files-found: warn
# ANGLE installs .clang-format files covered by the sealed SDK inventory.
include-hidden-files: true
Loading
Loading