Files
AnyPS5/docs/dev/debt/libSceSdma.md
T
hypermoist 2d8fd9c585 Merge remote-tracking branch 'upstream/main' into feat/sdma-host-copies
# Conflicts:
#	core/libs/prx/libSceSdma/Export.cpp
#	docs/dev/debt/libSceSdma.md
2026-10-30 16:28:44 +13:00

1.9 KiB

libSceSdma technical debt

Unknown function info

  • libSceSdma pending exports - sceSdmaCopyTiled, sceSdmaCopyTiledNonBlocking, sceSdmaCopyWindowT2T, sceSdmaCopyWindowT2TNonBlocking, sceSdmaCopyWindowTiled and sceSdmaCopyWindowTiledNonBlocking are listed in the PS5 3.20 export table. Their signatures and behaviour are unverified; the declarations use the no-parameter unknown-signature convention and throw through NotImplemented_nid_no_patch.

  • _sceSdmaNop — NID vPP6vKHY8Tg — its name and NID occur in the PS5 3.20 libSceSdma import-stub list. The signature and behavior are unverified; the declaration in Export.cpp uses the no-parameter unknown-signature convention and throws through NotImplemented_nid_no_patch, for import resolution only.

Functional

  • libSceSdma: the behaviour of Open, Close, the linear, fill and L2L window copies, fences and queue mode is not measured on a console. Copies run on the CPU when the queue is kicked, so a blocking call returns after they finish and the ring and fence area of the working buffer are never written. The order of source and destination and the fill size bit are read through AMD's public SDMA packet layouts. A fill with a pattern whose bytes differ throws in the default fill size and on unaligned ranges, and window fields outside their packet widths, commands larger than the ring and cancelling a queue of more than 65535 dwords throw: pending dwords are counted in 16 bits, so the ring checks see the wrapped count and a cancel would rewind only that many. Copies read guest memory directly, without waiting for GPU work that writes the source.