Commit Graph
20967 Commits
Author SHA1 Message Date
dantdmdarealguy 556aa8098d test(shader): keep agc_spirv_optimizer's stored-lane scan inside the module
storedLaneFunction took &words[offset + 1] for every instruction,
including the final one-word OpFunctionEnd, where offset + 1 equals
words.size(). GCC 15 and later define _GLIBCXX_ASSERTIONS in unoptimized
builds, so agc_spirv_optimizer, agc_spirv_optimizer_full and
agc_spirv_optimizer_none abort in every Debug build with
"Assertion '__n < this->size()' failed". Form the operand pointer from
words.data(); operands are still read only for instructions that have
them.
2026-10-28 00:40:42 -05:00
Adrià 0cd07dc4ab Merge pull request #11399 from iAbdulrrahman/feat/libc-digittoint-and-numbers
feat(libc): implement digittoint, isnumber, and ishexnumber
2026-10-28 06:34:59 +01:00
harisibrar1andClaude Opus 5.5 5bb96d08ad docs(libkernel): keep the map protection debt entry under the length limit
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 01:28:34 -04:00
harisibrar1 6413eacf9d Merge remote-tracking branch 'origin/main' into fix/map-undefined-protection-einval
# Conflicts:
#	docs/dev/debt/libkernel.md
2026-10-28 01:28:03 -04:00
harisibrar1andClaude Opus 5.5 b934ab8af1 fix(libSceRudp): drain only the cancelled waits and release a wait's registration on every exit
sceRudpPollCancel waited until no wait was registered, so a wait that
started during the drain kept it blocked, forever for an infinite one.
Waits registered when the cancel starts now move to a draining count,
and the cancel returns once those have left. A scope guard releases each
wait's registration on every exit, retaking the lock if the wait had
dropped it, so an exception in the condition wait no longer leaves a
registration that a later cancel can never drain. Reported by
@MarcZX10, @thepoppfish, @adriadam10 and @oneandonlydean; the guard
follows @thepoppfish's repair.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 01:26:57 -04:00
Adrià 895ead67f7 Merge pull request #11396 from iAbdulrrahman/feat/libc-timingsafe-memcmp
feat(libc): implement timingsafe_memcmp
2026-10-28 06:25:30 +01:00
harisibrar1 0c85096011 Merge remote-tracking branch 'origin/main' into feat/rudp-poll-cancel
# Conflicts:
#	core/libs/prx/libSceRudp/include/Api.hpp
#	docs/dev/debt/libSceRudp.md
2026-10-28 01:25:17 -04:00
Dean 00e85fea39 Merge pull request #10348 from oneandonlydean/perf-D2-v47
fix(agc): clamp an exported pixel depth to the viewport depth range
2026-10-28 18:25:05 +13:00
Dean ccfb96757f Merge pull request #11307 from dantdmdarealguy/perf/agc-depth-plane-copies-recent-presents
perf(agc): keep recently sampled depth plane copies up to twice the budget
2026-10-28 18:17:14 +13:00
Adrià 16954551ed Merge pull request #11382 from roboterspinne/fix/relinker-dynstr-leading-nul
fix(relinker): reject an executable dynamic string table that does not begin with NUL
2026-10-28 06:11:40 +01:00
Adrià 7fe2b2249b Merge pull request #11542 from milescoviello/test/ult-mutex-runtime-opt-params
test(libSceUlt): cover the mutex and ulthread runtime opt param initializers
2026-10-28 06:06:18 +01:00
Michael Krumland-DunningandClaude Opus 5.5 254d7b416f fix(shader): translate the fused f32 fma forms in f32 denormal mode 2
v_fma_f32, v_fmac_f32, v_fmamk_f32 and v_fmaak_f32 threw "f32 denormal
mode 2 is not implemented" whenever FLOAT_MODE flushed f32 denormal
inputs but kept denormal results.

