Skia GM goldens: main vs PS6 (broken) vs PS7 (fixed)

Chromium repro check — linear-3801 screenshot crops

linear-3801 — SwiftShader Vulkan, GPU rasterization, Ganesh

linear-3801 before
linear-3801 after
Before: band boundaries smear over ~13px. After: 1px transitions — the original issue stays fixed with the PS7 colorizer.

What this page shows

EGL_PLATFORM=surfaceless LIBGL_ALWAYS_SOFTWARE=1 \
  dm --config gl 8888 -m hardstop_gradients_many gradients_color_space_many_stops \
     gradient_many_stops gradients_alpha_many_stops -w out

Diff vs raster ground truth

GM main PS6 (broken) PS7 (fixed)
hardstop_gradients_many 8.88% bad, maxDiff 242 6.21% bad, maxDiff 242 0.21% bad
gradients_color_space_many_stops 46.98% bad, maxDiff 127 20.00% bad, maxDiff 226 0.65% bad, maxDiff 30
gradient_many_stops 35.34% bad, maxDiff 100 20.61% bad, maxDiff 223 0 bad, maxDiff 12
gradients_alpha_many_stops 0 bad 0 bad 0 bad

"bad" = pixels with any channel differing from the raster render by more than 16/255. PS7's residual diffs are single-pixel hardstop boundary columns and F16 interpolation precision (OKLCH) — the same encoding tradeoff as Graphite's texture gradient path.

1. hardstop_gradients_many — 2..200 stops, one row per count

1000×2000; rows 65-100 (130-200 stops) hit the buffered colorizer

hardstop main
hardstop ps6
hardstop ps7
hardstop raster
The garbled bottom half on main is the bug this CL fixes: rows ≥ 65 push 130+ stops through the 256-texel bitmap colorizer, so bilinear sampling turns the hardstop rows into moire mush. PS6 failure mode: row 65 (130 stops) seeded the loopCount=8 cached effect; rows 66-100 reused it and clamp at stop index 130 — e.g. row 100 renders the last color for all t ≥ 0.65. PS7 matches raster row for row.

2. gradients_color_space_many_stops — 200 stops, OKLCH

500×500 hard-stop pattern, OKLCH interpolation

color_space main
color_space ps6
color_space ps7
color_space raster
This GM exists to exercise the GPU texture fallback with an exotic interpolation space. main: fully smeared. PS6: crisp up to stop 130, wrong beyond. PS7: maxDiff 30 vs raster (F16 precision).

3. gradient_many_stops — 100 evenly spaced stops

500×500

many_stops main
many_stops ps6
many_stops ps7
many_stops raster
PS7 is pixel-clean vs raster (maxDiff 12, zero pixels above threshold).

4. gradients_alpha_many_stops — alpha ramp

100×100

alpha main
alpha ps6
alpha ps7
alpha raster
Identical in all states (stop count below the analytic colorizer caps) — included as a no-regression control.