Commit Graph
20967 Commits
Author SHA1 Message Date
3mro777o e036b873ee fix(libSceVdecsw): report the HEVC picture bit depth
Videodec2 now outputs 10-bit HEVC Main 10 frames, so the HEVC picture info
takes bitDepthLumaMinus8 and bitDepthChromaMinus8 from the decoded frame
instead of leaving them 0. The Main 10 stream moves to HevcFixture.hpp so the
Vdecsw test can decode it.
2026-10-22 22:16:55 +02:00
3mro777o 6a6395474c test(libSceVdecsw): check the HEVC conformance window
Decode a 64x36 HEVC picture, coded as 64x40, and check the conformance
window and frame cropping offsets in its picture info.
2026-10-22 22:16:36 +02:00
3mro777o 3aee4b3b09 feat(libSceVdecsw): implement sceVdecswGetHevcPictureInfo
Vdecsw read every decoded picture's info through Videodec2's AVC picture
info, which throws for HEVC, so an HEVC decoder failed on its first
picture. Videodec2 now hands Vdecsw a codec-independent picture header,
records whether an HEVC access unit starts with an IDR slice, and Vdecsw
keeps the AVC or the 0xb8-byte HEVC picture info for each picture.

The HEVC test stream moves to HevcFixture.hpp so the Vdecsw test can
decode it.
2026-10-22 22:16:36 +02:00
Dean 3bbd2321de Merge pull request #8468 from Gabrieljr42/feat/ajm-mp3-frame-metadata
feat(libSceAjm): parse CRC-protected and non-stereo MP3 metadata frames
2026-10-23 09:14:29 +13:00
ntamas94andClaude Fable 5.1 f8233a2738 fix(libScePad): open the special port with a handle that reads as disconnected
scePadOpen returned DEVICE_NOT_CONNECTED (0x80920007) for a special port
(type 2) since #3838, which guessed the console behaviour. A PS4 Pro on
firmware 10.71 with no special controller connected opens the special
port of any valid user and returns a handle: scePadRead on it returns one
record with connected false, scePadGetControllerInformation succeeds, and
scePadRead(-1) is INVALID_HANDLE.

Unity's PS4 input module opens the standard and the special port of a
user and keeps the pad handle only if both opens succeed; otherwise it
calls scePadRead with handle -1 every frame and the title never sees a
button. Knowledge is Power (CUSA09558) and Knowledge is Power: Decades
(CUSA12435) had no controller input for that reason.

