Commit Graph
20967 Commits
Author SHA1 Message Date
Dean ac9a2a82dd Merge pull request #8780 from al3w0f205/test/pad-lightbar-and-motionsensor-validation
test(libScePad): verify scePadSetLightBar, scePadResetLightBar and motion sensor validation
2026-10-21 23:33:28 +13:00
Dean 9a8c2a1a05 Merge pull request #9003 from xdCloudy/feat/libSceNpManager-150-exports
feat(libSceNpManager): declare 150 pending exports
2026-10-21 23:32:40 +13:00
Dean f1f6626835 Merge pull request #8102 from Dragost/fix/libSceAvPlayer-sync-tolerance-and-eof-cleanup
fix(libSceAvPlayer): allow presenting video frames within sync tolerance
2026-10-21 23:31:28 +13:00
67cea1c314 test(agc): refuse a DB depth copy from a depth surface the device cannot sample
On a device that cannot sample two-sample depth, as lavapipe, the DB
depth copy case now also creates a two-sample surface and expects the
copy's sampling refusal, so that refusal is covered where it applies.
Devices that sample two-sample depth skip it.

Co-authored-by: simonbbby <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 10:27:24 +00:00
Yossi Yadgar e0df782d2c docs(debt): note where the NpCommon utilities and wrappers come from 2026-10-21 13:19:04 +03:00
Yossi Yadgar c6fa81f861 test(libSceNpCommon): cover the ID utilities, sync wrappers and clock 2026-10-21 13:18:57 +03:00
Yossi Yadgar affc646ae7 feat(libSceNpCommon): wrap the condition, join, clock and version calls 2026-10-21 13:18:57 +03:00
Yossi Yadgar 6fdfa33e03 feat(libSceNpCommon): wrap the libkernel mutex calls 2026-10-21 13:18:56 +03:00
Yossi Yadgar 683fc312fa feat(libSceNpCommon): compare, order and validate online IDs and NpIds 2026-10-21 13:18:56 +03:00
hypermistandClaude Opus 5.5 573113e8af feat(libSceAjm.native): build the WVorbis header packet
sceAjmDecWVorbisCreateHeaderPacket checks its 0x48-byte parameter as the
PS5 module does and writes a five-entry length table, a Vorbis
identification header from the parameters, an empty comment header and
the setup packet.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:18:21 +13:00
priyanshrv-netizenandClaude Opus 5.5 3b426ed9a4 test(libc): run CheckVacopy in guest_stdio_variadic
main never called it, so the _Vacopy checks were dropped from the
Release build and never ran.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-21 15:47:06 +05:30
Dean Galvin d8c89db757 Merge origin/main into PR 8561 2026-10-21 23:16:00 +13:00
Joey Fisher ed921e225f fix(agc): hash the pages of an import window instead of copying them
ImportWatched kept a copy of every non-zero page of the range being imported, so that a page the
write watch reported during the import could be told from one that still held its bytes. The copy
had the range's footprint: a first import of a 0.5-3 GiB guest heap held that much host memory
while it ran.

The window now keeps a 64-bit digest per 4 KiB page (four xxHash64 lanes) and compares digests:
8 bytes per page, 1/512 of the range. Same decision for every page, same reads of guest memory.

CheckImportWindowFootprint imports a 64 MiB watched range and requires the heap held during the
import to stay under 1 MiB. It failed with "held 64 MiB" before this change.
2026-10-21 04:13:49 -06:00
Joey Fisher db3af40970 fix(agc): wait for the idle flush's unit-shadow publish before returning
The idle flush (VulkanDevice::StoreIdleResults) publishes the unit shadows over guest memory into
the host import and only submits the copies. publishUnits picks the units to store on the CPU,
and the slab -> import copy lands when the GPU runs it, so a guest store made between the two is
overwritten with the older shadow bytes. The memory-access hook waits through SyncThrough right
after its flush; the idle flush has no reader that waits.

FlushPending and PublishShadowsOnly now sync the recorder under the GPU mutex after an idle
publish that stored units. Other flush reasons are unchanged.

