mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -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>
74 lines
1.4 KiB
C++
74 lines
1.4 KiB
C++
#include <cstdint>
|
|
#include <cstddef>
|
|
#include "SceTypes.hpp"
|
|
#include "prx/libc/include/General.hpp"
|
|
|
|
extern "C" {
|
|
|
|
int APS5_VABI sceAgcAcbPushMarkerSpan() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcAcbSetMarkerSpan() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcAcquireMemSetEngine() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcDcbPushMarkerSpan() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcDcbSetMarkerSpan() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcGetDefaultCxStateFlat() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcGetSemaphoreLabel() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcSetAmmSemaphoreMemory() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcSetSemaphoreMemory() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcCbMemsetExclusive() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcGetGsPrimPayload() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcSetShaderInstrumentation() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
int APS5_VABI sceAgcGetShaderInstrumentation() {
|
|
NotImplemented_nid_no_patch(__func__);
|
|
return 0;
|
|
}
|
|
|
|
}
|