The four libSceFontGs NIDs have names that sceKernelDlsym resolved on PS4 firmware 10.71 and that hash to those NIDs. The two sequence queries' contract comes from the module's disassembly and matches the console runs posted on the pull request. Also brings the first libSceFont entry back under the 1000-character debt limit. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wm5hiXXANzPqoVGkSdDP4q
3.4 KiB
libSceFontGs technical debt
Unknown function info
-
sceFontGraphicsGnmSurfaceInit,sceFontSelectGraphicsGnmand four unnamed exports (libSceFontGs) - parameter lists, return types and behaviour are unverified, so every entry throws throughNotImplemented_nid_no_patch; the parameterlessintdeclarations only resolve imports. The PS5 13.60 export inventory names two of them and listsDI4LrTUrD04,NtbMKwRg6qg,UsBLoyXsQZsanduksHKVEsxu4without names; the pinned module map assigns all six tolibSceFontGs. The six exports shared withlibSceFontGs.nativeare left to that library. -
sceFontSelectGraphicsGnm, UsBLoyXsQZs and uksHKVEsxu4 (libSceFontGs) - still throw. Read from the disassembly of the PS4 libSceFontGs.sprx on firmware 10.71, not from a PS5 module and not measured on a console; it draws through Gnm, and the PS5 exports with these NIDs may take AGC descriptors instead.
sceFontSelectGraphicsGnmreturns a static table for selector 0 and null otherwise.UsBLoyXsQZsanduksHKVEsxu4clear the returned object pointer and wrapsceFontGraphicsDrawupFillTextureImageObjectandsceFontGraphicsDrawupFillTexturePatternObject. They take a texture descriptor that needs byte 0x0d = 0x48, a non-zero qword 0, dword 0x38 = 1 and dword 0x1c = 0, and pass its qword 0x28 and byte 0x0f. The image form also needs u and v of at least 0, non-negative extents, and u + du and v + dv of at most 16834.0. On success they set dword 0x10 of the new object to 1; a failed check returnsINVALID_PARAMETER. -
The four unnamed libSceFontGs exports (libSceFontGs) - still throw and keep their NID placeholders. On PS4 firmware 10.71,
sceKernelDlsymresolved these names at the module offsets of the four NIDs, and each name hashes to its NID:UsBLoyXsQZsissceFontGraphicsGnmDrawupFillTextureImage,uksHKVEsxu4issceFontGraphicsGnmDrawupFillTexturePattern,DI4LrTUrD04issceFontGraphicsSequenceGetGnmCommandsForSubmitandNtbMKwRg6qgissceFontGraphicsSequenceGetGnmCommandsForChain. These are PS4 names; the PS5 exports with these NIDs were not checked -
sceFontGraphicsSequenceGetGnmCommandsForSubmit and sceFontGraphicsSequenceGetGnmCommandsForChain (libSceFontGs) - still throw. Read from the disassembly of the same module and matched by single PS4 10.71 console runs on prepared sequences, without a GPU submission: both clear their outputs and return
INVALID_PARAMETERwhen an output pointer is null,0x8046009afor a null sequence or one without magic 0x0F80 at 0,0x804600b8when bit 0 of byte 0x1b is set andFATALwhen the inner pointer at 0x28 is null, and pass every error tosceFontGraphicsReportError.ForSubmit(sequence, pointer*, count*)returns the inner qword at 0x28 and dword at 0x30.ForChain(sequence, pointer*, count*, pointer2*, count2*)returns the qword at 0x28, the dword at 0x30 shifted right by 2, the qword at 0x38 and the dword at 0x34. The PS5 exports with these NIDs were not checked