On RDNA2 (gfx1036) at round to nearest even, mode 2 flushes the inputs
and rounds the fused result once with gradual underflow, which the host's
Fma gives under DenormPreserve 32. The translation now matches all 5,596
measured triples for the four forms at IEEE 0 and 1. Mode 1 keeps
throwing: there the hardware flushes a result that is tiny after rounding
with an unbounded exponent even when the addend is nonzero.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 22:05:57 -07:00
Michael Krumland-DunningandClaude Opus 5.5 126b7b98a0 fix(shader): translate f32 fract, floor, ceil and frexp_mant in f32 denormal modes 1 and 2
All four threw "f32 denormal mode N is not implemented" whenever
FLOAT_MODE kept only one side of the f32 denormals.

On RDNA2 (gfx1036), in every f32 round mode and at IEEE 0 and 1, mode 2
gives the results of mode 0 and mode 1 those of mode 3 with a denormal
result flushed, which only v_fract_f32 of a positive denormal produces.
The translation now matches all 118 measured inputs in modes 1 and 2.
Mode 1 of the three that run host float operations on a kept denormal
needs DenormPreserve 32, as v_min_f32 does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 22:05:57 -07:00
Adrià 3d214c8d87 Merge pull request #11549 from milescoviello/test/kernel-memory-pool-block-stats
test(libkernel): cover sceKernelMemoryPoolGetBlockStats's checks and the block an expansion adds
2026-10-28 06:05:23 +01:00
Adrià 46031052fc Merge pull request #11381 from roboterspinne/fix/relinker-executable-export-attributes
fix(relinker): validate executable export names and attributes like guest modules
2026-10-28 06:05:18 +01:00
Adrià d73ff0a79e Merge pull request #11538 from milescoviello/test/pthread-getprio
test(libkernel): cover scePthreadGetprio after scePthreadSetprio on the calling thread
2026-10-28 05:57:16 +01:00
rooklz cc7276f09c fix(tools): report import_audit symbolic link loops as failures 2026-10-28 04:53:06 +00:00
Adrià 5576dd18a9 Merge pull request #11401 from ErenYeager1836/feat/vrtracker2-resolve-mesh-size-nid
feat(libSceVrTracker2): identify sceVrTracker2GetRawCameraMeshSize export
2026-10-28 05:52:08 +01:00
Dean adbcdcdd58 Merge pull request #11463 from Mherberts/codex/feat-elf-relr-relocations
feat(relinker): support packed ELF64 relative relocations
2026-10-28 17:50:40 +13:00
Dean 5ab8acf45f Merge pull request #11309 from Danigamer05/feat/libc-signed-min32
feat(libc): implement signed 32-bit minimum value helper
2026-10-28 17:50:21 +13:00
Dean c9cc3b34db Merge pull request #11304 from Danigamer05/feat/libc-unsigned-max32
feat(libc): implement unsigned 32-bit maximum
2026-10-28 17:50:05 +13:00
Adrià 498954ef0e Merge pull request #11375 from veosett/codex/conventions-angle-links
fix(tools): recognize angle-wrapped documentation links
2026-10-28 05:49:59 +01:00
Dean 24795c0f56 Merge pull request #10529 from JJenkx/fix/libc-expm1-scaling-association
fix(libc): preserve expm1 rounding during exponent scaling
2026-10-28 17:49:49 +13:00
Dean 897fff64c4 Merge pull request #9240 from milescoviello/fix/backtrace-from-caller
fix(libc): start sceLibcBacktraceSelf's frames at its caller
2026-10-28 17:49:31 +13:00
Dean dbbe99aeb0 Merge pull request #9772 from UnhealthyKraken/feat/libc-floating-prefix
feat(libc): implement floating-point prefix helpers
2026-10-28 17:49:14 +13:00
Adrià 7f8f92d0bd Merge pull request #11342 from JJenkx/fix/performance-compare-timed-context-20261026
fix(tools): compare timed traces by requested window
2026-10-28 05:48:54 +01:00
Adrià ee5e24729c Merge pull request #11715 from danielcadev/feat/pad-file-touch-coordinates
feat(pad): inject touch coordinates through command files
2026-10-28 05:41:39 +01:00
Adrià 0c5401dcbd Merge pull request #9735 from mazen320/feat/libc-ctype-vtable
feat(libc): export the ctype facet vtable as data
2026-10-28 05:36:29 +01:00
Adrià e5c952d51f Merge pull request #9806 from frankea/fix/hull-masked-control-point
fix(shader): evaluate a control point masked out of the packed hull register
2026-10-28 05:35:24 +01:00
TehshortbusandClaude Opus 5.5 f1af288133 chore(agc): log the storage writeback submit and done lines only with APS5_DEBUG_LOG
writeBackLayers printed "StorageTexture writeback submit" and "StorageTexture
writeback done" unconditionally around the blocking submit of every storage
image writeback. In five GTA V (PPSA04264) runs they were 54 to 978 lines per
run, 5 to 55 % of the log. They now use APS5_LOG_CHARS_OUT_DEBUG, like the
other per-operation lines of the AGC driver, and are compiled out unless
APS5_DEBUG_LOG is defined.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 21:35:22 -07:00
milescovielloandClaude Opus 5.5 77600dcb87 test(libScePad): cover the trigger commands scePadSetTriggerEffect stores
Seven of the titles here import scePadSetTriggerEffect and no test reaches
it. Pin the requests it leaves in the port's output state: a weapon and a
feedback command as their DualSense effect bytes and fallback strengths,
the trigger mask leaving the other trigger as it was, an off command, and
a special handle leaving the output alone.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 04:28:40 +00:00
milescovielloandClaude Opus 5.5 987a78dd13 test(libkernel): cover scePthreadRwlockTryrdlock and Trywrlock on a live lock
Crimson Desert calls scePthreadRwlockTryrdlock, and its only test is on a
destroyed lock. On a lock made by scePthreadRwlockInit: two readers take
it, a try for the write lock is busy while either holds it, the write lock
is taken once both left, a reader is then refused, and after the writer
unlocks a reader takes it again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 04:28:40 +00:00
slopgobblercobbler 5fe90dcdbf fix(relinker): validate text section range before reading relative table targets 2026-10-28 05:26:38 +01:00
milescovielloandClaude Opus 5.5 9a12233a76 docs(libkernel): list sceKernelDebugRaiseException and its release-mode form as silent stubs
Both log their arguments and the caller and return. Note what the
titles' bundled libc.prx passes them and that three of its
sceKernelDebugRaiseException calls are followed by ud2 in every build
checked, so the guest reaches that ud2 here.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 04:25:31 +00:00
Adrià 82d5f01f28 Merge pull request #11361 from johandavidcm/perf/agc-pass-break-reasons
feat(agc): count why draws begin render passes
2026-10-28 05:25:04 +01:00
MarcZX10 e6083ad5c5 test(libSceNpCommon): escape into a filled buffer, size a null-destination query, split a surrogate pair
sceNpUtilJsonEscape has to stay inside a partly filled 16 byte buffer and refuse
one without a terminator, sceNpUtilJsonUnescape has to report the length of a
query with a null destination and size 0, and sceNpUtilJsonGetOneChar has to
reject a high surrogate that is not followed by a second unicode escape.
2026-10-28 04:25:02 +00:00
MarcZX10 cefb89fceb fix(libSceNpCommon): let sceNpUtilJsonUnescape size a query with a null destination
The final room check ran even when dst was null, so a size query such as
(nullptr, 0, src, n, &length) returned NP_UTIL_ERROR_BUFFER_TOO_SMALL and never
wrote the required length, although the per-character checks in the same
function already skip the comparison for a null destination. The check now
applies only when there is a destination.
2026-10-28 04:24:44 +00:00
MarcZX10 79245feab9 fix(libSceNpCommon): require the second \u of a surrogate pair in sceNpUtilJsonGetOneChar
After a high surrogate, sceNpUtilJsonGetOneChar parsed four hex digits at offset
8 without checking that offsets 6 and 7 hold a backslash and a 'u'. The string
"\ud83dXXde00" decoded to U+1F600 and consumed 12 bytes, swallowing the two
unrelated characters. sceNpUtilJsonUnescape already makes that check. A high
surrogate not followed by \u now takes the same failure path as an invalid low
surrogate.
2026-10-28 04:24:44 +00:00
MarcZX10 7fae9a1656 fix(libSceNpCommon): count the text already in the buffer in sceNpUtilJsonEscape
sceNpUtilJsonEscape appends to the destination with strcat, but the room check
started its running length at 0 and ignored the text the buffer already held,
so escaping into a partly filled buffer wrote past its end:
sceNpUtilJsonEscape(buf, 16, "\n\n\n", 3) on a buffer holding ten characters
placed 16 characters and the terminator in 16 bytes.

