AnyPS5/docs/dev/debt/libSceUlt.md

2.4 KiB

libSceUlt technical debt

Unknown function info

  • libSceUlt ulthreads - _sceUltUlthreadRuntimeOptParamInitialize, _sceUltUlthreadRuntimeCreate and _sceUltUlthreadCreate are assumed to take the same arguments as the existing exports without the underscore, including the trailing build version. sceUltUlthreadTryJoin is assumed to return ULT_ERROR_BUSY while the ulthread runs, and sceUltUlthreadRuntimeDestroy to return ULT_ERROR_BUSY while an ulthread created on the runtime is not joined. Neither error has been confirmed on PS5 hardware
  • libSceUlt queues - the added sceUltQueuePop, sceUltQueueTryPush, sceUltQueueDestroy and sceUltQueueDataResourcePoolDestroy signatures are inferred from the existing push/pop and object APIs. Queue destruction is assumed to reject blocked callers with ULT_ERROR_BUSY and otherwise discard queued data; pool exhaustion returns ULT_ERROR_AGAIN. These rules, alignment checks and shared slot limits have not been confirmed on PS5 hardware or a title.
  • sceUltQueueCreate, sceUltQueueDataResourcePoolCreate - a non-null option parameter is accepted and ignored, as the other Ult create calls already do. OpenOrbis declares sceUltQueueOptParamInitialize and sceUltQueueDataResourcePoolOptParamInitialize without their structures; the PS Vita libult in RPCS3 defines both as a 16-byte reserved header followed by reserved fields, 128 bytes, with no settings, and fpPS4 keeps them as 128 opaque bytes. That the PS5 structures carry no settings either is assumed from these, not verified

Functional

  • libSceUlt queues use preallocated host storage instead of the supplied guest work area; its existing size formula and the 512-byte object layouts remain unverified. Waiting-queue pool thread limits and waiter priority ordering are not implemented. Finalization wakes blocked queue callers with ULT_ERROR_STATE.