Test: agc_idle_publish_wait (a CPU store made after the idle flush returns survives; a label
flush's publish stays recorded).
2026-10-21 04:13:42 -06:00
Dean GalvinandAryan Sharma c54d294a05 Merge origin/main into PR 2528
Co-authored-by: Aryan Sharma <[email protected]>
2026-10-21 23:12:54 +13:00
hypermistandClaude Opus 5.5 e0f3e860a2 docs(libSceAudioOut): list sceAudioOut2LoTerminate under Silent stubs
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:11:19 +13:00
hypermistandClaude Opus 5.5 f347e96e38 fix(libSceAudioOut): return 0 from sceAudioOut2LoTerminate and forward sceAudioOut2InitializeEx
The PS5 module's sceAudioOut2LoTerminate stops the low-latency service
and returns 0 whether or not it runs; sceAudioOut2LoInit starts no
service here. sceAudioOut2InitializeEx stores its argument and runs
sceAudioOut2Initialize.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:10:16 +13:00
Savvanis SpyrosandClaude Opus 5.5 ad5516e2db docs(libSceSaveData): move the pending declarations entry to the native debt file
The declarations now live in libSceSaveData.native/Export.cpp, which both
save data libraries are built from, so their entry belongs in that
library's debt file.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 13:08:58 +03:00
Savvanis Spyros 5a1ffa01b3 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/savedata-ps4-modules
# Conflicts:
#	core/libs/prx/libSceSaveData/Export.cpp
#	docs/dev/debt/libSceSaveData.md
2026-10-21 13:08:27 +03:00
Dean 2abfb1beb4 Merge pull request #8983 from xdCloudy/feat/libSceNpCommon-150-exports
feat(libSceNpCommon): declare 150 pending exports
2026-10-21 23:07:33 +13:00
Dean 61922f66da Merge pull request #8949 from xdCloudy/feat/ps5-npsnsfacebookdialog-exports
feat(libSceNpSnsFacebookDialog): declare PS5 pending exports
2026-10-21 23:07:29 +13:00
Dean b5baeea5af Merge pull request #8119 from DavidSamir/feat/videodec2-unimplemented-exports
feat(libSceVideodec2): export thirteen functions as not implemented
2026-10-21 23:07:25 +13:00
Dean ee676246cf Merge pull request #6519 from Get-fix/ps4/kernel-system-module-path
feat(libkernel): load system libraries from their console paths
2026-10-21 23:07:21 +13:00
hypermistandClaude Opus 5.5 98e8a2b791 feat(libSceGameLiveStreaming): answer sceGameLiveStreamingGetProgramInfo with an empty program
The PS5 module returns 0x80A00002 for a null pointer and otherwise
clears the 0x134C-byte program info before filling it from the system
service. Nothing is broadcast here, so the info stays zero.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:06:19 +13:00
hypermistandClaude Opus 5.5 5a7ef76100 fix(libSceAudioOut): track mastering initialization as the console does
The PS5 module keeps one mastering-initialized flag. A repeated
initialization returns 0 before the flags are checked; otherwise
sceAudioOut2MasteringInit accepts only 0 and sceAudioOut2MasteringInitEx
also bit 31, and other flags return 0x80268201. Term, GetState and
SetParam return 0x80268203 before initialization, GetState returns
0x8026800C for a null state and SetParam 0x80268205 for flags above 1.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 23:03:49 +13:00
Santhosh Kumar f43de1fe5d style(libSceFreeType): use camel case for character arguments 2026-10-21 15:33:40 +05:30
Santhosh Kumar 0a059a9365 feat(libSceFreeType): load glyphs by character code 2026-10-21 15:33:39 +05:30
milescovielloandClaude Opus 5.5 7bf7be589d test(agc): cover range-limited depth plane stores
DepthPlanePartialStore draws depth 0.5 into a 384x200 D32 Z_X plane (3x2
64 KiB tiles, the last row 72 texels high) over memory filled with 1.0 and
checks the plane's memory unit by unit:

- a read ending 3 KiB into the plane stores unit 0 alone (one store, one
  unit, 64 KiB counted) and leaves the plane stale; the same read again
  stores nothing;
- a read of the whole plane stores the other five units, the edge tiles
  holding 128x72 depth values with their padding left as it was;
- a guest write into unit 4 after unit 0 was stored wins in unit 4 only:
  a later whole read stores the four other stale units over 1.0, and a
  LESS draw at 0.6 passes exactly over unit 4 (the plane-wide generation
  synced every unit from memory instead);
- the retire of a surface the guest wrote into, through a view with two
  levels, stores its stale units the guest did not write;
- a color target over unit 5 retires the surface after storing units 1-4;
- over unwatched memory a partial store leaves the other units on the GPU,
  so a LESS draw at 0.6 passes nowhere.

TextureTiling checks that the 64KB Z_X equation of 4-byte elements reads
only x and y bits below 7, so each 64 KiB unit of a 3840x2160 D32 plane is
exactly one 128x128 tile.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 10:03:00 +00:00
milescovielloandClaude Opus 5.5 f57bbc936a perf(agc): store only the depth plane units a flush overlaps
A read of memory inside a stale D32 Z_X depth plane (FlushDepthPlanes) stored
the whole plane: a copy of the depth image into the mirror, MarkWholeWritten
and a write-back of every byte. In Super Meat Boy 3D (#8840) a read-only
buffer ending about 3 KiB inside a stale 3840x2160 plane makes
ShaderResources::Revalidate flush ~1000 times per 5 s, each one moving
31.9 MiB, bound by transfer bandwidth.

A depth surface now tracks its plane as 64 KiB units, each one 128x128 tile
of the mirror's block units: a stale bit and a write generation per unit
replace memoryStale and the plane-wide syncedGeneration.

- FlushDepthPlanes stores only the stale units the range overlaps: the depth
  to mirror copy takes one region per unit rectangle (UnitRects, from the
  mirror's slice windows), the mirror marks just those units written
  (MarkUnitsWritten) and the write-back covers their hull. The other units
  stay stale and the plane stays registered. Stale bits are cleared only
  after the copy was recorded, and the stored units' generations advance
  only when FlushPending stored them. A depth fast clear still pending at
  the store rewrites the whole image, so it makes every unit stale first.
- SyncFromMemory copies from the mirror only the units the guest wrote since
  their own generation (one ChangedBlocks scan; untracked memory counts as
  unwritten, as WrittenSince did), so a guest write into one unit no longer
  replaces GPU depth that is still unstored in the others.
- Flushes followed by a retire keep the whole-plane store: the color target
  flush in Draw and a written storage view (DepthPlaneScope::Whole). The
  retire of an overwritten surface in DepthSurfaceTexture first stores its
  remaining stale units the guest did not write.
- A mirror without block units (APS5_NO_BLOCK_TRACKING, unaligned base)
  falls back to the whole-plane copy, and APS5_DEPTH_PLANE_WHOLE_STORE=1
  tracks the plane as one unit, the previous behaviour.
- DepthPlaneStoreCounts reports stores, units and bytes stored.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 10:03:00 +00:00
Dean b6fe513b9a Merge pull request #8774 from al3w0f205/test/savedata-mountstatus-icon-null-coverage
test(libSceSaveData.native): cover sceSaveDataSaveIconByPath execution
2026-10-21 23:00:45 +13:00
Dean 1ebd80b152 Merge pull request #8772 from dantdmdarealguy/fix/ult-sync-test-runtime-size
test(libSceUlt): give the ulthread runtime of the sync test its 4096 bytes
2026-10-21 23:00:41 +13:00
Dean 1bd6c88dea Merge pull request #8769 from al3w0f205/test/truncate-negative-length-coverage
test(libkernel): cover truncate failure on negative lengths with EINVAL
2026-10-21 23:00:37 +13:00
Dean 7156315ef3 Merge pull request #8952 from xdCloudy/feat/ps5-ult-exports
feat(libSceUlt): declare PS5 pending exports
2026-10-21 23:00:33 +13:00
Dean 87e7bbc7e4 Merge pull request #8950 from xdCloudy/feat/ps5-savedata-exports
feat(libSceSaveData): declare PS5 pending exports
2026-10-21 23:00:29 +13:00
Dean add0185079 Merge pull request #8948 from xdCloudy/feat/ps5-npmanager-exports
feat(libSceNpManager): declare PS5 pending exports
2026-10-21 23:00:23 +13:00
xXPBSXxandClaude Sonnet 5.5 e8b9eb9323 test(libc): keep the abort-race flag of the call trace test alive until the process aborts
The detached thread of the abort-race case reads a flag that is a local
of the enclosing block, which ends before main calls std::abort(). Under
AddressSanitizer that read is reported as stack-use-after-scope. Make the
flag static.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-21 12:00:17 +02:00
Dean 8baf2b480d Merge pull request #8843 from christophermonterocortes-cr/feat/npcppwebapi-demangled-signatures
feat(libSceNpCppWebApi): align stub signatures with demangled symbols
2026-10-21 23:00:17 +13:00
Dean aa37bc7aef Merge pull request #6683 from EagleBearerYS/fix/agc-sample-location-grid-exact
fix(agc): keep the guest's sample order where pixel (0,0)'s locations stand in for a 2x2 grid
2026-10-21 23:00:12 +13:00
HQasperandClaude Opus 5.5 52a439bc70 feat(libSceLibreSsl): implement the MD4, MD5, SHA-1 and SHA-2 digests
MD4, MD5, SHA1, SHA224, SHA256, SHA384 and SHA512 Init/Update/Final and
the SHA256 one-shot threw. They now hash as LibreSSL does, on the
caller's MD4_CTX, MD5_CTX, SHA_CTX, SHA256_CTX and SHA512_CTX laid out as
in LibreSSL's md4.h, md5.h and sha.h, so a context copied or inspected
by the title stays valid: the bit count in Nl/Nh, the partial block in
data with its length in num, and md_len selecting the truncated digest.
Final pads and clears the buffer as LibreSSL's sources do.

Cases that differ between LibreSSL versions throw: SHA256 with a null
digest buffer and SHA512_Final with the SHA-512/224 or SHA-512/256
length. The test checks the RFC 1320, RFC 1321 and FIPS 180 vectors over
several chunk sizes, the context fields, copied contexts and those
cases.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-21 09:59:04 +00:00
Adrià e05da53ef3 Merge pull request #9021 from adriadam10/docs/reverse-engineering-guide
docs(dev): guide to reading call sites and library disassembly
2026-10-21 11:58:07 +02:00
Adrià FranchandClaude 4c153eca53 docs(dev): guide to reading call sites and library disassembly
Co-Authored-By: Claude <[email protected]>
2026-10-21 11:56:11 +02:00
hypermistandClaude Opus 5.5 30785885f7 fix(libSceAudioOut): return what the firmware returns from three info calls
sceAudioOutGetInfo and sceAudioOutGetInfoOpenNum return 0 and
sceAudioOutGetSimulatedHandleStatusInfo returns 0x809B00FF without
reading their arguments.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 22:56:09 +13:00
orezraeyandClaude Opus 5.5 c909d51447 test(libSceFont): open the external font through a guest path alias
sceFontOpenFontFile resolves guest paths, so a host-absolute temporary
path resolved beneath the run directory on Linux.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 06:55:03 -03:00
LeandroLP23andClaude Opus 5.5 c8b68f814c docs(debt): drop the CMASK clear pass entry for AMD without pipeline libraries
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 11:54:32 +02:00
Santhosh Kumar 303f15c078 docs(libSceFreeType): clarify Windows memory face limits 2026-10-21 15:22:04 +05:30
Santhosh Kumar 9f311ca8c1 feat(libSceFreeType): support memory fonts and face cleanup 2026-10-21 15:19:12 +05:30
hypermistandClaude Opus 5.5 1860f90304 feat(libc): add std::system_category and store error_code values at offset 4
The console error_code and error_condition keep the value in the second
dword: the shared error_category::equivalent reads it at +4, the
default_error_condition overrides return it shifted into the high half,
and title code built against the SDK headers stores 0 at +0 and reads
value() at +4. The generic category returned and compared the value at
+0.

system_category returns a static _System_error_category named "system"
that shares the generic message table and maps a value with a message
to the generic category in default_error_condition. The equivalent
overloads are shared by both categories and go through the object's own
default_error_condition, as the console's base implementation does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-21 22:47:12 +13:00
Dean 1381826358 Merge pull request #8776 from al3w0f205/test/savedata-dirname-search-validation
test(libSceSaveData.native): cover null arguments and invalid order in sceSaveDataDirNameSearch
2026-10-21 22:40:19 +13:00
milescovielloandClaude Opus 5.5 223e90289b test(agc): copy multisample depth at a count the device samples
The DB depth copy case drew a two-sample depth surface, which lavapipe
cannot sample (it samples depth at 1 and 4 samples only). The copy then
threw outside the expected-failure checks and the test crashed on exit.
Pick 2 samples when the device samples them, else 4, else skip the
multisample half, and copy every sample of that count.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-21 09:38:47 +00:00
Yossi Yadgar 1f407e5970 docs(debt): note where the new NpTus request checks come from 2026-10-21 12:33:20 +03:00