Commit Graph
20967 Commits
Author SHA1 Message Date
Yossi Yadgar 22823182ef docs(debt): note that sceKernelGetAppInfo leaves the workaround block unwritten 2026-10-23 11:12:23 +03:00
Yossi Yadgar fadfb4433d docs(debt): note where the workaround and process type rules come from 2026-10-23 11:12:23 +03:00
Yossi Yadgar 4cbcf1fa23 test(libkernel_sys): cover the workaround bit limit and the process type pids 2026-10-23 11:12:16 +03:00
Yossi Yadgar c9828c6d3a feat(libkernel_sys): report the big-application process type for the title's own pid 2026-10-23 11:12:16 +03:00
Yossi Yadgar 380867d173 feat(libkernel_sys): read the title workaround bits 2026-10-23 11:12:16 +03:00
thuanquangandClaude 1a9f8be3fc perf(agc): write the frame-dump log line through the asynchronous profile output
Co-Authored-By: Claude <[email protected]>
2026-10-23 15:12:02 +07:00
Yossi Yadgar f0c2cc4879 docs(debt): record the libSceGnmDriverForNeoMode command packets 2026-10-23 11:12:01 +03:00
Yossi Yadgar be98265ab0 test(libSceGnmDriverForNeoMode): check the draw, dispatch, wait and VGT packets word by word 2026-10-23 11:12:01 +03:00
Yossi Yadgar 9c618fbc86 feat(libSceGnmDriverForNeoMode): set and reset the VGT control register 2026-10-23 11:12:01 +03:00
Yossi Yadgar 4a080ff525 feat(libSceGnmDriverForNeoMode): write the compute semaphore and address wait packets 2026-10-23 11:12:01 +03:00
Yossi Yadgar 69c273a101 feat(libSceGnmDriverForNeoMode): write the indirect and multi draw packets 2026-10-23 11:12:01 +03:00
Yossi Yadgar f7bff684dd feat(libSceGnmDriverForNeoMode): write the dispatch packets 2026-10-23 11:12:01 +03:00
Yossi Yadgar 200d7e18ca feat(libSceGnmDriverForNeoMode): write the direct draw and ding-dong marker packets 2026-10-23 11:12:01 +03:00
Dean 048d0f9aa3 Merge pull request #8443 from orezraey/fix/nid-export-list-native-path
fix(nid): open export lists through the UTF-8 native path on Windows
2026-10-23 21:09:33 +13:00
Dean b27138800c Merge pull request #8719 from ArjenS-LA/fix/audit-windows-system-suffixes
fix(tools): resolve Windows system library suffixes in audits
2026-10-23 21:09:12 +13:00
Dean a75292c7b3 Merge pull request #8687 from cadenasynyster/fix/win-loop-errors
fix(libkernel): report ELOOP from unlink, mkdir, rmdir, truncate on Windows
2026-10-23 21:08:52 +13:00
Dean 87f3526562 Merge pull request #8617 from Lindamea1/fix/libkernel-mutex-unlock-static-eperm
fix(libkernel): fail scePthreadMutexUnlock on a statically initialized mutex with EPERM
2026-10-23 21:08:24 +13:00
xXPBSXxandClaude Sonnet 5.5 a411762d70 docs(debt): note the result structure a title passes to sceSaveDataDirNameSearch2
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 10:07:18 +02:00
xXPBSXxandClaude Sonnet 5.5 ce2cf808a8 docs(debt): note the arguments a title passes to sceAudioInAsyncOpen
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 10:05:07 +02:00
xXPBSXxandClaude Sonnet 5.5 6d9a1b895b docs(debt): note how a title calls sceVideodec2CreateDecoder
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 10:04:44 +02:00
Adrià FranchandClaude 9f8343519f fix(agc): keep the import run memo in host thread-local storage
Co-Authored-By: Claude <[email protected]>
2026-10-23 10:04:41 +02:00
alfalfa-starandClaude Opus 5.5 5d3c0d741a perf(agc): memoize host import run bounds per lease snapshot
Every import lookup walked the lease out from the containing range to find
the run of continuing registry ranges, which is linear in the run length.
That walk depends only on the lease snapshot, the containing range and the
import window block, so its first and last index are now memoized per
thread under a weak reference to the snapshot, the range index, the window
and the window's low end. APS5_NO_RUN_MEMO walks every time.

