# libSceFontGs.native technical debt ### Unknown function info - [sceFontGraphicsAgcSurfaceInit](../../../core/libs/prx/libSceFontGs.native/Export.cpp) (libSceFontGs.native) - still throws through `NotImplemented_nid_no_patch`. The libSceFontGsm.prx body (PPSA13197 unwrapped ELF, VA 0x39e0, size 0x324) validates surface format/attributes, writes a large AGC surface descriptor through a deep helper tree and returns 0x8a6cXXXX family errors; the full object layout it produces is not yet mapped, so no general implementation exists. - [sceFontSelectGraphicsAgc](../../../core/libs/prx/libSceFontGs.native/Export.cpp) (libSceFontGs.native) - throws for index 0 and returns `nullptr` for other indices. Verified bodies disagree on index 0: the 4.03 `libSceFontGs.native.sprx` body is `xor eax,eax; ret` (VA 0x250; SHA-256 `6c72c3ff5785d6bc68984de885d19a812f98626d45d2909794c31f489926101c`), while the newer `libSceFontGsm.prx` body returns a backend descriptor pointer for index 0 (`3890: 31 c0 / xor eax,eax; 85 ff / test edi,edi; 48 8d 0d 85 07 03 00 / lea rcx,[rip->0x34020]; 48 0f 44 c1 / cmove rax,rcx; c3 / ret`). The repository targets the 13.60 export table, and no 13.60 native body proving `nullptr` is available, so index 0 stays unimplemented until the descriptor table is mapped. The `nullptr` for index != 0 is verified by both bodies. - [FontAgcSurface producer](../../../core/libs/prx/libSceFontGs.native/Export.cpp) (libSceFontGs.native) - the object consumed by `sceFontGraphicsAgcDrawupFillTextureImage`/`sceFontGraphicsAgcDrawupFillTexturePattern` (tag byte 0x58 at +0x0d, mode at +0x0f, busy flag at +0x1c, fill object at +0x28, initialized flag at +0x38) is produced by an export outside the six bridge functions (the FontGsm `sceFontGraphicsAgcSurfaceInit` path does not set +0x38), so its producer is not yet identified; the layout is firmware-verified from the libSceFontGsm.prx bridge bodies. - [FontAgcSequence producer](../../../core/libs/prx/libSceFontGs.native/Export.cpp) (libSceFontGs.native) - the sequence object consumed by `sceFontGraphicsSequenceGetAgcCommandsForJump`/`...ForSubmit` (tag 0xf80 at +0x00, lock bit at +0x1b, commands descriptor at +0x28) is produced by `sceFontGraphicsStructureCanvasSequence` in libSceFont, which is itself still a stub; the descriptor layout (+0x28 first stream, +0x30 first size, +0x34 second count, +0x38 second stream) is firmware-verified. ### Notes - The four drawup/sequence [bridge exports](../../../core/libs/prx/libSceFontGs.native/Export.cpp) are transliterated from the `libSceFontGsm.prx` bodies (PPSA13197 `sce_module/`, SHA-256 `0c7ebf7f36aba76df09cba3509bf91e4a716c58963ce3f70198eeadec3527cd9`): `XKfh4naaANE` @0x3890 (select), `PwZEP8ZBK2Y` @0x38a0 (image), `z-m061OoEqQ` @0x3950 (pattern), `qEGeDXvL3fc` @0x39e0 (surface-init), `6zxuBlsGF0I` @0x3d10 (submit), `CeSI7C4ihjo` @0x3dc0 (jump). The image bridge head — `38a0: mov eax,0x80460002; test rdx,rdx; je; movq [rdx],0`, then `cmpb [rsi+0xd],0x58`, `cmpq [rsi],0`, `cmpl [rsi+0x38],1` — matches the implemented tag/head/initialized ordering. - The drawup [bridges](../../../core/libs/prx/libSceFontGs.native/Export.cpp) forward to `sceFontGraphicsDrawupFillTextureImageObject`/`...PatternObject` in `core/libs/prx/libSceFont/src/Graphics.cpp` through the same export boundary firmware uses (FontGsm PLT imports `CfkpBe2CqBQ`/`FL0unhGcFvI` from `libSceFont-module`). - Nothing in PPSA13197 imports the six [bridge](../../../core/libs/prx/libSceFontGs.native/Export.cpp) NIDs: they appear only in the bundled `libSceFontGsm.prx`'s own export table (module tag `#F` = `libSceFontGsm` itself; its import table lists only `libSceLibcInternal`, `libSceFont-module`, `libSceAgcDriver`, `libSceAgc`). No guest module binds them against `libSceFontGs.native` in this title; the exports are implemented here because `libSceFontGs.native` is the canonical provider module for these NIDs in the 13.60 inventory.