Files
AnyPS5/docs/dev/debt/libSceJobManager.md
T

1.9 KiB

libSceJobManager technical debt

Functional

  • JobManager compute sequences submit a separate label write and interrupt for every dispatch instead of batching and rewinding commands encoded ahead. Commands and labels live on the host heap; labels are written as 32 bits and have no GPU import, so the driver drains recorded work before each write. Required command storage uses fixed 104/148/32-byte estimates instead of measuring the current builders. A compute dispatch on a CPU sequence throws, and shutdown with outstanding compute-sequence work throws.
  • JobManager state lives on the host heap instead of the caller's block. Blocks smaller than 0x2d8 bytes throw. Worker spin and persistent-thread settings do not affect scheduling. Factory priorities above one, use after sequence destruction and shutdown from the manager's own worker throw. New API calls concurrent with shutdown are unverified.
  • JobManager initialization and profiling omit _sceUlobjmgrRegisterObject, _sceUlobjmgrUnregisterObject and the sceRazorCpuJobManager* calls. Initialization consequently returns zero instead of the registration result. Kernel resource-creation failures throw after cleanup; the original does not check every thread or attribute creation result. The sequence and factory vtable order has been checked against original modules, but no title that calls it has been run and PS5 timing equivalence is unmeasured.
  • JobManager node exhaustion intentionally lets Wait retire work without allocating a pool node. PPSA06888's original Wait allocates a node and spins until another sequence releases one; exhaustion without such a release stalls. Failed sequence opens consume their factory slot in both implementations.