4.8 KiB
4.8 KiB
Project technical debt
Build
- Building on Windows requires a specific version of mingw - MinGW-w64 GCC 15.2.0 (
winlibs-gcc15,x86_64-ucrt-posix-seh) - Even compiled prx libraries on Windows require nearby (static linking of these dependencies causes conflicts):
- libgcc_s_seh-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
Silent stubs
Throughout the project, every function at every stage either does exactly what it's supposed to or throws an exception. Everywhere... except:
- libSceSaveDataDialog.native
- libSceCommonDialog
- The shader recompiler skips baryctric coordinates (is not even passed to SpirvTargetOptions at row 212).
Unknown function info
- AMPR WaitOnAddress / WaitOnCounter (libSceAmpr) - compare encoding assumed to be the WAIT_REG_MEM one (0 always, 1 <, 2 <=, 3 ==, 4 !=, 5 >=, 6 >)
- sceAgcSetSubmitMode (libSceAgc) - mode values unknown; only 0 is accepted
- zARR5aCmkoY (libSceAgc) - unknown name, signature
- qj7QZpgr9Uw (libSceAgc) - unknown name
- fd5Bp5tGTgo (libSceAgc) - unknown name
- dolOmWH+huQ (libSceAgc) - unknown name
- V++UgBtQhn0 (libSceAgc) - unknown name
- gQkqkLttcpw (libSceAgc) - unknown name, signature
- sceKernelInternalMemoryGetModuleSegmentInfo (libkernel) - unknown signature
- sceLibcInternalBacktraceForGame (libSceLibcInternal, implemented in libc) - unknown signature
- sceLibcInternalHeapErrorReportForGame (libSceLibcInternal, implemented in libc) - unknown signature
- __progname (libkernel) - unknown data export
Functional
- Shader recompilation currently occurs right before it was transferred to Vulkan with caching, but should be moved to the relinker stage. For this purpose, shader/recompiler was written completely independently from libs/prx.
- The executable file that relinker generates opens the console when launched, which is inconvenient for playability.
- libSceJpegEnc encodes 4:2:2 sampling requests with 4:2:0 chroma subsampling, and grayscale requests as a 3-component JPEG with neutral chroma instead of a single-component one: the JPEG encoder (stb) only produces 3-component 4:2:0 and 4:4:4 images.
- Relinker doesn't add an icon to the generated executable. This should be done without adding dependencies (only standard).
--to-inteldoes not lower MONITORX/MWAITX/CLZERO/RDPRU/MCOMMIT; the matcher fails the relink instead. The SHA-1 instructions of SHA-NI (SHA1RNDS4, SHA1NEXTE, SHA1MSG1, SHA1MSG2) are not substituted, and SHA-256 instructions with a memory operand fail the relink.- The length-changing path of the instruction rewriter is not used by the converter: it does not adjust VEX/0F38/0F3A RIP-relative operands, data-to-code references (relocations, FDEs, jump tables) or segment sizes, so every substitution keeps the instruction length.
- The Linux placement of the
--to-intelstubs in the ELF patcher is covered only by a synthetic test. - The libc SSE4a trap emulation on Windows is superseded by
--to-inteland remains only until the relinked title has been verified without it. --to-intelguest module trampolines are covered only by a synthetic relinker test; no game title has been verified with them on Linux or Windows.- libScePlayerInvitationDialog simulates dialog completion without displaying UI or sending invitations; its parameter ABI remains unverified.