Commit Graph
14017 Commits
Author SHA1 Message Date
Adrià e7784a03ee Merge pull request #4961 from Dripl1x/codex/shader-cache-utf8
fix(build): preserve UTF-8 shader cache source paths
2026-10-14 19:38:26 +02:00
Adrià 93d69edcc8 Merge pull request #4932 from fdfawef324/perf/recompiler-fma-mix-once
refactor(recompiler): emit the v_fma_mixlo/hi and v_interp_*_f16 emulation once per module
2026-10-14 19:37:58 +02:00
Adrià 1cbd74ed9d Merge pull request #4906 from nicolasfalesy/feat/savedata-name-prepare-for-transferring
refactor(libSceSaveData.native): name sceSaveDataPrepareForTransferring
2026-10-14 19:35:45 +02:00
Adrià d9bfa0f3ad Merge pull request #4841 from gjonn/fix/agc-store-pending-at-flip
fix(agc): store small pending storage results at each flip
2026-10-14 19:34:50 +02:00
Adrià a7d38a3f4f Merge pull request #4827 from QRMOE/fix-spirv-noopt-specialization
fix(shader): honor disabled optimization during specialization
2026-10-14 19:34:08 +02:00
Adrià 2f3adfb91b Merge pull request #4802 from ArjenS-LA/fix/relinker-output-collisions
fix(relinker): reject collisions between generated outputs
2026-10-14 19:33:36 +02:00
Adrià fe1ccd79b7 Merge pull request #4778 from xXPBSXx/fix/audioout2-port-state-channels-v2
fix(libSceAudioOut): report the port's channel count from sceAudioOut2PortGetState
2026-10-14 19:32:58 +02:00
billythemenace2andClaude Opus 5.5 dd8f2eb8ab fix(shader): store flatVolumeLineCompatible in the shader disk cache
Raise the pinned ImageResource field count and the minimum image record
size for the new field, and move the disk format to 34.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-14 18:32:32 +01:00
Adrià ec92b9458c Merge pull request #4771 from Roojool/contrib/g10-registration-utf8
fix(tools): decode Ninja targets using its build-file encoding
2026-10-14 19:32:28 +02:00
billythemenace2andClaude Opus 5.5 bd09862e55 fix(shader): read 1D T#s through 3D image_sample and image_load accesses
A 3D image access bound to a 1D T# matched no runtime image mode and threw
"image descriptor is incompatible with the static runtime image interface"
(SONIC SUPERSTARS, PPSA06888, which reads a 1x1 1D T# as 3D with a plain
image_sample and an image_load). Add a 1D mode for 3D accesses whose only
uses are image_sample_lz, plain image_sample or mip-less image_load.

Measured on RDNA1 (RX 5700 XT, gfx1010) with the hardware oracle:
image_sample_lz reads the texel u selects and ignores v and r with every
addressing mode; a plain image_sample takes its texel and LOD from u alone;
image_load reads the x texel for any y when z is 0 and returns zero for any
other z, as the 3D-on-2D load measured in #2023 does.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01QQNVXyqeecpyneonkYL6H1
2026-10-14 18:32:22 +01:00
Adrià 110cc139ff Merge pull request #4770 from ee6aba54/fix/fiber-frame-chain
fix(libSceFiber): end the frame chain of a fiber with a null frame
2026-10-14 19:32:07 +02:00
Adrià db06cb4972 Merge pull request #4732 from fdfawef324/build/shader-cache-version-source
build(recompiler): generate the shader cache version as a source file
2026-10-14 19:31:27 +02:00
Yunus Shaikh 4211a41177 refactor(libSceNet): wait for a local address after sceNetRecvmsg's socket type check 2026-10-14 10:30:23 -07:00
Kovalev Vladislav 62d80787be test(agc): require the kernel device for DMA-BUF coverage 2026-10-14 23:29:41 +06:00
Kovalev Vladislav b617576af0 test(agc): keep recorder runtime path scoped to its test 2026-10-14 23:29:40 +06:00
xXPBSXxandClaude Sonnet 5.5 c6dcead34c test(libkernel): check dup2 onto a guest socket in guest_socket_descriptor_flags
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 19:28:41 +02:00
xXPBSXxandClaude Sonnet 5.5 84aa2349f8 fix(libkernel): answer F_GETFD and F_SETFD on a guest socket
fcntl on a guest socket handled F_GETFL and F_SETFL only and failed every other command with EINVAL, so libcurl's fcntl(fd, F_SETFD, FD_CLOEXEC) on a new socket failed (ProsperoRadio PPSA99001, traced by screamm on #4796). Record FD_CLOEXEC per socket descriptor: F_SETFD sets or clears it, F_GETFD reads it, SOCK_CLOEXEC sets it at creation, and dup, dup2 and close start without it, as FreeBSD's kern_fcntl and kern_dup do.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 19:28:40 +02:00
Ondra97 6bddb1aa2c fix(pad): read controller commands from Unicode paths 2026-10-14 19:28:33 +02:00
Kovalev Vladislav 68f1c77477 test(agc): bound the full recorder run to thirty seconds 2026-10-14 23:28:27 +06:00
blawesom 050f5911e2 test(agc): register the full recorder run with ctest
The full run of agc_driver_recorder_tests (no arguments) was the only
section of the binary no ctest test covered: the registered entries
run the -only flags, which skip the main flow from readTrackingTests
through drawSnapshotPatchTests. Both failures that kept it off the
run are resolved on main: the (w) import window and (s) stale
generation sections now check generations around the storage image's
own import (433302be), and the lavapipe partial publish copy is
preserved when device writes reach the write watch (60f12c88).

