docs: architecture backlog for multi-SoC daedalus generalization #3

Merged
marfrit merged 1 commits from noether/architecture-backlog into main 2026-05-23 03:31:57 +00:00
Owner

Captures the design draft for generalizing daedalus across the fleet (Pi 5 + Pi 4 + RK3588 + Allwinner H6) while explicitly deferring the work until a second SoC creates a forcing function.

Document-only change: 1 file, +254 lines, no code touched.

TL;DR

  • The recipe layer (daedalus_recipe_dispatch_*) already abstracts substrate selection per kernel. Scaling to multi-SoC is a data extension (caps/<soc>.toml), not new architecture.
  • libva-v4l2-request-fourier already abstracts over any V4L2 stateless decoder node. The cross-SoC seam is at the V4L2 device level — where upstream put it.
  • Conceptual gap: hardware decoders are not made of shaders. rkvdec / Hantro / VPU8 / rpi-hevc-dec are bitstream-in NV12-out monoliths. A generalized daemon needs TWO backends: substrate-composed (today) and codec-level pass-through to vendor V4L2 decoders.
  • On RK3588 + every codec rkvdec supports, the daedalus daemon is bypassed entirely — libva talks to rkvdec directly. The daemon is only in the path where substrate composition is needed.

What the document contains

  • Current stack diagram (cycles 1–9 closed)
  • Per-SoC codec coverage matrix (Pi 5 / Pi 4 / RK3588 / Allwinner H6)
  • Refined directory sketch: /usr/lib/daedalus/{shaders,caps,plugins}
  • Illustrative bcm2712.toml + rk3588.toml caps files (TOML keys are TBD)
  • Where it gets hard (probing fragility, error fallback, stateful vs stateless, CI matrix, libva node selection)
  • Open questions (caps file location, daemon-plugins-or-not, per-process substrate, AV1 on Mali, deliverable shape)
  • Decision log

Forcing functions (when to revisit)

  • Pi 4 enters daily use with rpivid still unstable upstream → would require V3D4 substrate-composed path with its own caps file.
  • Third-party user needs to swap shaders for V3D firmware experiments without rebuilding.
  • An x86 / panvk host enters the fleet needing dynamic SoC discovery.

Until one of those fires: keep daedalus daemon Pi 5 specific. Pivot to bug-fix backlog (daedalus-v4l2 #145 daemon SEGV, #146 D-state) once cycle 9 deploys.

Refs reauktion/daedalus-v4l2#11 — substitution arc closing.

Captures the design draft for generalizing daedalus across the fleet (Pi 5 + Pi 4 + RK3588 + Allwinner H6) while explicitly **deferring** the work until a second SoC creates a forcing function. Document-only change: 1 file, +254 lines, no code touched. ## TL;DR - The recipe layer (`daedalus_recipe_dispatch_*`) already abstracts substrate selection per kernel. Scaling to multi-SoC is a data extension (`caps/<soc>.toml`), not new architecture. - libva-v4l2-request-fourier already abstracts over any V4L2 stateless decoder node. The cross-SoC seam is at the V4L2 device level — where upstream put it. - Conceptual gap: **hardware decoders are not made of shaders.** rkvdec / Hantro / VPU8 / rpi-hevc-dec are bitstream-in NV12-out monoliths. A generalized daemon needs TWO backends: substrate-composed (today) and codec-level pass-through to vendor V4L2 decoders. - On RK3588 + every codec rkvdec supports, the daedalus daemon is **bypassed entirely** — libva talks to rkvdec directly. The daemon is only in the path where substrate composition is needed. ## What the document contains - Current stack diagram (cycles 1–9 closed) - Per-SoC codec coverage matrix (Pi 5 / Pi 4 / RK3588 / Allwinner H6) - Refined directory sketch: `/usr/lib/daedalus/{shaders,caps,plugins}` - Illustrative `bcm2712.toml` + `rk3588.toml` caps files (TOML keys are TBD) - Where it gets hard (probing fragility, error fallback, stateful vs stateless, CI matrix, libva node selection) - Open questions (caps file location, daemon-plugins-or-not, per-process substrate, AV1 on Mali, deliverable shape) - Decision log ## Forcing functions (when to revisit) - Pi 4 enters daily use with rpivid still unstable upstream → would require V3D4 substrate-composed path with its own caps file. - Third-party user needs to swap shaders for V3D firmware experiments without rebuilding. - An x86 / panvk host enters the fleet needing dynamic SoC discovery. Until one of those fires: keep daedalus daemon Pi 5 specific. Pivot to bug-fix backlog (daedalus-v4l2 #145 daemon SEGV, #146 D-state) once cycle 9 deploys. Refs reauktion/daedalus-v4l2#11 — substitution arc closing.
marfrit added 1 commit 2026-05-23 03:05:56 +00:00
Captures the design draft for generalizing the daedalus daemon
across the fleet (Pi 5 + Pi 4 + RK3588 + Allwinner H6) while
explicitly DEFERRING the work until a second SoC creates a
forcing function.

Key conclusions:

  - The recipe layer in daedalus-fourier (daedalus_recipe_dispatch_*)
    already abstracts substrate selection per kernel; scaling to
    multi-SoC is a data extension (caps/<soc>.toml), not new
    architecture.

  - libva-v4l2-request-fourier already abstracts over any V4L2
    stateless decoder node; the cross-SoC seam is at the V4L2
    device level, where the upstream stateless API put it.

  - The conceptual gap is that hardware decoders are NOT made of
    shaders — rkvdec on RK3588, Hantro G1/G2, VPU8, rpi-hevc-dec
    on Pi 5 are bitstream-in NV12-out monoliths.  A generalized
    daemon needs TWO backends: substrate-composed (today's path)
    and codec-level pass-through to vendor V4L2 decoders.

  - On RK3588 + every codec rkvdec supports, the daedalus daemon
    is bypassed entirely — libva talks to rkvdec directly.  The
    daemon is only ever in the path on SoCs where at least one
    codec needs substrate composition.

Forcing functions for revisiting:

  - Pi 4 enters daily use with rpivid still unstable upstream
    (would require a V3D4 substrate-composed path with its own
    caps file and substrate verdicts).
  - A third-party user needs to swap shaders for V3D firmware
    experiments without rebuilding the daemon.
  - An x86 / panvk host enters the fleet needing dynamic SoC
    discovery rather than build-time pinning.

Until then: keep daedalus daemon Pi 5 specific, push cross-SoC
abstraction up to libva-v4l2-request-fourier (which already does
most of it).

Document covers:
  - current stack diagram (cycles 1-9 closed)
  - per-SoC codec coverage matrix
  - refined sketch: /usr/lib/daedalus/{shaders,caps,plugins}
  - illustrative bcm2712.toml + rk3588.toml caps files
  - where it gets hard (probing, fallback, stateful vs stateless,
    CI matrix, libva node selection)
  - open questions
  - decision log

No code changes; document only.

Refs reauktion/daedalus-v4l2#11 substitution arc closing; pivot
to bug-fix backlog (#145 daemon SEGV, #146 D-state) is the next
work block once cycle 9 deploys.
marfrit merged commit 7d6f106919 into main 2026-05-23 03:31:57 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: marfrit/daedalus-fourier#3