Files
Chimera GFX release export a6037502d7
phase0-ci / build-and-audit (push) Successful in 2m14s
Publish Chimera GFX source
2026-09-03 03:27:14 +02:00

163 lines
12 KiB
Markdown

# Research record
Evidence cutoff: **2026-07-17**. Only primary upstream repositories and release
metadata are used below. Each statement is labelled `FACT`, `INFERENCE`, or
`UNKNOWN`.
## Evidence snapshot
### PS5 Payload SDK
- **FACT:** release `v0.41` maps to commit
`d2e2e585740362976a39fdd5ccf390f199a7bc37` and was published on
2026-06-28. [Release](https://github.com/ps5-payload-dev/sdk/releases/tag/v0.41)
- **FACT:** GitHub's `releases/latest` endpoint still resolved to v0.41 on
2026-07-17.
- **FACT:** GitHub release metadata reports `ps5-payload-sdk.zip` SHA-256
`ebfb0acb5260511951a80e17db41650c62d20a8caf8659a230b928dc85005984`.
- **FACT:** `sce_stubs/libSceGnmDriver.c` contains 158 export stubs, including
submit, draw, dispatch, compute-queue, embedded-shader, resource-registration,
and synchronization-related names. The file is assembly labels only and does
not establish C signatures. [Pinned stub](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/sce_stubs/libSceGnmDriver.c)
- **FACT:** the pinned SDK tree has no public GNM header and no GNM/GPU sample.
Its only GNM-named source files are the driver stub sets.
- **FACT:** the SDK's `hello_dlfcn` sample demonstrates `dlopen`, `dlsym`, and
`dlclose`; `hello_so` demonstrates shared-object linking/loading.
[Dynamic-loading sample](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/samples/hello_dlfcn/main.c)
- **FACT:** the pinned payload CRT calls `__patch_init` before `main`;
`crt/patch.c` writes process credential capability/attribute fields and
syscall-address bounds through SDK kernel read/write primitives.
[Pinned CRT startup](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/crt/crt.c)
[Pinned patch code](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/crt/patch.c)
- **FACT:** the pinned rtld's SPRX path can call
`sceKernelLoadStartModule`/`sceKernelStopUnloadModule`; the SPRX-specific
`init` and `fini` callbacks are empty in SDK source, but the system calls'
internal side effects are not established.
[Pinned SPRX loader](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/crt/rtld_sprx.c)
- **FACT:** `crt/Makefile` partially links 12 source objects into `crt1.o`; the
other six installed CRT-named files are empty archives at v0.41.
- **FACT:** the `prospero-clang` wrapper omits `crt1.o` for `-nostartfiles` and
omits libc/kernel/Sce default libraries for `-nodefaultlibs`. An offline
`-###` trace confirms both suppressions without producing an ELF.
- **FACT:** the SDK README points to external ELF-loader projects, but the exact
loader used for firmware 9.60 and its caller source are not part of the SDK or
the pinned local evidence set.
- **FACT:** unless otherwise marked, the SDK is GPLv3-or-later; FreeBSD headers
retain their BSD licenses. [SDK README](https://github.com/ps5-payload-dev/sdk/blob/d2e2e585740362976a39fdd5ccf390f199a7bc37/README.md)
### PS5 SDL2 fork
- **FACT:** inspected commit
`0baf4ac49382b537ba449901b5b6d0d189bb1fbb`, dated 2026-07-07.
[Commit](https://github.com/ps5-payload-dev/SDL/commit/0baf4ac49382b537ba449901b5b6d0d189bb1fbb)
- **FACT:** `src/video/ps5` implements a CPU framebuffer/VideoOut path and an
OSMesa context path. VideoOut registration and flip occur in the SDL backend,
not in `chimera-gfx` Phase 0. [PS5 video](https://github.com/ps5-payload-dev/SDL/blob/0baf4ac49382b537ba449901b5b6d0d189bb1fbb/src/video/ps5/SDL_ps5video.c)
- **FACT:** that backend owns direct-memory allocation, buffer tiling,
registration, flip submission, event waiting, and cleanup. Its public source
declares opaque VideoOut structures with `junk` fields; those layouts are not
copied into this project.
- **FACT:** SDL is Zlib-licensed at the pinned commit. The PacBrew recipe's
`license=('LGPL')` metadata conflicts with upstream `LICENSE.txt`; this
project follows the primary upstream license file.
- **FACT:** the native audio backend forces 48 kHz and uses AudioOut.
[PS5 audio](https://github.com/ps5-payload-dev/SDL/blob/0baf4ac49382b537ba449901b5b6d0d189bb1fbb/src/audio/ps5/SDL_ps5audio.c)
- **FACT:** native PS5 source directories exist for joystick, keyboard/IME,
filesystem, audio, video, and main; joystick code includes vibration and
light-bar operations. [PS5 joystick](https://github.com/ps5-payload-dev/SDL/blob/0baf4ac49382b537ba449901b5b6d0d189bb1fbb/src/joystick/ps5/SDL_ps5joystick.c)
### PacBrew
- **FACT:** inspected commit
`c2abcfcb60f569128abd0e8e70ad03a67bee5ea7`, dated 2026-07-07.
[Repository](https://github.com/ps5-payload-dev/pacbrew-repo/tree/c2abcfcb60f569128abd0e8e70ad03a67bee5ea7)
- **FACT:** the SDL2 recipe enables `SDL_OPENGL` and `SDL_LOADSO` but follows an
unpinned Git source with `sha256sums=('SKIP')`; this project therefore does
not treat that recipe as reproducible pinning.
[SDL2 recipe](https://github.com/ps5-payload-dev/pacbrew-repo/blob/c2abcfcb60f569128abd0e8e70ad03a67bee5ea7/SDL2/PKGBUILD)
- **FACT:** the Mesa 22.1.7 recipe enables OSMesa and gallium `swrast`, while
Vulkan, EGL, GBM, GLX, and GLES are disabled.
[Mesa recipe](https://github.com/ps5-payload-dev/pacbrew-repo/blob/c2abcfcb60f569128abd0e8e70ad03a67bee5ea7/mesa/PKGBUILD)
- **FACT:** package recipes exist for FBNeo, LakeSnes, Mednafen, DevilutionX,
and EDuke32. Their presence proves port work, not native GPU acceleration.
### RetroArch
- **FACT:** inspected commit
`32ee70cef5d4bdc32a4ca3b3b261209ce74b6e81`, dated 2026-07-16.
[Commit](https://github.com/libretro/RetroArch/commit/32ee70cef5d4bdc32a4ca3b3b261209ce74b6e81)
- **FACT:** the tree contains an SDL2 video driver and dynamic-library support
used for libretro cores. [SDL2 driver](https://github.com/libretro/RetroArch/blob/32ee70cef5d4bdc32a4ca3b3b261209ce74b6e81/gfx/drivers/sdl2_gfx.c)
- **FACT:** `Makefile.orbis`, `platform_orbis.c`, and an Orbis context driver are
available as PS4 integration references.
- **INFERENCE:** those PS4 files are useful for frontend lifecycle and build
concepts only. Their GPU assumptions must not be transferred to PS5.
### PS5 Linux
- **FACT:** inspected `ps5-linux-loader` commit
`8e7dd40df6144bed6194d165d48aa9468a7e13f3`, dated 2026-07-10.
[Repository](https://github.com/ps5-linux/ps5-linux-loader/tree/8e7dd40df6144bed6194d165d48aa9468a7e13f3)
- **FACT:** the loader targets a Linux kernel/initramfs boot flow and references
patched Linux components.
- **INFERENCE:** Linux amdgpu/RADV progress demonstrates that the hardware can
be driven under a custom Linux stack; it does not provide a native PS5
userland ABI or a reusable driver implementation for this project.
## ABI evidence table
| Class | Area | Primary evidence | What the evidence supports | Policy |
|---|---|---|---|---|
| FACT | Export names | SDK `libSceGnmDriver.c` | names exist in the v0.41 stub set | resolve only |
| FACT | Target ISA | public SDK toolchain | compile target is x86-64 PS5 userland | does not prove a function ABI |
| INFERENCE | Runtime module name | stub filename plus SDK `.sprx` convention | `libSceGnmDriver.sprx` is a candidate | load only behind gates |
| UNKNOWN | GNM signatures | no pinned public header | no callable prototype is proven | never call |
| UNKNOWN | GNM structures | no pinned public definition | no layout is proven | never construct |
| UNKNOWN | Firmware stability | no public compatibility matrix | 9.60 is a build identifier, not known compatible firmware | 9.60 build only; never infer compatibility |
| FACT | SDK payload startup | pinned `crt/crt.c` and `crt/patch.c` | pre-main kernel process-state writes occur | execution blocked |
| FACT/UNKNOWN | SPRX loader lifecycle | pinned rtld source/system-module implementation boundary | load/start and stop/unload are requested; system internals unknown | offline audit only |
| UNKNOWN | Embedded-shader semantics | export names only | no identifier or binary contract | never call |
| UNKNOWN | Submission/sync semantics | export names only | no ownership or timeout contract | never call |
| FACT | SDL2 public API | pinned SDL headers and `LICENSE.txt` | application API and Zlib terms at that commit | Phase-1 candidate only |
| FACT | Pinned SDL implementation | pinned PS5 SDL source | exact source-level VideoOut sequence at that commit | indirect through SDL only |
| UNKNOWN | SDL runtime behavior | no approved observation | firmware compatibility, timeout, and cleanup on PS5 | do not execute |
| FACT/UNKNOWN | minimal startup | compiler can omit stock CRT; exact loader caller is absent | source-level omission only, not safe return | do not build an ELF |
The complete Phase-0 lookup subset and per-symbol evidence are in
`manifests/ps5_gnm_symbols.json`. Symbol presence never upgrades ABI confidence.
## Unknowns register
| ID | Unknown | Why it blocks progress | Evidence needed |
|---|---|---|---|
| U-001 | exact signatures for every candidate GNM export | a wrong call can corrupt memory immediately | acceptable public header/source or independently validated ABI evidence |
| U-002 | command-buffer and packet formats | cannot safely build GPU work | public, licensed format evidence plus review |
| U-003 | GPU-visible memory allocation and cache rules | resources may alias or be incoherent | proven userland allocation contract |
| U-004 | resource registration ownership/lifetime | cleanup and crash safety are unknown | proven signatures and lifecycle evidence |
| U-005 | queue, fence, and timeout semantics | a wait or queue action could hang | bounded synchronization contract |
| U-006 | VideoOut/GNM buffer compatibility | presentation ownership is unknown | separate, minimal Phase-1 evidence |
| U-007 | embedded shader identifiers and binary contract | cannot safely bind a shader | licensed public evidence and test plan |
| U-008 | runtime module name across firmware | even discovery may fail | approved hardware observation per firmware |
| U-009 | system-module initialization side effects | SDK call chain is known; firmware module internals are not public | acceptable public evidence plus separately approved observation |
| U-010 | supported firmware set | no hardware evidence exists | one manually approved probe at a time |
| U-011 | bounded SDL flip-event wait | safe timeout/cleanup cannot be guaranteed | licensed bounded-wait change or proven supervisor semantics |
| U-012 | SDL cleanup after forced process termination | recovery behavior is unknown | approved observation or public lifecycle evidence |
| U-013 | kernelwrite-free PS5 payload startup | SDK v0.41 CRT patches kernel process state before `main`; Phase 0.5 cannot prove a safe replacement | exact pinned loader caller plus complete entry/return/cleanup/crash audit |
| U-014 | loader changes before `_start` | incoming args already expose kernel access, but the creation path is absent | exact loader source and configuration used for firmware 9.60 |
Unknowns are closed only by updating this file, the relevant ADR, and the
firmware matrix with a primary source or an explicitly approved observation.
## Assumptions register
Assumptions are design choices, not compatibility claims.
| ID | Assumption | Scope | Falsification or review trigger |
|---|---|---|---|
| A-001 | `libSceGnmDriver.sprx` is a useful runtime candidate | discovery-only probe | approved lookup fails or a public source establishes another module |
| A-002 | Mock limits of 4096 pixels and 16 live resources are sufficient for lifecycle tests | host tests only | an adapter test requires a larger deterministic bound |
| A-003 | RGBA8 is enough to stabilize the initial public upload contract | mock and software-frame planning | RetroArch/SDL integration proves another minimum format is required |
| A-004 | The existing SDL CPU-framebuffer route is safer than duplicating its opaque VideoOut layout | first Phase-1 design | official public VideoOut headers and bounded lifecycle become available |
| A-005 | 1920x1080 and one fixed frame minimize first-test state | disabled Phase-1 candidate | exact firmware/display evidence requires a different supported mode |
| A-006 | A firmware-specific rebuild must receive a new approval because its digest changes | all hardware candidates | never relaxed; enforced artifact-provenance rule |