effectcraft/crates
Brandon Thomas 6eedf8e2c5 GPU on wgpu's OpenGL backend: renderable depth target, portable shaders, serialised tests
FreeBSD's CI VM (Mesa llvmpipe over GL) failed 22 effectcraft-gpu tests:

- Advanced 3D's camera-depth target was R32Float, which GLES can't render to without
  EXT_color_buffer_float: create_render_pipeline failed validation (release builds only log
  that and draw nothing). The target is now R32Uint holding the f32 bits (renderable on every
  backend, lossless), and GpuContext checks the adapter's format features (render attachment,
  blendable colour) and independent blending up front; when they're missing the render
  pipelines are never built and Advanced 3D renders on the CPU.
- Signed `%` in the shaders: naga emits GLSL `%`, undefined for negative operands, which broke
  the VR effects' horizontal wrap and Cell Pattern's tiling. A shared `imod` never takes `%` of
  a negative number.
- asin/acos: Mesa's are coarse approximations (~1e-4 rad), visible in every lens/sphere/cylinder
  mapping. `asin_p`/`acos_p` (Cephes' asinf polynomial) are f32-accurate on every backend.
- "Could not lock adapter context": the GL backend has one context lock per adapter with a
  timeout, so tests driving devices concurrently panic. Every gpu test helper that hands out a
  device holds one process-wide lock for the calling test; ui_web_job_gpu's two device tests
  share a lock too.
- On GL, up to 1 % of pixels may flip across a decision boundary (division through a
  reciprocal, unfused fma); the GPU-vs-CPU comparisons allow that there only.

Also adds the FreeBSD workflow (from the FreeBSD CI PR) so this branch is checked there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 10:08:21 -04:00
..
automation M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
av1enc Never crash: AV1 encoder without expect()/unreachable!() 2026-10-04 13:22:59 -04:00
color Never crash: deny panic lints in the already-clean crates and apps 2026-10-04 14:52:39 -04:00
effects M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
engine M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
export Never crash: deny panic lints in the already-clean crates and apps 2026-10-04 14:52:39 -04:00
expr Merge pull request #6 from storybored379/pr/expr-runtime-stack-leak 2026-10-05 12:10:53 +07:00
geom Never crash: deny panic lints in the already-clean crates and apps 2026-10-04 14:52:39 -04:00
gpu GPU on wgpu's OpenGL backend: renderable depth target, portable shaders, serialised tests 2026-10-05 10:08:21 -04:00
hevcenc Never crash: HEVC encoder without expect()/unreachable!() 2026-10-04 13:23:03 -04:00
host M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
interchange Never crash: reject timeline documents nested too deeply 2026-10-04 14:05:57 -04:00
keyframe Keyframes: a Hold key no longer eases the motion into it 2026-10-04 01:17:34 -07:00
lottie Never crash: Lottie enum values can't overflow 2026-10-04 13:24:14 -04:00
media Merge pull request #17 from storytold/pr/never-crash-media 2026-10-04 15:29:59 -04:00
model Never crash: deny panic lints in the already-clean crates and apps 2026-10-04 14:52:39 -04:00
opusenc Never crash: Opus and VP9 encoders without expect() 2026-10-04 13:23:06 -04:00
path M13.30: the ArtCraft mark in the Tools bar, About and Home; VectorCraft sibling link 2026-10-05 12:49:47 +07:00
pdf Never crash: PostScript radix numbers outside 2..=36 2026-10-04 14:21:14 -04:00
plugin Never crash: deny panic lints in the already-clean crates and apps 2026-10-04 14:52:39 -04:00
project M3.9: an edit that only allocates ids still counts as a change 2026-10-05 06:43:10 +07:00
psd Never crash: bound PSD descriptor nesting 2026-10-04 14:05:55 -04:00
raster Never crash: raster and path crates without expect()/unwrap()/unreachable!() 2026-10-04 13:41:09 -04:00
render M4.14: content-keyed RAM preview frames; proxies in the disk cache's content key 2026-10-05 14:39:17 +07:00
script Merge pull request #10 from storybored379/pr/spatial-tangent-getter-names 2026-10-05 12:11:18 +07:00
segment M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
svg Never crash: reject SVGs nested too deeply 2026-10-04 14:05:58 -04:00
text Never crash: text layout and font resolution without expect() 2026-10-04 13:27:38 -04:00
time Never crash: Tick and timecode arithmetic can't overflow or divide by zero 2026-10-04 14:20:33 -04:00
track M13.35: Roto Brush trained model — swappable segment module, MobileSAM in pure Rust 2026-10-05 17:55:02 +07:00
ui-egui GPU on wgpu's OpenGL backend: renderable depth target, portable shaders, serialised tests 2026-10-05 10:08:21 -04:00
vp9enc Never crash: Opus and VP9 encoders without expect() 2026-10-04 13:23:06 -04:00