Commit Graph
14017 Commits
Author SHA1 Message Date
fma-rc c020d73a5b fix(libc): catch exceptions that libstdc++ throws inside the prx libraries on Linux
The nid_patcher turns each *_nid_no_patch_cut alias into a second dynamic
symbol with the same name as the plain alias exported next to it, seven
names in all. With those duplicates, LD_DEBUG=bindings shows libstdc++ keeping its own __cxa_allocate_exception, __cxa_throw,
__cxa_begin_catch, __cxa_end_catch, __cxa_rethrow, __gxx_personality_v0
and _Unwind_Resume while taking __cxa_init_primary_exception,
_Unwind_RaiseException and std::terminate from libc.prx. An exception
thrown inside libstdc++ (std::stoi, a stream with exceptions enabled) got
a libc header laid over a libstdc++ allocation, reached the libc
personality as a foreign exception, matched no typed handler and ended in
"terminate called without an active exception". The plain aliases already
export these names, so the duplicates go.

libstdc++ also describes std::__ios_failure with __iosfail_type_info, a
class that privately derives from __si_class_type_info at the same
address. Kind now follows such single same-address bases to the
__cxxabiv1 class, so catching std::ios_base::failure or std::exception
matches a stream failure.

The plain aliases came in a4c519b26 next to the cut aliases from
14f8c16ac.
2026-10-17 01:17:45 +02:00
Adrià 4272979b31 Merge pull request #5953 from jagrat04/feat/libSceSsl-certificate-readers
feat(libSceSsl): implement certificate serial and name entry readers
2026-10-17 01:16:05 +02:00
Adrià 8c90c879e0 Merge pull request #5990 from Get-fix/ps4/windows-libc-for-libkernel
fix(relinker): search libc.prx for libkernel-only Windows executables
2026-10-17 01:16:00 +02:00
Adrià 4a9c1d5cd0 Merge pull request #5982 from milescoviello/fix/depth-surface-later-level
fix(agc): treat a view past a depth surface's first level as memory
2026-10-17 01:15:56 +02:00
Adrià 29a546d378 Merge pull request #5978 from MarcZX100/codex/libc-explicit-exit-finalizers-5931
fix(libc): run guest finalizers before driver shutdown
2026-10-17 01:07:47 +02:00
Adrià af0fff7627 Merge pull request #5974 from mohammad-alosta/fix/ngs2-geom-apply
fix(libSceNgs2): implement a minimal sceNgs2GeomApply pass-through
2026-10-17 00:52:37 +02:00
Adrià 11d1557bd7 Merge pull request #5084 from 0xRickx/fix/libscesystemservice-host-time-zone
fix(libSceSystemService): report the host time zone and summer time
2026-10-17 00:52:32 +02:00
Yunus Shaikh 84cae0bda0 fix(agc): pick the overlay's palette entry with constant indices
On RADV the overlay's fragment shader read parameters.palette[paletteIndex]
as palette[0] for the text and graph rectangles, so they were drawn in the
panel's colour (0,0,0,0.6) and darkened the panel a second time instead of
drawing white or green. On an AMD Radeon RX 7600 (NAVI33) with Mesa 26.0.8,
agc_performance_overlay failed in its SDR case at "'6' of 'FPS: 60.0' glyph
pixel 2,0 is not white text: 0x4280161290": 0xff1e140a is the clear colour
(191,128,64) darkened by 0.4 twice, where the panel alone gives 0xff4c331a.
An integrated Radeon 660M failed at the full panel's first glyph.

The shader was valid SPIR-V: a flat uint input indexing a push-constant
array (the palette at offset 0, the extent at 48). The index is per
rectangle, and fragments of the panel and of its glyphs share waves, so it
varies within a wave; RADV read that divergent index into the push-constant
array as 0. The shader now reads each entry at a constant index and selects
one by the colour index. Every case passes on that RX 7600 with this change,
full panel included, and still passes on llvmpipe from the same Mesa.
2026-10-16 15:45:52 -07:00
Leonardo b868190bc2 fix(libSceVoiceQoS): take 4-arg local endpoint and relax unverified rejections 2026-10-17 00:39:37 +02:00
Yunus Shaikh be77a9d7bd fix(agc): release the lookup log's capacity after a build past its bound
A build keeps all of its own lookup records, so one over many textures
grows the thread-local log far past the 1024-record bound, and the vector
kept that peak capacity for the life of the thread: 2048 records after a
1500-texture build, on every thread that ever ran one.