The special port now opens PAD_SPECIAL_HANDLE, tracked apart from the
standard handle by scePadClose and scePadGetHandle. scePadRead and
scePadReadState on it return a zeroed record, scePadGetControllerInformation
and scePadDeviceClassParseData zeroed structures, and the other pad calls
reject it with INVALID_HANDLE. The standard handle still reads its own
queue, so the double read of one queue that #3838 fixed does not return.
scePadOpenExt is unchanged. The unmeasured parts are recorded in
docs/dev/debt/libScePad.md.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-22 22:11:04 +02:00
orezraeyandClaude Opus 5.5 c399333e7a docs(libkernel): record that released flexible pages keep their host memory
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:09:36 -03:00
orezraeyandClaude Opus 5.5 0db5b78405 test(libkernel): cover 4 KiB offsets in sceKernelReleaseFlexibleMemory
Measured on firmware 13.60: an address or length aligned to 4 KiB but
not to 16 KiB returns EINVAL.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:09:36 -03:00
orezraeyandClaude Opus 5.5 2f8177d7b4 fix(libkernel): keep the range sceKernelReleaseFlexibleMemory releases mapped
Measured on firmware 13.60: the released range stays mapped with its
protection and contents, and a fixed no-overwrite map over it fails
with ENOMEM; a null or unaligned address, an unaligned length or a
range that wraps returns EINVAL, checked before a zero length, which
returns 0, as does a range with nothing mapped.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 17:09:36 -03:00
MarcZX10 53d3d8674e test(net): constrain deterministic resolver failures 2026-10-22 20:07:41 +00:00
MarcZX10 d37f11e424 test(net): preserve real address-family failure coverage 2026-10-22 20:07:41 +00:00
Santhosh Kumar e592b170f4 chore: sync current main for FreeType curve bounds 2026-10-23 01:37:17 +05:30
Dean a0900b9d99 Merge pull request #8460 from orezraey/fix/pe-import-first-wide-paths
fix(allocator): take pe_import_first's file as a wide path on Windows
2026-10-23 09:06:09 +13:00
Braxton Atkinson 07bec523ad docs(libc): separate byte-case compatibility note 2026-10-22 15:00:23 -05:00
Braxton Atkinson ee057ea155 fix(libc): preserve errno across fmodf domain errors 2026-10-22 14:59:20 -05:00
milescovielloandClaude Opus 5.5 4ba0175ba2 test(agc): skip the truncated coverage case without two-sample depth targets
ExpectTruncated draws with a two-sample D32 depth target. On a device
whose framebufferDepthSampleCounts lacks 2, as lavapipe, the pipeline's
existing sample count check refused that depth target before the
truncated coverage check, and the test failed. The case now reports why
it was not tested: no two-sample depth targets, or neither mixed sample
extension with truncated coverage reduction.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 19:58:11 +00:00
milescovielloandClaude Opus 5.5 36559da793 feat(agc): draw one-sample color targets beside a multisampled depth target with sample 0's coverage
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 19:58:10 +00:00
orezraeyandClaude Opus 5.5 eebb009302 fix(libkernel): report AIO states as a PS5 does after the first read
Measured on firmware 13.60: the first poll or wait that reports a
finished request returns its plain state and later ones add bit
0x10000, while cancel returns the plain state and does not count as a
read; a request that fails completes with state 3 and the error in its
result, and the other requests of its batch still run.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 16:57:51 -03:00
orezraeyandClaude Opus 5.5 581a951db8 fix(libkernel): answer unknown AIO ids with ESRCH states as a PS5 does
Measured on firmware 13.60: an id that is not a live request, including
one already deleted, makes poll, wait, cancel and delete return 0 and
write 0x80020003 for it; delete makes an id unknown, and cancel leaves a
finished request's state unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 16:57:51 -03:00
orezraeyandClaude Opus 5.5 2730b6abe5 fix(libkernel): match the AIO batch, priority and parameter limits to PS5
Measured on firmware 13.60: submits take 1 to 128 requests at priority
1 to 3, the id lists of poll, wait, cancel and delete take 1 to 128 ids,
wait takes mode 1 or 2, and sceKernelAioSetParam takes a window and a
delayed count of 0 to 128, a split flag of 0 or 1 and, with split on,
split and chunk sizes of 1 to 0x1000000; everything else returns EINVAL
without writing. sceKernelAioInitializeParam writes the console's three
default scheduling structs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 16:57:51 -03:00
milescovielloandClaude Opus 5.5 2fbab7aff4 fix(agc): chain a linked pipeline's attachment sample counts to its create info
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 19:57:33 +00:00
milescovielloandClaude Opus 5.5 7c63ee6970 fix(agc): give a pipeline linked from libraries its attachment sample counts
An overrasterized draw (a multisampled rasterizer into one-sample color
targets, VK_NV_framebuffer_mixed_samples) chains
VkAttachmentSampleCountInfoNV into its pipeline. When the pipeline is
linked from graphics pipeline libraries, only the fragment output library
carried it, and the link and the background link-time-optimized relink
did not. The Khronos validation layer (1.4.363) then reports
VUID-vkCmdDraw-multisampledRenderToSingleSampled-07285 for every such
draw, as it does in agc_driver_pixel_sample_coverage, and not with
APS5_NO_GPL=1, where the pipeline is built whole.

Both links now chain a copy of the sample counts.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 19:57:33 +00:00
Yunus Shaikh 2cbaa96390 fix(shader): print memory instructions' pc and offset in the IR dump
The APS5_DUMP_IR dump showed every scalar load's immediate offset as 0.
An SMEM load keeps its immediate in the instruction's memory metadata:
MemoryFlags indexes Resources().memoryInfo, whose offset holds the
immediate plus 4 per component, while the soffset argument is the
constant 0 when the instruction has none. Buffer, address and shared
memory instructions keep their offsets there too. ProgramToString
printed the arguments, the type and the use count, but not the flags or
the metadata, so a dump could not tell 0x54 from 0x6c.

ProgramToString now appends " [pc=0x... off=0x...]" to every
instruction that carries memory metadata, and " [pc=0x... mem=?]" when
its index is past memoryInfo, since dumps run before validation. The
opcode set is one predicate, carriesMemoryInfo, which ValidateProgram
now also uses for its memory-info index check; the validator accepts and
rejects the same programs with the same messages.

