Commit Graph
6138 Commits
Author SHA1 Message Date
QRMOE 4eb23fc2f3 test(shader): execute scalar and vector bitfield masks
Exercise 4096 width/offset inputs through Vulkan and preserve both SCC values. AI-assisted: yes.
2026-10-10 02:13:34 +02:00
QRMOE f7f987cf74 test(shader): cover bitfield-mask boundary folding
Cover all width/offset pairs and independent ignored upper operand bits for scalar and vector masks. AI-assisted: yes.
2026-10-10 02:13:34 +02:00
QRMOE e65a707f61 fix(shader): truncate overflowing 32-bit bitfield masks
Construct the low-bit mask at offset zero, then shift it in 32-bit arithmetic. AI-assisted: yes.
2026-10-10 02:13:34 +02:00
Mohd FaourandClaude Fable 5.1 0aae158635 fix(libc): convert times into the guest's 56-byte tm on Windows
gmtime, localtime, mktime, strftime and asctime took and returned the
host std::tm. The guest's FreeBSD tm has tm_gmtoff and tm_zone after the
nine calendar fields, so on Windows, where std::tm is 36 bytes, a title
reading those fields read past the thread-local result, and gmtime_s left
them unwritten. Windows gmtime_s also accepts only 1969-12-31 12:00 to
3001-01-19 21:59 UTC, where the guest libc converts any time.

Convert through a GuestTm with the guest layout on both hosts. Compute
the UTC fields from the day count, so every time whose year fits an int
converts, and on Windows take the local offset and zone name from the
CRT. gmtime reports the zone as UTC like the guest libc. localtime and
mktime keep the CRT's range on Windows; recorded in TechnicalDebt.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-10 02:13:17 +02:00
Adrià 1f0c9fef56 Merge pull request #2473 from Celegans12/fix/videoout-vrr-duplicate-export
fix(videoout): remove duplicate VRR exports
2026-10-10 02:10:59 +02:00
78d92881b0 fix(libkernel): throw when the Linux guest unwind lookup fails
As requested in review: a failed sceKernelGetModuleInfoFromAddr no longer
reports an empty answer. Adds a failure test (symbol interposition) and
extends the metadata test (EH record walk, terminator, no-header DSO).

Co-authored-by: jweidenh <[email protected]>
Co-Authored-By: Claude <[email protected]>
2026-10-10 02:10:08 +02:00
clem-gbandClaude Opus 5.5 1bd1923718 fix(libkernel): report guest unwind tables in sceKernelGetModuleInfoForUnwind on Linux
A title that ships its own libc.prx unwinds C++ exceptions with that
libc's libunwind, which asks sceKernelGetModuleInfoForUnwind where each
frame's eh_frame is. On Linux the call always reported no tables, so
no C++ exception thrown in guest code could be caught. For the main
executable and .guest.prx images, report the PT_GNU_EH_FRAME tables
that sceKernelGetModuleInfoFromAddr finds, as Windows does from
.ehmeta. Other host images still report none.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HeC9bA3n74TzJRYv9AgBE8
2026-10-10 02:09:56 +02:00
edandClaude Opus 5.5 a83bfa6813 fix(hw-oracle): select the AMDGPU ELF emulation when linking kernels
LLD built for a MinGW host runs the COFF linker when ld.lld gets no -m option,
so it rejects the AMDGPU object with "unknown file type" and the
hardware_oracle test fails on Windows with WinLibs LLVM in PATH. Passing
-m elf64_amdgpu selects the ELF linker on every host.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-09 17:09:53 -07:00
Arvind FrøilandandClaude Opus 5.5 258cfddaf5 test(relinker): keep only the generated decoder length table
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 09:09:38 +09:00
Celegans12 c4b7a7453e feat(agc): implement 10_11_11 unorm color targets through 32-bit uint attachments
CB_COLOR_INFO format 6 (COLOR_10_11_11) with NUMBER_UNORM threw in
DecodeColorFormat: Vulkan has only the B10G11R11 float format. Such a
target now renders into an R32_UINT attachment in the layout of
format-30 images (unorm11 R and G in bits 0-21, unorm10 B in bits
22-31), so later image loads of the surface read the same words.

