dcbbc77038
This is a from-scratch initial commit on a fresh .git. The original
scaffold commit (7510b56) and the earlier session's working-tree
docs were lost in a 2026-05-18 10:25 working-tree wipe; the corrupted
.git is preserved at .git-broken-2026-05-18/ (gitignored) for
forensic inspection.
Scope re-anchored from Path A (custom VPU firmware on VC7 scalar
cores; blocked by BCM2712 silicon-RoT mask-ROM signature check)
to Path B (QPU compute kernels via Mesa v3d / Vulkan compute or
direct DRM, on stock signed Pi 5 / CM5). See README.md and
docs/phase0.md for the substrate audit that closed Path A.
Phases closed:
Phase 0 — substrate audit; Path A blocked, Path B open;
codec-back-end-fits-QPU finding (docs/phase0.md)
Phase 1 — first kernel locked (VP9 / AV1 8x8 inverse DCT) with
publish-before-measure R = M2/M3 decision rules
(docs/phase1.md)
Phase 2 — reference impls mapped; FFmpeg n7.1.3 source vendored
under external/ffmpeg-snapshot/ (PROVENANCE.md pins
commit f46e514 + per-file SHA-256s) (docs/phase2.md)
Phase 3 — real baseline measurements on hertz (docs/phase3.md):
M1 bit-exact 100.0000 % (10000/10000)
M3 NEON IDCT8 single 8.171 Mblock/s (122.4 ns/block)
M5a empty Vulkan submit 22.66 us
M5b 1-WG noop dispatch 55.60 us
M5 delta 32.95 us/dispatch
=> per-dispatch overhead is ~455x per-NEON-block cost;
Phase 4 must batch at frame level or close to it.
Build harness in place: CMakeLists.txt + tests/{bench_neon_idct.c,
vp9_idct8_ref.c, bench_vulkan_dispatch.c, shaders/noop.comp} +
external/ffmpeg-snapshot/config.h shim (7 defines + EXTERN_ASM).
Builds clean on Debian Trixie aarch64 with cmake 3.31, ninja 1.12,
libvulkan-dev 1.4.309, glslang-tools 15.1.0. Vendored FFmpeg .S
assembles via the config.h shim.
Next: Phase 4 (plan first QPU IDCT kernel under the M5 batching
constraint) -> Phase 5 second-model review -> Phase 6 implement.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
28 lines
1.0 KiB
C
28 lines
1.0 KiB
C
/*
|
|
* Minimal config.h shim for assembling the vendored FFmpeg .S files
|
|
* outside the FFmpeg build tree.
|
|
*
|
|
* The vendored .S files (vp9itxfm_neon.S, neon.S, asm.S) reference
|
|
* exactly 7 preprocessor symbols, enumerated below. Values target
|
|
* aarch64-Linux with modern binutils (≥2.41) — matches the Debian
|
|
* Trixie environment on hertz (the project's dev host).
|
|
*
|
|
* See ../../docs/phase2.md §5 for the source-copy rationale and
|
|
* PROVENANCE.md for the upstream pin (FFmpeg n7.1.3).
|
|
*/
|
|
#pragma once
|
|
|
|
#define HAVE_AS_FUNC 1
|
|
#define HAVE_AS_ARCH_DIRECTIVE 1
|
|
#define AS_ARCH_LEVEL armv8-a
|
|
#define HAVE_AS_ARCHEXT_DOTPROD_DIRECTIVE 1
|
|
#define HAVE_AS_ARCHEXT_I8MM_DIRECTIVE 1
|
|
#define HAVE_SECTION_DATA_REL_RO 1
|
|
#define CONFIG_PIC 1
|
|
|
|
/* Symbol prefix for exported labels. On ELF/Linux this is empty
|
|
* (no leading underscore). FFmpeg's configure script normally
|
|
* defines this in the generated config.h; we replicate the
|
|
* Linux-target value here. */
|
|
#define EXTERN_ASM
|