- sparse_conv_metal: fused gather-GEMM kernel, parity 8e-4 vs stock;
honest verdict: stock chunking already bounds memory at decoder scale
(1.97GB synthetic peak) and beats the scalar kernel on speed — kept as
TRELLIS2_METAL_SPCONV=1 opt-in + upstream reference, NOT default.
- _attempt_schedule: preferred=vertex now runs the vertex baker (was
silently falling through to the 5h+ pure-python kdtree grind).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replaces the torch CPU sampler + per-forward adapter bounces: one
conversion per stage boundary, batched dense CFG, once-per-stage
concat_cond, one eval/step. Env-gated (TRELLIS2_MLX_SAMPLER=0 reverts;
TRELLIS2_MLX_COMPILE=1 compiles the step forward). Parity: raw mesh
within 0.03% of torch-sampler baseline at seed 42. Sampling 56.8->54.4s
(m3ultra) — honest ~4%; the win is architectural (stable shapes for
compile, no host round-trips) not headline speed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>