mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-26 02:59:17 -06:00
The horizontal box pass gave each thread 16+ consecutive pixels to slide a running sum over, so a workgroup's threads read pixels 16 apart. On a Radeon 780M (DX12) that pass took 9-15x as long as the vertical one, and it sits under every GPU Gaussian and guided filter (NR, texture, dehaze, clarity/base). Each thread now sums one pixel's 2r+1 window: adjacent threads read adjacent pixels. Same 64x4 workgroups, parameters and bindings; box_v unchanged. Measured on the Radeon 780M (6000x4000): guided filter at sigma 1.75 828 -> 146 ms, colour-NR Gaussian 495 -> 104 ms. Full-size heavy-edit export of the CC0 Sony ARW: GPU 3.6-4.0 s -> 1.9-2.0 s (CPU 1.9-2.1 s); GPU-vs-CPU output distance unchanged. Adds gaussian_matches_cpu (GPU blur vs lightcraft_raster::blur::gaussian, 1-3 channels, partial workgroups, windows wider than the image) and per-pass rows to bench_kernels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>