You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Breaking
Compute and fragment-feedback passes are now nominal library-managed contracts. Replace hand-built objects with isCompute: true or isPingPongShader: true with ComputePass, PingPongComputePass, or PingPongShaderPass. Custom RenderPass implementations remain supported.
Material resource descriptors, uniform tuples, error reports and history, and public context and scheduler snapshots are now readonly in both types and runtime behavior. Create a new value instead of mutating a returned snapshot: call defineMaterial(...) again for material changes, and copy an array with [...value] before making local edits.
Added
Added workgroupSize to ComputePass and PingPongComputePass for auto-dispatch when WGSL uses an override or non-literal @workgroup_size expression. Compute contract validation now ignores comments and accepts valid WGSL attribute ordering.
Svelte, React, and Vue entrypoints now export the color-pipeline and MotionGPUError* type families. Packed-consumer checks enforce the exact runtime and type-only declaration surface of all ten entrypoints and verify that each emitted JavaScript namespace matches it.
Changed
User-context namespace maps are frozen, null-prototype snapshots. Merge mode now merges only plain records and safely treats toString, constructor, __proto__, and symbols as ordinary namespaces.
Material declarations and resolved data now isolate every nested input, including storage-buffer initial bytes, without freezing caller-owned DOM or WebGPU objects. Runtime synchronization reads each material declaration once per cycle.
Scheduler diagnostics now keep colliding symbol labels distinct, expose deeply frozen snapshots, and accept profiling windows only as safe integers from 1 through 10,000 frames.
Fixed
Error history is now normalized, trimmed, and published only by the runtime as a deeply frozen snapshot, preventing duplicate callbacks or consumer mutation from changing later history in Svelte, React, or Vue.
Structured shader-compilation diagnostics now detach and deeply freeze their complete payload, so caller mutation cannot alter an attached error or a later report.
Multiple default error overlays now share one document-level owner stack. Only the top overlay traps focus or handles Escape; closing it transfers ownership to the previous overlay, and closing the last one restores focus and background state.
Texture and render-target formats are validated against the active device before allocation or pipeline creation. Built-in passes reject incompatible integer and depth slots with a Motion GPU diagnostic, while float32 sampling falls back to nearest filtering when float32-filterable is unavailable.
An explicit workgroupSize no longer hides an out-of-range literal or malformed @workgroup_size attribute; explicit dimensions override only valid non-literal WGSL expressions.
Pointer hooks now apply enabled and outside-tracking changes without remounting, keep the first pointer active until release, deduplicate bubbling canvas/window moves, and release capture during disable or unmount consistently across Svelte, React, and Vue.
Storage-buffer writes now copy their source bytes immediately. Reading a buffer flushes its queued writes in order first, and failed read prerequisites preserve writes for the normal frame flush without replaying failed operations in a later frame.
Texture loading now honors both cancellation signals, shares only bodyless GET/HEAD requests, isolates mutation requests, and clears controller loading state when lazy URL or options providers throw.