https://github.com/boykopovar/AnyPS5/pull/9633#issuecomment-6349729587
Related: #9749.
2026-10-22 19:55:54 +00:00
Dean f6075c2f4a Merge pull request #8690 from JAB-dev/fix/audiopropagation-remove-inline-helpers
fix(libSceAudioPropagation): drop the SDK inline Init helpers from the export list
2026-10-23 08:54:28 +13:00
Dean 44602d61df Merge pull request #8660 from JJenkx/fix/videodec2-flush-without-pending
fix(libSceVideodec2): flush without draining when no picture is pending
2026-10-23 08:54:24 +13:00
Dean ea2b6d4077 Merge pull request #8611 from Ondra97/codex/fix-np-auth-unstarted-abort
fix(libSceNpAuth): reject completion queries before request start
2026-10-23 08:54:20 +13:00
Dean a661d12e30 Merge pull request #8375 from orezraey/fix/font-system-fonts-wide-env
fix(libSceFont): open fonts and the system font directory under non-ASCII paths on Windows
2026-10-23 08:54:15 +13:00
Dean a62feecd6c Merge pull request #7948 from Amoenus/codex/feat-native-owner-fmask
feat(agc): expose expanded FMASK for tracked native owners
2026-10-23 08:54:11 +13:00
cadenasynyster 67f700b4bf fix(libc): report ELOOP from opendir of a Windows file-type link loop
OpenNative returned ENOTDIR for any path whose own attributes lack FILE_ATTRIBUTE_DIRECTORY. A symbolic link created without SYMBOLIC_LINK_FLAG_DIRECTORY that points to itself is such a path, so opendir reported ENOTDIR where FreeBSD's lookup fails with ELOOP. A reparse point without the directory flag is now followed with CreateFileW, and ERROR_CANT_RESOLVE_FILENAME gives ELOOP. Any other result keeps ENOTDIR, including a file-type link whose target is a directory.

The guest_directory symbolic link loop check, skipped on Windows, now runs there with a file-type link and a directory-type link. MinGW's std::filesystem::create_symlink does not work on Windows, so the links are created with CreateSymbolicLinkW.
2026-10-22 21:52:35 +02:00
Dean 5c13a1be0f Merge pull request #8692 from JAB-dev/fix/ngs2-geom-listener-errors
fix(libSceNgs2): return INVALID_GEOM_FLAG and the listener-address error from sceNgs2GeomCalcListener
2026-10-23 08:51:25 +13:00
Claude c33e2892f6 fix(shader): translate v_mullit_f32 in f32 denormal modes 1 and 2
Denormal mode 2 flushes only the sources and mode 1 only the result, as
measured on RDNA2 (gfx1030), also with an inline or literal constant
factor. Both need the device to keep the f32 denormals the shader keeps,
so they translate only when the module declares DenormPreserve 32 and
throw otherwise; mode 1 with another f32 rounding throws as before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 22:46:00 +03:00
zmeizyandClaude Opus 5.5 cdee2b6a16 fix(shader): translate f32 min and max in f32 denormal modes 1 and 2
v_min_f32, v_max_f32, v_min3_f32, v_max3_f32 and v_med3_f32 follow only
bit 0 of the FLOAT_MODE f32 denormal field, as measured on RDNA2
(gfx1030): mode 2 flushes denormal inputs as mode 0 does, and mode 1
keeps them and returns a selected denormal unflushed as mode 3 does.
Mode 1 needs the device to keep those denormals, so it translates only
when the module declares DenormPreserve 32 and throws otherwise. Both
modes threw before.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 22:45:58 +03:00
zmeizyandClaude Opus 5.5 6a2614077a fix(shader): translate f32 add and multiply in f32 denormal modes 1 and 2
v_add_f32, v_sub_f32, v_subrev_f32, v_mul_f32 and v_mul_legacy_f32
follow the FLOAT_MODE f32 denormal field with f32 round to nearest
even, as measured on RDNA2 (gfx1030): mode 1 keeps denormal inputs and
flushes a denormal result, and mode 2 flushes denormal inputs and keeps
a denormal result. Both need the device to keep the f32 denormals the
shader keeps, so they translate only when the module declares
DenormPreserve 32 and throw otherwise. The result flush now applies
when only the result flush bit is set; it was skipped unless the input
flush bit was set too. A constant factor no longer skips the tiny
product check while denormal inputs are kept, as a kept denormal times
such a constant can still be tiny. Directed rounding in these modes
still throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-22 22:45:56 +03:00
Kang, Harry Zixuan f30acac3cf docs(agc): keep packed texture limitations with driver debt 2026-10-22 12:39:55 -07:00
Kang, Harry Zixuan 4f26c7e35f refactor(shader): isolate packed storage conversion from SINT stores 2026-10-22 12:39:54 -07:00
Kang, Harry Zixuan 812928af24 fix(agc): support packed 16-bit storage images 2026-10-22 12:39:54 -07:00
Adrià 001d132f47 Merge pull request #9636 from MarcZX10/codex/test-net-deterministic-resolver-failure
test(net): make resolver failures deterministic
2026-10-22 21:36:46 +02:00
Kraken 5dfd50502a chore(libc): refresh feupdateenv and preserve debt entries 2026-10-22 20:27:31 +01:00
cd0c8c1cf0 fix(shader): reuse completed pixel lane proofs
Memoize successful entry-lane proofs without retaining results that depend on active Phi cycles. Add regression coverage for saved EXEC-mask loops on narrower host subgroups.