When the outermost build or full walk ends, the log is trimmed back to
the newest 1024 records, as logLookup would have kept, and its capacity
is released once it exceeds one and a half times the bound. A log within
the bound never reaches that capacity, whether the vector grows by
doubling or by half, so ordinary builds do not reallocate. Nothing reads
the log after a build ends: captureValidation runs inside it and clears
it, a full walk clears it before its lookups, and resolveImageTables
reads only the record its own lookup just added.
2026-10-16 22:34:20 +00:00
Adrià Franch 883e4b64f6 test(libc): use 16-byte alignment the mock storage satisfies 2026-10-17 00:24:27 +02:00
Adrià Franch a6fd136a30 test(libc): pin aligned new alignment argument, zero size and new-handler retry 2026-10-17 00:24:27 +02:00
notaxeltvandCursor cd4b52f05a feat(libc): allocate through operator new with align_val_t
Co-authored-by: Cursor <[email protected]>
2026-10-17 00:24:26 +02:00
Crimson e55144bfe5 fix(libc): build the working directory path without deprecated u8path 2026-10-17 01:18:48 +03:00
hamb3r ebc6ea3ba5 Merge branch 'main' into fix/shader-msaa-array-descriptor-shape 2026-10-17 01:18:47 +03:00
Adrià 40255d774b Merge pull request #6081 from MiniRML/fix/oracle-device-selection-cache
fix(tools): cache oracle targets per visible device selection
2026-10-17 00:18:07 +02:00
SandstromPLandClaude Opus 5.5 237fe9c269 docs(agc): cite the GL rule the multisampled depth scan follows
The debt entry cited ARB_multisample's centermost-sample shortcut as
what a single-sample scan into a multisampled depth target draws. The
draw tests each depth and stencil sample with the depth at the pixel
center, which is the rule above that shortcut (L185-L190 and
L422-L425); the shortcut is now named as an unmeasured alternative.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 00:17:51 +02:00
SandstromPLandClaude Opus 5.5 e8614de271 fix(agc): rasterize a single-sample scan into a multisampled depth target at the pixel center
A draw with PA_SC_AA_CONFIG.MSAA_NUM_SAMPLES 0 and MSAA_ENABLE clear
into a 4x depth target threw "the depth target's sample count differs
from the rasterizer's", which stops METAL GEAR SOLID: Peace Walker
(PPSA18216) at its first presentation. Such a draw now rasterizes the
depth target's sample count with every sample at the pixel center, as
a single-sample scan into a multisampled color target already does.
radeonsi programs this MSAA_ENABLE and PA_SC_AA_CONFIG with the depth
buffer's own sample count when GL multisampling is disabled, and GL
then gives full coverage with every depth and stencil sample set from
the pixel center.