The running length now starts at the length of the existing text, and a
destination that is already full returns NP_UTIL_ERROR_BUFFER_TOO_SMALL.
2026-10-28 04:24:43 +00:00
Adrià 2d7af25e62 Merge pull request #11398 from iAbdulrrahman/feat/posix-arc4random-uniform
feat(libScePosixForWebKit): implement arc4random_uniform
2026-10-28 05:23:59 +01:00
Adrià 9fc181dde5 Merge pull request #9971 from tkcm01/fix/agc-overlay-private-bytes-macos
fix(agc): read the process's private memory from task_info on macOS
2026-10-28 05:17:46 +01:00
Adrià c51d6c226a Merge pull request #11714 from akkadbakkad89/fix/psml-mfsr-enable-flags
fix(libScePsml): answer console-measured MFSR enable flags and Context1300 size check
2026-10-28 05:11:39 +01:00
Adrià 76d8390421 Merge pull request #11712 from al3w0f205/test/vrsetupdialog-finished-state-reopen-coverage
test(libSceVrSetupDialog): cover reopen and null parameter behavior in finished dialog state
2026-10-28 05:10:41 +01:00
Adrià 2df319e55c Merge pull request #11704 from JJenkx/fix/agc-srgb-msaa-dcc-clear
fix(agc): import exact sRGB multisampled DCC clears
2026-10-28 05:10:37 +01:00
Adrià b4b0c220a9 Merge pull request #11706 from jotitadev/fix/agc-guest-memory-lifetime-macos-loader
test(agc): load the Vulkan loader by its macOS name in the host import and producer gate helpers
2026-10-28 05:08:31 +01:00
Adrià 11760ab51b Merge pull request #11708 from jotitadev/fix/agc-depth-plane-test-detiler
test(agc): give the read-only depth plane flush test a texture detiler
2026-10-28 05:07:27 +01:00
Adrià 7fe69e276f Merge pull request #11707 from milescoviello/test/font-terminate-code
test(libSceFont): cover the terminate code and position a font string records
2026-10-28 05:04:26 +01:00
Adrià ac6441d2e3 Merge pull request #11703 from milescoviello/test/agc-atomic-mem
test(agc): cover the graphics and compute ATOMIC_MEM packets
2026-10-28 05:04:21 +01:00
JJenkxandClaude Opus 5.5 c581723557 test(agc): build the page-unwatch depth unit with Windows block granularity
On Windows, GuestMemory::Unwatch excludes every page of each 64 KiB
block it touches, so unwatching one page of the descriptor unit left the
whole unit unwatched and the "descriptor page lost write watching" check
failed. Unwatch the unit and return only its descriptor page with
Rewatch there, which is page-granular, so the unit is partly watched on
every platform. Linux keeps the single-page Unwatch.

Diagnosed by maskym on Windows 11 26300 with an RTX 2070 SUPER.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 00:03:20 -04:00
Adrià 68200c47ea Merge pull request #11705 from jotitadev/fix/agc-deferred-resolver-after-last-device
fix(agc): check the deferred destruction resolver only against live devices
2026-10-28 05:02:15 +01:00