Everything that depends on other state runs on each call as before: the
largest size, the budget, the failed blocks, the remembered refusals and
the halving block search. importRunBounds returns the chosen indices, so
sameRange, runCovers and the whole-run lookup in importAllocation compare
against the lease without copying the run's range pointers.

importRunFailureShrinkTests records a failed 8 MiB block between two
lookups on an unchanged registry and requires the run to shrink to its
4 MiB blocks. importRunGrowthTests and importRunReplacedTests check that a
run grows and shrinks when its ranges are registered or replaced.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 10:04:37 +02:00
xXPBSXxandClaude Sonnet 5.5 d4844f75db test(libc): check POSIX-form zone offsets on Windows
The region name zones resolve to UTC on Windows (UCRT does not read them), so the round trip passed with no offset applied. Windows now runs PST8PDT and EST5EDT with the round trip, and checks tm_gmtoff and the daylight flag at a January and a July moment in 2001. The name zones stay on Linux and macOS.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 10:03:56 +02:00
xXPBSXxandClaude Sonnet 5.5 c22d6429bc docs(debt): correct the poll and buffer counts in the sceNpAuth title notes
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 10:02:45 +02:00
ntamas94andClaude Opus 5.5 88432ab71d docs(libSceJpegEnc): note that the returned size is not confirmed on a PS5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 10:02:43 +02:00
ntamas94 0680c59335 Merge remote-tracking branch 'origin/main' into fix/ps4-jpegenc-encode-size 2026-10-23 10:02:40 +02:00
JJenkx 05b602dd95 Merge remote-tracking branch 'origin/main' into windows/ngs2-debt-ppsa33655-modules
# Conflicts:
#	docs/dev/debt/libSceNgs2.native.md
2026-10-23 03:53:48 -04:00
thuanquangandClaude 73f9b5d9fb perf(libc): carve fresh private guest pages out of their placeholder
A private guest commit on Windows (every anonymous kernel map commits
with a 16 KiB granule) ran reset() on each page before replacing it:
10 VirtualQuery calls, a placeholder split and the VirtualAlloc2, so
12 calls per page. At the arena's first-fit frontier the placeholder is
the arena's free tail, hundreds of GiB.

Commit now queries a placeholder once, cuts the range out of it (one
split where the range starts inside the placeholder, one where the
placeholder extends past the range), and carves the pages from that
bounded placeholder: one split and one VirtualAlloc2 per page, and no
split for the last page. Each page is still its own allocation with the
same protection, write watch and created ranges, so munmap, MAP_FIXED
remaps, views and collects see the same layout as before. A piece that
would cross the end of its placeholder (a whole-range granule over
several placeholders) still takes the coalescing path through reset(),
and committed memory in the range still only changes its protection. A
zero granule now throws std::invalid_argument before touching the
address space.

