mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-24 10:10:05 -06:00
A media clip whose enabled standard effects all have a GPU implementation plans as a GPU layer carrying them (render::plan::LayerFx): parameters are evaluated on the CPU at the frame's time (render::gpufx::FxOp::eval, shared with the CPU path so both clamp hostile values identically), the source is drawn into an Rgba32Float working image at the size the CPU decodes it, the effects run as WGSL compute passes (gpu::fx, fx.wgsl) with the CPU reference's math, and the result is placed with Motion, opacity and blend mode as before. Layers without effects keep the single draw. GPU effects: Brightness & Contrast, ProcAmp, Tint, Black & White, Color Balance, Leave Color, Change to Color, Color Pass, Color Replace, Channel Mix, ASC CDL, Gamma Correction, Levels, Extract, Invert, Posterize, Alpha Adjust, Gaussian / Camera / Directional Blur (+ legacy aliases), Sharpen, Unsharp Mask, Crop, Edge Feather, Transform, H/V Flip, Mirror, Offset. Masked effects, opacity masks, non-finite parameters and minifying Transform/Crop zooms stay on the CPU. Devices without compute shaders run the effects on the CPU inside the compositor. Also fixes a debug-build overflow in Image::transformed for non-finite maps. Parity tests (exact f32 checks and composited plans), a golden test that plans effect chains as GPU layers, and the stack3-fx playback benchmark. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>