mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 08:33:12 -05:00
sceAgcDcbSetWorkloadStreamInactive and the three ACB workload builders (sceAgcAcbSetWorkloadsActive, sceAgcAcbSetWorkloadComplete, sceAgcAcbSetWorkloadStreamInactive) threw for every call, and sceAgcDcbSetWorkloadsActive read the workload ids before it checked the stream. The prosper console oracle (mattias800/prosper df074498, prosper/tests/data/console_oracle/agcbuild.golden.tsv lines 48-56 and 196-204) measured all six calls on a PS5 with three argument patterns and no workload stream registered: each returned null and wrote nothing. Pattern b passes stream 1 with the workload ids at address 2, so the console checks the stream before it reads the ids; here that call read address 2 and crashed. The four builders now return null for a null command buffer or a stream that is not registered, and still throw for a registered stream: the packet a registered stream gets is not measured, KytyPS5 has no body for them, and its IT_NOP layout for the DCB calls differs from the SET_UCONFIG_REG, WRITE_DATA and SET_WORKLOAD sequence OpenAGC (3c7e8072, src/agc_workload_packet.c) derives from the driver. The signatures are OpenAGC's DCB ones (src/game_compat.c), which says the ACB calls use the same driver builders. sceAgcDcbSetWorkloadsActive now checks the stream before the ids, as OpenAGC does. Recorded in docs/dev/debt/libSceAgc.md. agc_commands gains testWorkloadStreams: the three measured patterns for all six calls (null, buffer untouched), an exhausted and a null buffer, and a registered stream that throws without touching the buffer. On upstream/main it fails with "sceAgcDcbSetWorkloadStreamInactive not implemented", and the DCB active pattern b alone segfaults reading 0x2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>