mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-22 11:43:30 -05:00
A GPU render no longer hands back an image it cannot vouch for: - set the wgpu device-lost callback (wgpu never reports a lost device as an error, so a driver reset went unnoticed); readback waits with a timeout and checks the poll result and map callback instead of blocking forever - each render runs in OutOfMemory/Validation/Internal error scopes; errors fail that render (OOM and limit failures for that render only, device errors for the process) and it is redone on the CPU - every buffer is checked against the device limit when created (no validation error, no process-wide disable); LIGHTCRAFT_GPU_LIMITS=webgpu|<MiB> creates the device with lower limits to reproduce small adapters - the output buffer is cleared and the per-pixel kernel writes alpha 255: any unwritten pixel (work silently dropped, the issue's all-black export) fails the render; an all-black result is re-rendered on the CPU - renders submit per stage and every 16 M invocations, the per-pixel stage runs in ~4 MP bands: no long submission for a slow iGPU's watchdog to reset - ui.inspect perf.gpuReason / perf.gpuFallback, app.gpu reason/lastFallback, System Info and Settings say why the GPU is off (e.g. llvmpipe skipped) and why the last render fell back Tests: crates/gpu/tests/fallback.rs (limit, mid-render limit, validation error, dropped work, black photo), engine export falls back to the CPU image, banded 3000x2000 GPU/CPU equivalence. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>