mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-14 19:27:05 -04:00
The desktop app shares egui-wgpu's device, which had no uncaptured-error handler, so wgpu's default one panicked on an out-of-memory error on every frame thread; the panicking frame stayed "in progress" forever and never rendered again. The GPU frame budget was a fixed 1 GiB. - GpuContext::new logs uncaptured errors once its pipelines are built (errors while building them still panic there, which the app catches to fall back to CPU compositing). - Gpu::within_memory runs GPU work in an out-of-memory error scope; on an error the result is discarded and uploaded layers and pooled textures are freed. - Frame workers render each frame within it; out of memory, the frame renders on the CPU and the RAM preview keeps half as many GPU frames (down to 64 MiB), since wgpu can't tell how much video memory there is. - A frame whose render panics renders again on the CPU, or is released, so the viewer asks for it again. Tests: a_frame_whose_render_panics_is_released (failed before), running_out_of_video_memory_halves_the_gpu_frame_budget and within_memory_returns_the_work_when_there_is_room. Co-Authored-By: Claude Opus 5.5 <[email protected]>