Triangles and rectangles are accepted. Points, lines, alpha-to-coverage,
DB_EQAA Z interpolation or overrasterization, a pixel program reading
the sample index and a sample-mask export throw on this path, as does
a single-sample color target next to the multisampled depth target.
The primitive check is shared with the single-sample MSAA_ENABLE rule,
whose behaviour and messages are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 00:17:51 +02:00
Adrià 57f2a59010 Merge pull request #5975 from milescoviello/fix/indirect-vertex-extent
fix(agc): copy an indirect draw's vertex buffer only up to its last element
2026-10-17 00:15:56 +02:00
Adrià c1d72d9335 Merge pull request #5890 from Piglit09/phase1/tls-protected-entry
fix(relinker): protect Windows TLS code entry roots
2026-10-17 00:15:50 +02:00
Adrià 6059b85439 Merge pull request #5968 from MarcZX100/codex/audio3d-supported-attrs-5954
feat(libSceAudio3d): report supported port attributes
2026-10-17 00:15:45 +02:00
Adrià 5f06c534a3 Merge pull request #5939 from Amoenus/codex/msaa-dcc-main5a6
feat(agc): import uniform multisampled DCC fast clears
2026-10-17 00:15:40 +02:00
Adrià 7b63ccbc93 Merge pull request #5970 from Ondra97/codex/fix-pad-command-unicode-path
fix(pad): read controller commands from Unicode paths
2026-10-17 00:15:35 +02:00
Adrià e1caf9b06c Merge pull request #6073 from MiniRML/fix/oracle-empty-input-rows
fix(tools): reject empty hardware oracle input files
2026-10-17 00:11:52 +02:00
Adrià b35f5b7940 Merge pull request #6069 from MiniRML/fix/nid-report-utf8-output
fix(tools): preserve Unicode paths in NID CLI output
2026-10-17 00:08:47 +02:00
Yunus Shaikh 890c321842 fix(agc): give the overlay's view the transfer usage of its pass layouts
The overlay's render pass starts in the layout the image was left in and
ends in the one its caller needs next, but the attachment view allowed only
COLOR_ATTACHMENT usage. A pass that starts in TRANSFER_DST_OPTIMAL (the
present path when nothing was drawn, and the tests) or ends in
TRANSFER_SRC_OPTIMAL (the tests' readback) then broke
VUID-vkCmdBeginRenderPass-initialLayout-00898 and -00899. The view now
also allows TRANSFER_DST or TRANSFER_SRC when the pass names that layout.
Swapchain images have TRANSFER_DST and their pass ends in PRESENT_SRC, so
the present path asks only for that; the test's cost report image, whose
pass ends in TRANSFER_SRC_OPTIMAL, is now created with TRANSFER_SRC.
2026-10-16 15:04:35 -07:00
MarcZX100 0e61224749 fix(tools): reject unsupported inner ELF encodings 2026-10-16 22:01:26 +00:00
MarcZX100 9d82fd96a5 test(tools): cover unsupported inner ELF encoding 2026-10-16 22:01:14 +00:00
Zinebyte ed1884134f test(relinker): provide kernel fixture for guest finalizers 2026-10-16 17:56:47 -04:00
Zinebyte 56b43aae5a fix(relinker): scope host dependencies to required guest modules 2026-10-16 17:56:01 -04:00
Adrià af7db81e6e Merge pull request #6065 from MiniRML/fix/unwrap-elf-metadata-bounds
fix(tools): validate inner ELF metadata before unwrapping SELF
2026-10-16 23:51:42 +02:00
klosixgaming-arch 38fc2ddb36 fix(tools): read unwrap_self's vaddr-less segments from where the SELF stores them
unwrap_self matched SELF records to PT_LOADs by size only and placed
every segment without a vaddr by the shift of the last mapped one. In the
19 modules of PPSA03743/PPSA03363 (Soul Hackers 2) the SCE comment
segment has a record of its own, after a 0x20-byte digest block, so it
and the version segment behind it were read 0x20 bytes too early, and in
the sce_module libraries, where the ELF puts a PT_NOTE between them, the
version segment was cut to a few bytes at the end of the file.

A record with flag 0x800 now places the program header whose index is in
flags bits 20 and up. Segments without a vaddr that follow the last
recorded one are read back to back after it; the PT_NOTE among them is
not stored in the container and is emitted without file bytes.
2026-10-16 16:42:42 -05:00
Adrià Franch 53ffc976fe docs(debt): end the libSceNpManager debt lines with a period 2026-10-16 23:40:45 +02:00
notaxeltvandCursor af9d039d61 feat(libSceNpManager): export two unknown NIDs so PPSA34015 can load
Co-authored-by: Cursor <[email protected]>
2026-10-16 23:40:42 +02:00
Adrià Franch ddb135643a docs(debt): list sceVdecswGetHevcPictureInfo under Functional 2026-10-16 23:38:37 +02:00
notaxeltvandCursor cb6c305038 feat(libSceVdecsw): block on SyncDecodeInput/Output like TrySync
Co-authored-by: Cursor <[email protected]>
2026-10-16 23:38:33 +02:00
NikoandClaude Opus 5.5 b263cbbb1b feat(libc): print the text that registers point at in Windows crash reports
Unreal titles end in their own libc fatal path with the UTF-16
LowLevelFatalError message in a register, and the crash report shows
only the first 64 bytes of it as hex words, so the message is lost
(#4238: Demon Slayer PPSA03490, Stray PPSA02100).

For every general register that points at readable memory starting
with at least four printable ASCII characters, as UTF-16LE or as single
bytes, the report now prints the text up to a NUL, the first other
character, 512 characters or the end of readable memory (each page is
checked with VirtualQuery before it is read).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 23:33:43 +02:00
Adrià e9a3343a22 Merge pull request #6057 from MiniRML/fix/overlap-file-link-encoding
fix(tools): encode filenames in PR overlap links
2026-10-16 23:32:30 +02:00
Adrià eac5d8db12 Merge pull request #5956 from alexpournaras/feat/voice-get-port-attr
feat(libSceVoice): implement sceVoiceGetPortAttr
2026-10-16 23:29:52 +02:00
Adrià 5b70a50680 Merge pull request #5955 from fma-rc/fix/libkernel-linux-guest-module-protect
fix(libkernel): register a relinked guest module's image when Linux protects its pages
2026-10-16 23:29:46 +02:00
Adrià c7b6f2d12e Merge pull request #6055 from MiniRML/fix/compile-check-windows-arguments
fix(tools): parse Windows compile commands without losing backslashes
2026-10-16 23:26:07 +02:00
Adrià 6e6677601f Merge pull request #5960 from KernelPanicNT/fix/export-phasmophobia-psvr2-imports
fix(exports): export the PS VR2 calls Phasmophobia's psvr2.prx imports
2026-10-16 23:25:34 +02:00
Adrià 8ac10e7a09 Merge pull request #6050 from MiniRML/fix/unwrap-program-header-space
fix(tools): reserve program header space when unwrapping SELF
2026-10-16 23:25:13 +02:00
alfalfa-starandClaude Opus 5.5 ac64ea4524 test(agc): require the GPU route for the indirect rect-list draws
agc_driver_rect_list_indirect compared the indirect draws' output with
the direct draws only, so it also passed when the records were read on
the CPU. Its records lived in a static array that is not guest memory,
so every indirect draw fell back to the CPU path as not imported.

The records now sit in a registered 64 KiB guest allocation, the test
turns on APS5_PROFILE_DRAW and reads the indirect-draw counters through
the new Graphics::IndirectDrawCounts, and it requires all four indirect
draws on the GPU path. It fails with APS5_NO_RECT_INDIRECT=1 and with
the IndirectDraw.cpp and Draw.cpp changes reverted (4 non-vertex path).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 23:20:51 +02:00
Savvanis SpyrosandClaude Opus 5.5 c56dbc6166 test(tools): build the select_tests fixture under a junction where Windows refuses symlinks
The fixture builds its project under a directory symlink so that the
paths CMake records differ from the resolved ones. Creating a symlink on
Windows needs SeCreateSymbolicLinkPrivilege, which a user without
Developer Mode or elevation lacks, so setUpClass failed with WinError
1314 and select_tests failed on every local Windows run. On that error
the link is now a directory junction, a reparse point realpath resolves
the same way. Where symlinks can be created nothing changes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-17 00:19:35 +03:00
Adrià 0dc15620d2 Merge pull request #6047 from MarcZX100/docs/gpu-testing-checklist-4458
docs: record GPU test coverage in pull request checklist
2026-10-16 23:18:09 +02:00
Adrià fc19485109 Merge pull request #6042 from wachi35676/docs/progress-history-readme
docs(progress): the README links the history page, not its chart
2026-10-16 23:17:41 +02:00
Adrià 7d728b1098 Merge pull request #6041 from wachi35676/docs/build-wasm-flag
docs(build): list the ANYPS5_BUILD_WASM flag
2026-10-16 23:17:04 +02:00
jradicandClaude Opus 5.5 75d29f5b3f fix(libkernel): allocate the Windows thread-local slot on first use
WindowsThreadLocal<T>::slot was a template static, so its dynamic
initialization was unordered against the timer self-test in Time.cpp.
With APS5_TRACE_TIMERS set, the self-test ran first, used slot 0 and
aborted every title with "Cannot bind native thread state". The slot is
now a function-local static. guest_nanosleep_timer_self_test runs
guest_nanosleep_tests with APS5_TRACE_TIMERS=1 on Windows.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01KwsvKtVsZDLefysUM9m2QS
2026-10-16 16:03:14 -05:00
ivica00 4a2b7d34f2 perf(agc): pipeline DMA_DATA by default without losing earlier writes
A copy reads its source when the pipeline runs it, so it sees the fill ahead of it. Large immediate fills stay buffer fills, host copies stay counted, and marker push and pop still update the queue.
2026-10-16 23:03:00 +02:00