windows_write_watch counts the queries with a compile-time counter that
only that test defines (APS5_COUNT_MAPPING_QUERIES, copied from #9505)
and checks: 256 fresh pages one page into a 1 GiB placeholder take one
query (main's loop makes 2,561), each page is its own allocation and
the placeholders around them are intact; the release and recommit of
one page; a protection-only commit; the write watch of carved pages; a
whole-range granule inside one placeholder and across two; committed
pieces and adjacent placeholders inside the range; a partial release
and a fixed remap that keep their neighbours; a granule that would
cross the end of the placeholder being carved, which takes the
coalescing path; a short last piece; a commit that runs to the end of
its placeholder; an unwatched commit; and the zero-granule throw.

PPSA14363 boot on an RX 6700 XT, idle PC, 4 runs on main and 3 with
this change: the first 10 s after the first present go from 546-552
presents with a 578-704 ms frame to 588-594 presents with a 97-117 ms
frame.

Co-Authored-By: Claude <[email protected]>
2026-10-23 14:52:45 +07:00
xdCloudy 0aa3f3505b feat(libSceCamera): declare PS5 3.20 pending exports 2026-10-23 08:47:28 +01:00
Dean 21554447d0 Merge pull request #6848 from NFSS10/nfss10/performance_improvements
perf(agc): clear single-key DCC surfaces on a verified uniform color
2026-10-23 20:45:46 +13:00
Dean 57c44fd6b8 Merge pull request #8378 from orezraey/fix/guest-tests-unicode-temp-paths
test(libs): keep non-ASCII temporary paths out of narrow Windows calls in guest tests
2026-10-23 20:45:15 +13:00
Dean ae7468d394 Merge pull request #6929 from jotitadev/fix/relinker-tls-tests-preserve-rbx
fix(relinker): restore rbx in TLS coverage bodies run on the host
2026-10-23 20:44:47 +13:00
lakhantheboss 00d5db19f0 feat(libSceNpCommerce): implement internal dialog initialization
Delegate sceNpCommerceDialogInitializeInternal to sceNpCommerceDialogInitialize, sharing dialog state and returning COMMON_DIALOG_ERROR_ALREADY_INITIALIZED on duplicate initialization, following shadPS4. Add regression tests in GuestNpCommerceDialog covering initial, duplicate, and post-termination initialization, and update technical debt documentation.
2026-10-23 13:12:44 +05:30
klosixgaming-arch 3f0a1e4222 fix(agc): keep a promoted multisampled target's color view out of storage usage
A multisampled sRGB target promoted to storage gained VK_IMAGE_USAGE_STORAGE_BIT on its image, and its color view in the sRGB format inherited that usage. sRGB formats have no storage image feature, so the validation layer reported VUID-VkImageViewCreateInfo-usage-02275 on the first storage access.

The view now excludes the storage usage whenever the image has it, which is what it already did for targets created with a sample-order storage form.

AI-assisted: yes. Written with AI assistance and reviewed by me.
2026-10-23 02:41:31 -05:00
klosixgaming-arch a142125bd1 fix(agc): bind a multisampled sRGB target as a storage image in its UNORM twin
MultisampleTargetStorageView required the rendered VkFormat to equal the requested one. A 4x R8G8B8A8_SRGB target asked for as guest format 56 (R8G8B8A8_UNORM) therefore threw "storage image access to multisampled color target ... is not implemented", although the target is created with a UNORM storage view for exactly this access.

The lookup now matches when both formats resolve to the same host storage format, which only holds for an sRGB format and its UNORM twin or for identical formats. Unrelated formats of the same size are still refused.

AI-assisted: yes. Written with AI assistance and reviewed by me.
2026-10-23 02:41:31 -05:00
xXPBSXxandClaude Sonnet 5.5 7e217f1490 test(libkernel): run the guest_kqueue standard input case on a null device
The case expects an EVFILT_WRITE change on descriptor 0 to throw because
descriptor 0 is neither a socket nor the write end of a pipe. When the test
is started with a pipe as standard input the guest cannot tell the ends of a
Windows pipe apart, the change is accepted and the test aborts at that
check. Point descriptor 0 at the null device first so the result no longer
depends on how the test was started.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 09:39:07 +02:00
Dean f075f91737 Merge pull request #9314 from DavidSamir/feat/libkernel-sys-ktimer
feat(libkernel): implement SIGEV_NONE POSIX timers
2026-10-23 20:34:29 +13:00
Yunus Shaikh 530c6fb0df fix(agc): publish the units a completion store covers partly before it lands
A CPU store made inside a completion action (a copied buffer's write-back)
reached the flush hook with PublishScope::None, and PublishShadow skipped
such stores anyway. Nothing was published before the store landed, and
its own stamp then made every unit it touched stale, so the next publish
dropped those units whole: the storage results the store did not cover
were lost, both those already in the unit shadow and those of a pending
image the hook had just stored into it.

The hook now publishes the units such a store covers partly, as outside
completion actions, and its full Sync inside completion actions lands
the copies before the store. PublishShadow, FlushPending and
PublishShadowsOnly take a waited flag for this; other publishes made by
completion stores are still skipped.
2026-10-23 09:33:29 +02:00
Yunus Shaikh 546040adc5 test(agc): size the address shadow test's heap past the Windows settle floor
On Windows only host imports of 1 MiB or more are settled and stay
write-watched; a smaller import is compared, so its range leaves the
watch and the unit shadow never engages. The address shadow test's heap
was 256 KiB, so both of its tests skipped on Windows with "the heap is
not imported or not watched", with the fix and without it.

The heap is now 2 MiB, filled exactly by a 1024x512 storage image, and
its allocation keeps one unregistered 64 KiB block after the range, so
no other registered range can continue it into a larger import run.
The assertions and Linux's forced watch are unchanged.
2026-10-23 09:33:16 +02:00
Yunus Shaikh fe0383c0d6 fix(agc): publish unit-shadow results before an address-based build maps its heaps
An address-based build binds the registered heaps in place and does not
store the storage results pending in them. With unit shadows on, a
write-back that retiled into the shadow reaches the import only through a
publish, and nothing published before such a build, so its pointer reads
saw the bytes of the last publish.

UploadFinish now publishes the fresh units over the heaps the build maps:
the address space's base on the cached path, the exempt in-place regions
on the per-build path. One AnyShadowedOverlaps check over their span
gates it, pending results stay pending, and the copies count under their
own publish reason, "address".
2026-10-23 09:33:15 +02:00
Adrià 6687ed0bb2 Merge pull request #10058 from adriadam10/fix/main-conventions-shard-timeout
fix(main): raise conventions shard timeout to 120s
2026-10-23 09:30:15 +02:00
Adrià Franch 616bd98623 fix(main): raise conventions shard timeout to 120s
Failing run 39915816778 (windows conventions_function_bodies_shard_1 Timeout 30.06s; sibling shards took 27s on the same runner). No culprit merge: the 30s limit sat at the edge of normal runtime. Linux failure in that run was a runner-side submodule shallow.lock (infra).
2026-10-23 09:30:05 +02:00
VakzOs 3778e9fc98 Merge branch 'boykopovar:main' into feat/libressl-des 2026-10-23 09:27:10 +02:00
xXPBSXxandClaude Sonnet 5.5 9c863ba20b docs(agc): add AMD data to the queue 0x20 label wait entry
Adds the PPSA01746 measurements on an RX 6400 to the existing entry: the awaited word already holds a slot address when the wait starts, and the RELEASE_MEM the driver saw was queued but not shown to land.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 09:25:54 +02:00
xTRACKGOD 9dd607ee33 fix(tools): skip unselected executables in fresh builds 2026-10-23 12:55:36 +05:30
Dean 664648356c Merge pull request #8751 from janzezno/fix/hook-sync-recorded-store
fix(agc): sync a host read on a store recorded after its snapshot check
2026-10-23 20:24:42 +13:00
ntamas94 357005d009 Merge remote-tracking branch 'origin/main' into fix/ps4-jpegenc-encode-size 2026-10-23 09:24:31 +02:00
Dean 3d9c01daed Merge pull request #9337 from Th3EvilGod/codex/ngs2-userfx-module-id
fix(ngs2): correct UserFx ids and preserve Delay compatibility
2026-10-23 20:24:20 +13:00
Emanuele 4bee82086f fix(agc): destroy buffers and memory on MoltenVK only while the graphics queue is idle 2026-10-23 09:17:55 +02:00
zaryabzip 6653dffe62 feat(libkernel_sys): implement scePthreadCondattrGetclock
Read the clock of a libkernel condition attribute, returning
SCE_KERNEL_ERROR_EINVAL for a null or destroyed attribute as
scePthreadCondattrSetclock does, after FreeBSD 11.4 libthr's
_pthread_condattr_getclock. A null clock pointer throws.
2026-10-23 12:17:02 +05:00