Files
AnyPS5/docs/dev/debt/libSceAudioPropagation.md
T
Yunus Shaikh 19cdaa19aa fix(libSceAudioPropagation): report path calculation as not implemented
After its handle and argument errors, sceAudioPropagationSourceCalculateAudioPaths threw a bare runtime_error for every valid call, so progress.py counted it as done. Propagation is not implemented, so the valid call now goes through NotImplemented_nid_no_patch. The early errors are unchanged.
2026-10-25 12:53:43 +00:00

3.0 KiB

libSceAudioPropagation technical debt

Silent stubs

  • libSceAudioPropagation lacks acoustic propagation: attributes have no effect, sources expose 36 initially empty, invalid path slots and no rays, rendering preserves the destination mix without adding path contributions, and allocated CPU work memory is mostly unused. Ray results and audio paths accept empty lists and throw otherwise; sceAudioPropagationSourceCalculateAudioPaths returns the initial native validation errors, then goes through NotImplemented_nid_no_patch, as propagation is not implemented. Room, portal, source and material handles are tracked, but destruction after their system is destroyed silently succeeds without native lifetime semantics being confirmed. Occlusion, reflections and reverb are absent.

Unknown function info

  • sceAudioPropagationSourceSetAudioPath: native evidence establishes a 64-bit path handle, a read-only 224-byte path description and a float gain. The four 48-byte points contain a room handle, gain and position; trailing eight-byte fields remain opaque. Updates copy the description and validate room ownership. Each source owns 36 initially invalid, empty slots, following public SharpProspero MaxPaths and SAROS's immediate lookup of slot 0. Allocation before calculation, the count of 36 and update validation precedence are inferred, not measured on a console. Native lookup error codes and their handle/null/index precedence are retained. Source/system destruction invalidates owned slots. Active nonempty path rendering still throws.
  • libSceAudioPropagation: system options use a recovered 56-byte record; the field at byte 24 and final eight bytes remain semantically unresolved. CPU memory requirements and option limits are recovered; GPU memory queries throw because their platform-specific runtime condition is unresolved. Descriptor validation, ray ownership and path generation are unimplemented. Native rendering accepts multiple mutable records; the host accepts public formats 0/1/2/4/5 (4/9/16/8/8 float channels), preserves the output mix without path contributions and clears the returned channel count; non-format-2 behavior remains unverified on a console. Frame capacity and source-count limits follow the recovered options. Other formats throw; native validation precedence remains unimplemented.
  • Initialization exports ending in Init, plus sceAudioPropagationSystem, are not exported: the SDK declares the helpers static inline and none is in the SDK stub library or the supplied native module. Query, locking, enumeration and report callback signatures are recovered; diagnostic layouts are recovered, but source attributes 2/3 and the constant-one fields still lack semantic names. The final system word and the fourth position/direction words have no confirmed semantics.