Run on a Radeon RX 9070 (RADV, Mesa 26.2.4), Linux 7.2: 3/3 pass,
0.5-0.9 s per run; the full run joins the existing
agc_driver_recorder_tests entries in the same CMake block.
2026-10-14 23:28:26 +06:00
Tyler WesterbergandClaude Opus 5.5 18522aeabb fix(agc): wait for queued registration preparations before accepting a submission
Since registered shaders are prepared in the background, a draw whose shader
was registered just before could wait seconds for its preparation inside the
queue worker. Under CPU load Goat Simulator 3's first submissions took ~3.7 s;
the title treated the GPU as hung, stopped submitting, and its 10 s garbage
collection timeout crashed it on every launch. Driver::Submit now waits for
the preparations queued before it, on the submitting thread, before the
commands reach the GPU.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 19:26:46 +02:00
alfalfa-star 86c66916a6 test(agc): sample a 128x128 D16 cube whose detiled rows are padded
Taken from #4722 (Kena: Bridge of Spirits, PPSA01802): its point-light
shadow maps are 128x128 D16 cubes read through an R16 view in a 64 KiB Z
swizzle, whose block holds 256x128 texels of 16 bits, so each detiled
row is 512 bytes and each face 64 KiB instead of 256 bytes and 32 KiB.
Face 0 comes from the live surface, faces 1-5 from guest memory.
2026-10-14 19:21:40 +02:00
Gustavo Ariel Gamarra Rojas ad50734327 test(agc): sample a small D16 cube whose linear slices are padded
A 32x32 D16 depth surface read as a six-face cube through a depth-bits
R16_UINT view: its faces are narrower than a 64 KiB block, so the
texture's linear slices are 16384 bytes, not the plane's 2048. Face 0
comes from the live surface, faces 1-5 from guest memory. The draw
helper now sizes its color target with ColorTargetLayout so the small
target is accepted.
2026-10-14 19:21:40 +02:00
Gustavo Ariel Gamarra Rojas 6b480cc2be fix(agc): copy a depth surface's plane through the texture's padded linear slices
The plane copy laid its staging buffer out as tight slices while the
detiler writes the guest's linear layout, which pads rows and slices: a
32x32 D16 cube in a 64 KiB swizzle has 16384-byte slices, not 2048, and a
128x128 one has 512-byte rows and 64 KiB slices. Each region in record
now takes the layer's LinearLayerOffset plus the mip's linear offset and
its pitch as the row length, for both the slices copied from a live
depth surface and the ones detiled from guest memory. The staging buffer
grows to the padded size, keeping the buffer it replaces alive for
copies already recorded, and a mismatch says which geometry it saw.
2026-10-14 19:21:26 +02:00
ChadandClaude Opus 5.5 5bf18f0d71 perf(libc): remember clean pages once per run in Windows write collects
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 12:21:19 -05:00
Nicolas FalesyandClaude Opus 5.5 5dcf28d36c fix(libkernel): answer fcntl status flags on libSceNet sockets
With libSceNet sockets on ordinary descriptor numbers (#4391), a title
that makes a libSceNet socket non-blocking with plain fcntl(F_GETFL) and
fcntl(F_SETFL, O_NONBLOCK) reached File::Fcntl, whose classification
throws for a socket. libSceNet now registers a status control with
libkernel, like its option setter: F_GETFL returns O_RDWR with the
socket's non-blocking flag, F_SETFL sets it through SO_NBIO, as fcntl
already does for libkernel sockets. ProsperoLight (PPSA99002) stopped
here on Linux.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017WeVmjnnPPKdxVTpr2Vjtw
2026-10-14 19:19:54 +02:00
Adrià Franch 31e53e53d7 fix(libSceSaveData.native): drop the duplicate APS5_EXPORT of the real name 2026-10-14 19:17:47 +02:00
Nicolas FalesyandClaude Opus 5.5 204c2ac4af refactor(libSceSaveData.native): name sceSaveDataPrepareForTransferring
The NID RvID8BVeg+g, declared as sceSaveDataUnknown_RvID8BVeg for
Minecraft (PPSA17221), hashes to sceSaveDataPrepareForTransferring. The
name is not in aerolib; it was found by combining words from the
libSceSaveData names that are. Behaviour is unchanged: it still throws,
now naming the real function.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017WeVmjnnPPKdxVTpr2Vjtw
2026-10-14 19:17:41 +02:00
Adrià FranchandClaude 58b2245027 docs(debt): record type-0 texture descriptors bound as null images
Co-Authored-By: Claude <[email protected]>
2026-10-14 19:17:15 +02:00
MarcZX100 c280018b0b fix(agc): treat type-0 texture descriptors as null 2026-10-14 19:17:15 +02:00
Adrià e154f56585 Merge pull request #5844 from p3n1cillin/claude/audioout-ex-open
feat(libSceAudioOut): open HDMI bitstream ports with sceAudioOutExOpen
2026-10-14 19:17:02 +02:00
Adrià f3b5daaf85 Merge pull request #4836 from dantdmdarealguy/docs/input-touchpad-fingers
docs(input): describe the forwarded touchpad fingers and the View button
2026-10-14 19:14:47 +02:00
Adrià b60e0bc0a5 Merge pull request #4676 from milescoviello/fix/socket-msg-dontwait
fix(libkernel): accept MSG_DONTWAIT in the socket send and receive calls
2026-10-14 19:13:53 +02:00
Adrià 3864da5959 Merge pull request #3909 from GalaxyGamingFR/fix/conventions-doc-link-code-blocks
fix(conventions): ignore code blocks when checking doc links
2026-10-14 19:13:06 +02:00
Adrià 5ef619a914 Merge pull request #5813 from eliyarson/trace-drop-detail
feat(agc): report which trace threads dropped events and where their buffers filled
2026-10-14 19:10:18 +02:00
Adrià c14fd87044 Merge pull request #4721 from fdfawef324/build/stable-import-libraries
build(libs): keep import libraries stable so a source edit relinks one library
2026-10-14 19:08:35 +02:00
Adrià Franch 3c17b3dbb2 docs(debt): update the relative patch index line for instanced draws 2026-10-14 19:08:18 +02:00
Alex ColliniandClaude Opus 5.5 30e85a3a2e fix(shader): number an instanced draw's hull patches across its instances
With GE_CNTL.BREAK_WAVE_AT_EOI clear, the instances of a tessellated draw share
hull threadgroups: the relative patch index counts on through the instances,
while the host's PrimitiveID restarts with each one. The local stage now passes
its draw-relative instance (InstanceIndex - BaseInstance) to the hull, which
numbers its patches instance * patches-per-instance + PrimitiveID before taking
(mod PRIM_GRP_SIZE) mod NUM_PATCHES. Instances that start a threadgroup anyway
(BREAK_WAVE_AT_EOI, or patches per instance a multiple of the group) keep the
per-instance PrimitiveID.

This replaces #4201's refusal of a hull or domain that uses its relative index
as data while BREAK_WAVE_AT_EOI is clear, and builds on its decode of the bit
(breakAtInstance, request serialization and draw keys).

- Hull and domain cache keys hold the patches per instance instead of the bit;
  an indirect draw recompiles its hull and domain for each record's instance
  count.
- The device enables shaderDrawParameters when available. Without it, a hull
  using its relative index as data in such a draw is refused, as is a domain
  doing so (passing the instance on to the domain is not implemented).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 19:08:18 +02:00
Adrià 0ccf53dda7 Merge pull request #4703 from AlxcBTW/fix/input-config-non-ascii-path
fix(input): read the input file from paths with non-ASCII characters
2026-10-14 19:08:06 +02:00
Dean 19e020a274 Merge pull request #1186 from MichonGoddijn231849/feat/depth-plane-array-base-slice
feat(agc): sample depth plane arrays from a later base slice
2026-10-15 06:04:53 +13:00
Yunus Shaikh 7126e05ca3 docs: say what the overlay's FPS and GPU lines count 2026-10-14 10:01:08 -07:00
Rujul Talekar 661b1671ff feat(libc): implement collate<wchar_t>::_Getcat 2026-10-14 22:27:59 +05:30
Adrià FranchandClaude cd0c6ed16e test(libkernel): do not stat the dangling link on Windows
stat of a dangling link reaches FillFileStat and throws on the CI toolchain; it is not part of this change.

Co-Authored-By: Claude <[email protected]>
2026-10-14 18:55:36 +02:00
Itamar Medyoni 52a3b15796 feat(libkernel): report relative symbolic links in lstat on Windows
lstat of a Windows symbolic link threw, although symlink creates links
with relative targets on Windows and readlink reads them. Report such a
link as S_IFLNK with its own identity and times and the length of its
target as st_size, through the reparse reader readlink already used,
now shared from libkernel. Links with absolute targets, junctions and
other reparse points still throw, as for readlink.
2026-10-14 18:55:31 +02:00
Eli Yarson a53332472c feat(agc): report which trace threads dropped events and where their buffers filled
The trace summary line keeps `trace_dropped` as before: true when any
thread lost a slice, any thread's totals table was full, or the gpu
track was full. When it is true, the line now also carries
`trace_dropped_threads`, one entry per affected thread name, so the reader
can tell which thread lost data and how much. Threads that share a
name, such as the shader prepare threads, share one entry: losses are
summed, the earliest fill is kept and totals_full is true if any is.

Each entry has `events_full_after_s`, the seconds from the first
present of the window to the start of the first lost slice. It is
absent for `gpu` and in every summary line (windowed frames/seconds
and APS5_TRACE_SUMMARY_EVERY) whenever the first lost slice starts
outside the line's span of presents, including a slice whose scope
began before the window opened or one lost after the last present.
`events_lost` is the number of slices not recorded and is absent when
0; in interval lines it counts the buffer's losses since it started.
`totals_full` is true when the thread's totals table overflowed, which
makes the summary numbers incomplete; a thread with only `events_lost`
has complete totals.

The Chrome trace gets a `trace buffer full` instant event on a thread
at the point where its buffer filled.

BUILD.md documents the new fields and the event.

`trace_dropped` is unchanged, and when nothing drops the default output
is byte-identical to before.

Refs #5786
Depends on #5808
2026-10-14 18:54:44 +02:00
AlxcBTWandClaude Opus 5.5 b8ed78902f fix(input): read the input file from paths with non-ASCII characters
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 18:52:30 +02:00
mrfelek e91b8ba7d3 test(agc): skip the sparse dma-buf import tests when udmabuf size_limit_mb is above 1024
Both tests build a range one chunk above udmabuf's size_limit_mb. When the limit is set very high (for example to its maximum, as a workaround for a dma-buf import larger than the default 64 MB), that range is petabytes and mmap fails: agc_host_import_sparse stopped with 'cannot reserve the guest range' and agc_driver_sparse_dma_buf_import with 'cannot map the backing file'. The driver does not take the sparse path for such a limit either, so there is nothing to test; both now skip, which ctest reports as skipped.
2026-10-14 18:47:37 +02:00
Ondra97 d902afe2d4 fix(libc): create noreplace streams exclusively 2026-10-14 18:47:19 +02:00
Kurenaiiiii 36ffe08690 feat(libSceNpWebApi2): accept PushEventAbortHandle for known contexts 2026-10-14 22:11:11 +05:30
Kurenaiiiii b4ee57e6ff fix(libSceGameUpdate): return INVALID_ARGUMENT for null entitlement label 2026-10-14 22:11:08 +05:30