The target format is draw state, so the packing is a specialization of
the registered pixel shader: every float MRT export also computes the
packed word (EmitFormatStoreComponent) behind specialization constant
ExportPackingBase + target, and the specialized module turns a packed
target's output into a uint4 that ValidateShaders expects. The new
request field targetExportPacking is in the module key, the result memo,
the draw key and the serialized request (version 14). Blending, partial
RGB writes, UNORM16/SNORM16/UINT16 exports, DCC and ROUND_MODE throw.
2026-10-10 02:09:27 +02:00
Zheorgyan 27e6ad1ad2 feat(agc): bind storage buffers update-after-bind above the per-stage limit 2026-10-10 02:08:15 +02:00
hamb3r 14f5572fca test(libkernel): cover exception delivery during mutex wait 2026-10-10 03:06:48 +03:00
hamb3r 2d783b7962 fix(libkernel): keep Unity GC delivery out of MinGW TLS waits 2026-10-10 03:06:40 +03:00
Adrià Franch bb54bffeaa fix(net): lock the memory pool stats with the host mutex type 2026-10-10 02:06:08 +02:00
Roojool a0f42946e5 fix(net): use native Windows condition waits for empty epoll 2026-10-10 02:05:23 +02:00
TideOPL 3fba616bb5 test(agc): look up a pending surface aliased by a pending mip chain
agc_driver_pending_exact_surface writes mip 0 of a 2-mip 256x256 surface and then a 1-mip surface at the same address. The chain's mip 0 lies past the 1-mip surface's bytes, so both images stay pending, the chain first. A lookup of the 1-mip size must return the 1-mip image, and with only the chain pending it must still return the chain. On main the first lookup returns the chain.
2026-10-10 01:03:15 +01:00
Zurisen 2356aba27b fix(net): report EPIPE for a send after shutdown on Windows
Winsock fails send, sendto and sendmsg on a socket shut down for writing
with WSAESHUTDOWN, which neither Windows error map handled, so libkernel
and libSceNet reported EIO. FreeBSD reports EPIPE there, and the Linux
maps already translate the host's EPIPE to 32. Map WSAESHUTDOWN to 32
in both.
2026-10-10 02:02:29 +02:00
TideOPL c52c005858 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/agc-pending-exact-surface 2026-10-10 01:00:17 +01:00
ArjenS-LA 705e49d407 fix(libkernel): preserve Windows file timestamp precision 2026-10-10 01:51:56 +02:00
TideOPL 46606e9c73 test(agc): cover depth surface lookups of reused memory
agc_driver_graphics registers a D32 and a D16 surface on a mock device and looks up views at their addresses. Views of the surface's own extent in R32F or R16, and T#s that read the raw depth bits, sample the depth plane; a view of another extent, a 2D array view of another extent, an R11G11B10 view, an R32 uint view without a depth layout and an R32F view of a D16 surface return null and take the ordinary texture path. On main the first of these throws in DepthSurface::Sampled.
2026-10-10 00:44:40 +01:00
hugodearaujoandClaude Opus 5.5 cadcbfd3a8 fix(videoout): answer output mode queries with the console's codes
Measured on a PS5 (firmware 13.60) through dlopen of
libSceVideoOut.sprx on a handle the payload opened.
sceVideoOutInitializeOutputOptions writes 0xFF to byte 2 of the 64-byte
options and returns INVALID_ADDRESS for a null pointer.
sceVideoOutIsOutputSupported checks the handle, then the reserved
arguments, then the mode, then the options. It never answers 0: a mode
the display lacks returns UNSUPPORTED_OUTPUT_MODE, and a value that is
not a mode returns 0x8029001E. Options must keep the initialized words,
except word 3.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 01:42:40 +02:00
overlordxrz-source 8a41d280af feat(libkernel): implement sceKernelGetModuleInfo
Fill takes either info struct, so sceKernelGetModuleInfo reports the
name and segments sceKernelGetModuleInfoFromAddr reports for the same
image, on Linux and Windows.
2026-10-09 19:39:49 -04:00
overlordxrz-source 6d42f3a910 feat(libkernel): implement sceKernelGetModuleList 2026-10-09 19:39:49 -04:00
Adrià FranchandClaude ec2df2691a docs(tech-debt): record the FORCE_DEGAMMA measurement on RDNA2
Co-Authored-By: Claude <[email protected]>
2026-10-10 01:38:23 +02:00
Celegans12 619ec7ad39 feat(agc): accept samplers that force sRGB decoding of sRGB textures
A sampler with FORCE_DEGAMMA (S# word 0 bit 20) threw at decode, so
every dispatch or draw sampling through one was skipped.

DecodeSamplerResource now records the bit, but accepts it only for a
caller that pairs the sampler with its images. The direct sampler
binding does, and RequireDegammaFormat checks each sampled image
against its paired samplers: only already sRGB formats (8, 8_8 and
8_8_8_8 SRGB, BC1, BC2, BC3 and BC7 SRGB) pass, decoded once, as
shadPS4 (PS4) models it. Other textures and unpaired decodes still
throw; gfx10 behaviour is not measured.
2026-10-10 01:38:17 +02:00
TideOPL 430b8e0e36 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/agc-depth-memory-reuse 2026-10-10 00:38:01 +01:00
Adrià a291ae0f88 Merge pull request #1483 from Aryansh1520/fix/libkernel-mutex-destroy-busy
fix(libkernel): return EBUSY when destroying a locked mutex
2026-10-10 01:32:32 +02:00
popcoder565andClaude Opus 5.5 b2cde4a0f2 fix(audio): pace blocking audio calls with a high-resolution timer
On Windows, nanosleep and this_thread::sleep_for/sleep_until go
through winpthreads, which ends a wait on a 15.6 ms GetTickCount64
step. Blocking sceAudioOutOutput and sceAudioOut2ContextPush calls
returned in bursts about every 16 ms, a blocking sceAudio3dPortPush
ran at about 68 % of real time, and sceAudioInInput without a device
woke anywhere from 1 ms to 31 ms apart. They now sleep with
PreciseSleepUs or the new PreciseSleepUntil.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 01:31:57 +02:00
Adrià 787239eca5 Merge pull request #1459 from nauroth/claude/strtol-c17-prefix
fix(libc): stop the strtol family at a binary prefix on Linux
2026-10-10 01:31:16 +02:00
Jan ŠléglandClaude Fable 5.1 c26c1cae5b fix(libkernel): block guest signals by FreeBSD's bit n - 1
sigprocmask keeps the first word of the title's set as it is, where
FreeBSD keeps signal n at bit n - 1 (_SIG_BIT), but Dispatch tested bit
n. A title that blocked SIGTERM with a FreeBSD-built set (bit 14) was
not protected, and a set with bit 15 blocked SIGTERM instead of SIGURG.
Dispatch now tests bit n - 1; the stored mask and the set returned by
sigprocmask are unchanged.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-10 01:30:55 +02:00
Adrià 5cb716a6a3 Merge pull request #1351 from MarcZX100/test/register-file-streams
test(libc): register file stream coverage
2026-10-10 01:30:36 +02:00
Adrià 2edaf7f460 Merge pull request #1310 from TibixDev/pr/write-tracking-range-scans
perf(memory): reduce repeated write-tracking range scans
2026-10-10 01:29:30 +02:00
Adrià b02ea5f5ea Merge pull request #1309 from TibixDev/pr/tracked-backing-writes
perf(memory): write tracked direct memory through backing views
2026-10-10 01:29:11 +02:00
Adrià FranchandClaude 8404c4987d docs(technicaldebt): move the ordered not-equal line away from the f32 denormal entries
Co-Authored-By: Claude <[email protected]>
2026-10-10 01:28:00 +02:00
Adrià ff8961dfbc Merge pull request #1102 from jeffrey12cali/fix/module-args-on-linux
fix(libkernel): pass module args and argp to runtime-loaded modules on Linux
2026-10-10 01:27:59 +02:00
Adrià bb1a726e6e Merge pull request #1466 from LeandroLP23/fix/kernel-download0-at-start
fix(kernel): create /download0 at start-up when the title declares download data
2026-10-10 01:27:57 +02:00
LeandroLP23andClaude Opus 5.5 4f03d9f4d6 fix(shader): emit ordered not-equal through an integer NaN check
The AMD Windows driver returns 1 for a NaN operand when any float form
of ordered not-equal feeds a ballot on a 32-wide subgroup, which is how
e32 compares are read in wave32. FPOrdNotEqual32 is now emitted as an
unordered not-equal with both operands checked for NaN on their bits,
which gives the same result for every input.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 01:27:52 +02:00
Tharun Balaji 204a5e7a42 test(relinker): cover relocation table bounds in C++ under both output modes 2026-10-10 01:26:27 +02:00
Tharun Balaji bef3286e81 fix(relinker): bound DT_RELA table range 2026-10-10 01:26:27 +02:00
Adrià 8c6780d606 Merge pull request #1300 from TibixDev/pr/ngs2-atrac9-streaming
fix(ngs2): decode ATRAC9 across streamed waveform blocks
2026-10-10 01:25:02 +02:00
Adrià 76bff21fbe Merge pull request #1421 from popcoder565/fix/kernel-raise-exception-ntcontinue
fix(libkernel): stop losing and deadlocking sceKernelRaiseException deliveries on Windows
2026-10-10 01:23:17 +02:00
Adrià Franch 995de0c819 fix(agc): bump the shader disk cache format version for the new image fields
The ImageResource layout change needs its own version: main is already at 21.
2026-10-10 01:22:28 +02:00
Gjon Gojcevic e8b24afecd feat(agc): fold samples of views whose channels all select constants
When every dst_sel of a sampled view selects constant 0 or 1, a sample
or gather returns that constant whatever the texel, filter, LOD or
coordinates. Such placeholder views can have a dimension the static
runtime image interface has no mode for (a 3D view under a 2D sample,
a 1D view under a 2D gather), and a 3D one paired with an unnormalized
sampler fails the unnormalized proof.

A direct sampled image whose accesses are all non-compare samples or
gathers gets three constant runtime modes (float, uint, sint). The mode
is selected when all four dst_sel are 0 or 1, unless the view is FMASK,
depth bits, converted or sRGB-decoded. In it the emitter returns each
channel's constant (the dmask channel's, in all four texels, for a
gather) from the image's swizzle specialization constants, and the
image is left unbound. ProveUnnormalized skips the mode after the
run-time-selected check, so table roots still throw.
2026-10-10 01:22:21 +02:00
Adrià 32064d31fc Merge pull request #1401 from xsvm/perf/relinker-in-place-substitutions
perf(relinker): write in-place --to-intel substitutions directly
2026-10-10 01:21:28 +02:00
Adrià c5424ab69c Merge pull request #1916 from johnmaia/feat/libkernel-sigaction
feat(libkernel): implement sigaction
2026-10-10 01:20:54 +02:00
Adrià d992f76744 Merge pull request #1335 from TibixDev/pr/uniform-pattern-fill
perf(agc): handle uniform pattern-fill kernels as clears
2026-10-10 01:20:53 +02:00
Adrià 00dd2ba844 Merge pull request #1017 from NahuelGenchi/fix/v-fma-f64-subnormals
fix(shader): round v_fma_f64 once for subnormal operands and results
2026-10-10 01:19:26 +02:00
Adrià a12eda11f4 Merge pull request #1280 from TheAggie/perf/recompiler-bda-note-load
perf(recompiler): load the written-page slot before the CAS
2026-10-10 01:18:05 +02:00
Adrià 5cb747c146 Merge pull request #1260 from MarcZX100/fix/savedata-file-clock-compat
fix(SaveData): use C++20 file clock conversion
2026-10-10 01:11:50 +02:00
Adrià 58706dc2d9 Merge pull request #1225 from Pedroj-64/fix/video-out-present-shutdown-failure
fix(videoout): report GPU driver shutdown failure from the present thread at Shutdown
2026-10-10 01:10:19 +02:00