Co-authored-by: Copilot <[email protected]>
Co-authored-by: Ondra97 <[email protected]>
2026-10-22 21:11:46 +02:00
Braxton Atkinson ada8c0b924 fix(png): mask low-bit grayscale transparency keys 2026-10-22 14:10:49 -05:00
Braxton Atkinson 9b40e1e9b6 fix(libs): keep byte case comparisons in the guest C locale 2026-10-22 14:10:45 -05:00
cadenasynysterandClaude Opus 5.5 84fc3594b8 test(libkernel): remove a leftover kernel_fcntl_probe.bin before guest_kernel_fcntl opens it
FileFlagsRoundTrip opens kernel_fcntl_probe.bin with O_CREAT but without O_TRUNC and removes it only when every check passes. A run that aborts leaves the file behind, and every later run then fails at the FIONREAD check because the file is longer than the five bytes the test writes. The test now removes the file before opening it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GtXavMkgCTCdmRpweviHcQ
2026-10-22 21:06:10 +02:00
cadenasynysterandClaude Opus 5.5 587cd64331 test(libSceSaveData): create the mount identity link with CreateSymbolicLinkW on Windows
MinGW's std::filesystem::create_directory_symlink always fails on Windows, so CheckEquivalentMounts never ran its symbolic link alias there and only checked the case alias. It now creates and removes the link with CreateSymbolicLinkW and RemoveDirectoryW, as SaveDataFileWriteFailure.cpp does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GtXavMkgCTCdmRpweviHcQ
2026-10-22 21:05:57 +02:00
cadenasynysterandClaude Opus 5.5 d22b6916a9 test(libkernel): create the readlink and lutimes test links with CreateSymbolicLinkW on Windows
MinGW's std::filesystem::create_symlink always fails on Windows, so the readlink checks in guest_kernel_sys and the lutimes checks in guest_file_timestamps skipped their link cases there. They now create the link with CreateSymbolicLinkW and SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE, as SaveDataFileWriteFailure.cpp does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01GtXavMkgCTCdmRpweviHcQ
2026-10-22 21:05:43 +02:00
Pacuka e5f394dd6c Merge remote-tracking branch 'origin/main' into fix/agc-mem-semaphore-address 2026-10-22 21:02:46 +02:00
Dean d6e7ab42df Merge pull request #6727 from simonbronk/fix/native-msaa-depth-unwritten-guest-access
fix(agc): retire an unwritten native multisample depth surface on guest access
2026-10-23 07:55:56 +13:00
Adrià 3a2ca40dab Merge pull request #9234 from mossyanwar/fix/relinker-linux-named-imports
fix(relinker): resolve symbol-name imports through NIDs on Linux
2026-10-22 20:54:22 +02:00
Adrià cd64efea1a Merge pull request #9481 from xXPBSXx/docs/debt-ajm-resample-ex-callsite
docs(debt): note that a title call of sceAjmBatchJobSetResampleParametersEx agrees with the argument registers
2026-10-22 20:51:02 +02:00
xdCloudy 1a1bb75b1e feat(libSceAgcDriver): build NOP data-write packets 2026-10-22 11:42:46 -07:00
xdCloudy 36a7a09dae feat(libSceAgcDriver): implement diagnostic fallbacks 2026-10-22 11:42:42 -07:00
xdCloudy c8febff306 feat(libSceNKWebKit): declare pending exports 2026-10-22 11:42:04 -07:00