Commit Graph
7981 Commits
Author SHA1 Message Date
Adrià 781b33d3ca Merge pull request #4821 from Lorkydey/feat/shader-vertex-user-data-tail
feat(shader): link raw vertex prologs through user-data tails
2026-10-14 13:57:10 +02:00
Ondra97 1effd67b70 feat(agc): configure trace event buffers 2026-10-14 13:53:57 +02:00
xXPBSXxandClaude Sonnet 5.5 5a7f183a3d fix(libSceAgcDriver): return 0 from sceAgcDriverRegisterDefaultOwner
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 13:52:32 +02:00
1402c6c1d8 feat(agc): report device losses with VK_EXT_device_fault and dispatch checkpoints
A device that supports VK_EXT_device_fault reports, on the first
VK_ERROR_DEVICE_LOST a check sees, the fault description, the faulting
addresses (invalid reads and writes, or the instruction pointers of waves
still running when the device hung) and the vendor fault codes.
APS5_GPU_CHECKPOINTS=1 records a VK_NV_device_diagnostic_checkpoints
marker with the program address before each guest dispatch and prints the
last markers the GPU reached, which names the dispatch that hung. Without
either extension nothing changes.

Test: agc_device_fault drives the report through mock
vkGetDeviceFaultInfoEXT and vkGetQueueCheckpointDataNV entry points.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-authored-by: overlordxrz-source <[email protected]>
2026-10-14 13:50:52 +02:00
Adrià FranchandClaude 7956950906 docs: record the haptic-to-rumble approximation in TechnicalDebt
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:45:10 +02:00
Adrià Franch 188de5b17f fix(libSceJson2): drop setNullAccessCallBack from the not-implemented export test and debt line 2026-10-14 13:44:02 +02:00
Sasha PapoandClaude Opus 5.5 d756f525fc feat(agc): store pending storage-image results before each GPU label with APS5_STORE_AT_LABEL
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 13:40:18 +02:00
pushkarreddyy e1d402c6ca feat(libSceAgcDriver): support secondary LOD bias and relax unnormalized coordinate filters 2026-10-14 17:07:46 +05:30
DavidandClaude Fable 5.1 7cc6baf118 feat(libSceAjm.native): implement the M4AAC decoder
Ghost of Yotei (PPSA26344, v1.008, eboot 0x2e1cfc) creates an M4AAC
instance (codec 2) and calls sceAjmBatchJobControl with flags
0x200000006000 (RESET | INITIALIZE | SIDEBAND_GAPLESS_DECODE), 8 bytes of
gapless decode plus 8 bytes of M4AAC initialize parameters and an 8-byte
result (#884); INITIALIZE for M4AAC threw on main.

- INITIALIZE (control and sceAjmBatchJobInitialize) reads the 8-byte
  {config type (1 ADTS, 2 raw), sampling frequency index} block of
  shadPS4 ajm_aac.h at 443f0224; an invalid type or a raw index above 11
  returns the invalid parameter result. Raw input is configured from the
  instance channels (0 is stereo) as in shadPS4 ajm_aac.cpp.
- RUN decodes ADTS frames (length from the header) and raw access units
  (the whole input, as fdk-aac's raw transport) with FFmpeg's AAC decoder
  into the instance's S16, S32 or float PCM, with the framework's gapless,
  resampling, stream, format and multiple-frames sidebands.
- Without ENABLE_NONDELAY_OUTPUT the first two frames after
  initialization or reset produce no output, as in shadPS4. A decoder
  error returns CODEC_ERROR | FATAL. The codec info is {heaac, reserved};
  the format reports the last frame's bitrate with fdk-aac's formula.
- Throws for what the sources do not settle: ADTS resynchronization,
  profiles other than AAC LC, several raw data blocks per frame, channel
  configurations other than 1, 2 and 6, more channels than the instance,
  HE-AAC without ENABLE_SBR_DECODE, raw input with RUN_MULTIPLE_FRAMES or
  several access units, a frame longer than the reserved room, and
  unknown codec flags.

guest_ajm decodes an embedded 5-frame stereo ADTS fixture (two chirps,
encoded by FFmpeg 6.1.1's aac encoder at 64 kbit/s) frame by frame, in
one multiple-frames run, as float, as raw access units and with gapless
trimming, and checks sample counts, format, codec info, the delay frames,
RESET, partial input, missing room and the correlation of each channel
with its input chirp at the 1024-sample encoder delay; plus the
INITIALIZE validation results and the refusals.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
2026-10-14 13:32:37 +02:00
fdfawef324andClaude Opus 5.5 bdb0a3f59f fix(recompiler): bind no record of empty per-lane tables and compare bound modes only
A per-lane table V# with num_records 0, a null V# included, threw at dispatch
on its stride (0 is less than the record offset plus 32) although no lane can
hold a record, also when no lane enters the waterfall. With no records every
OOB_SELECT puts each load out of range (the GFX10 table in Mesa's
ac_descriptors.c), so such a table now binds no record and every lane that
runs the access reads zeros; the swizzle, ADD_TID, OOB_SELECT and stride
checks apply only to a V# with records.

The implicit-derivative mode check compared every bound record with record 0,
whose mode is 0 when it is null, so a table with a null record 0 and bound
records of one other mode was refused. Only bound records are compared now.
Lanes whose record is null or outside the table take the zero path under
record 0's mode, so their quad neighbours' derivatives can still be undefined;
the debt entry records this and the 16-record limit of the whole table.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 13:24:53 +02:00
fdfawef324andClaude Opus 5.5 8bca46fb06 fix(recompiler): refuse per-lane waterfall tables over masked T#s or mixed modes
A lane whose IDXEN load was skipped keeps the T# VGPRs it had before, and a
waterfall that reaches it uses that value as its T#. The fold refused only a
value that was itself a uniform descriptor or a table read, so a default T#
copied into the VGPRs under EXEC, or merged by a phi, was accepted and those
lanes read zeros. The skipped lanes' values are now followed through the masked
selects and phis that all eight dwords share, and the fold is refused when an
arm is a descriptor or a table read.

Every lane of a per-lane table runs the access with its own record, and the
runtime image mode picks the SPIR-V path per lane, so lanes of one quad whose
records need different modes take different paths around an implicit-derivative
sample or LOD query, where derivatives are undefined. Such a table now throws
at dispatch; accesses of one table share the check, so they keep one table.

The test also covers v_readfirstlane and v_cmpx_eq_u64 waterfalls and refuses
loops that compare seven T# dwords, run the image instruction after EXEC is
restored, or store.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 13:24:53 +02:00
fdfawef324andClaude Opus 5.5 f234476b21 feat(recompiler): plan waterfall loops over per-lane T#s as non-uniform tables
A waterfall loop (s_ff1 or v_readfirstlane picks a lane, v_readlane copies
its T# to SGPRs, v_cmpx_eq keeps the lanes whose T# VGPRs match, the image
instruction runs, the matched lanes leave the loop) reads the T# from VGPRs,
which no descriptor source evaluates, so planning failed with "GetImageResource
dword 0 is not a valid runtime value".

When every T# dword of an image read, sample, gather or query comes from
v_readlane_b32 or v_readfirstlane_b32 and the EXEC its results are written
under implies that each of them equals the lane's own VGPR, the access takes
each lane's own T#. A T# that each lane loaded with buffer_load_dword* (IDXEN)
from one evaluable V# becomes a bindless image table keyed by the lane's
index, addressed by the V# stride, and its slot is decorated NonUniform.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 13:24:53 +02:00
jacob6769andClaude Opus 5.5 caee9a8bef feat(libSceOpusCeltDec): decode CELT packets with the libSceOpusDec decoder
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 20:22:47 +09:00
Adrià 1594e5aee8 Merge pull request #4756 from p3n1cillin/claude/ime-host-keyboard
feat(libSceIme): open a panel-less IME fed by the host keyboard
2026-10-14 12:57:32 +02:00
Adrià aa6b757662 Merge pull request #4725 from akkadbakkad89/feat/kernel-page-table-stats
feat(libkernel): count committed ranges in sceKernelGetPageTableStats
2026-10-14 12:56:24 +02:00
Dean de2ab1068a Merge pull request #4797 from gjonn/fix/ps-sample-interp-bary
fix(shader): load the PERSP_SAMPLE and LINEAR_SAMPLE I/J pairs
2026-10-14 23:55:50 +13:00
Dean e2cd7f49db Merge pull request #3897 from eliasbruno124-dev/fix/ssl-certificate-import
fix(ssl): retain loaded certificate authorities
2026-10-14 23:55:30 +13:00
Adrià 82f112d20f Merge pull request #4451 from Amoenus/codex/feat-alpha-to-coverage-dither8
feat(agc): emulate default eight-sample dithered alpha coverage
2026-10-14 12:55:07 +02:00
Adrià 98541c674e Merge pull request #2853 from alfalfa-star/feat/npwebapi2-request-timeout
feat(npwebapi2): implement sceNpWebApi2SetRequestTimeout
2026-10-14 12:49:48 +02:00
Adrià 29f4891e21 Merge pull request #5696 from gjonn/hdr-pq-display-buffers
feat(agc): present BT.2100 PQ display buffers on an SDR output
2026-10-14 12:49:21 +02:00
Jan ŠléglandClaude Opus 5.5 d34564be4a perf(agc): bind a sparse descriptor heap's committed run in place from its import
A descriptor heap that a shader binds whole while only the pieces from its
base are mapped (a sparse heap) is copied on the CPU for every build that
binds it unless a mirror serves it. The sparse heap mirror takes a heap whose
needed extent lies in one releasable registered range. A heap mapped piece by
piece, each mapping its own allocation and the pieces back to back from the
heap's base, is several registered ranges, so every build copied its mapped
run again.

Such a region is now bound in place from an import of that run: an import
already covering it, the run's own import, or one joined over exactly the run
(#4517). This applies to any sparse heap no mirror took, including under
APS5_NO_LEASE_MIRROR or APS5_NO_SPARSE_HEAP_MIRROR. A join is made only for a
region that starts at a registered range, once the previous bind of that
address saw the same last mapped byte: a heap that grows between every two of
its binds keeps the copy, and one bound more often than it grows is joined
again after each growth. Joins stop after 64 per joined run base, with a
message: the heap is then bound in place while an existing import covers its
run and copied otherwise. The records go with their range. The region's descriptor and BDA ranges end at the import's end, which
covers the mapped run and the last view, as the copy does. A region whose
mapped part does not start at its base, with a view past the run, written by
its shader, or whose run is not imported is copied as before. A direct
region whose import ends before it outside this path still fails in
Descriptor, as before.

A set over such a region stays reusable: DirectRegions and InPlaceReads name
the region up to its import's end, so the import's serial proves it, and a
reuse also requires the heap to be mapped exactly up to that end
(CutRegions), checked whenever the imports or the registry changed, so a
mapping past the cut makes the set miss. DirectRegions also refuses a set any
of whose regions bound in place no longer holds the import found at its base
(a later join in the same build retired it); this applies to every region
bound in place.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 12:42:01 +02:00
Dean 3e577edac2 Merge pull request #5160 from nikowolf123/fix/shader-lds-private-subword-stores
fix(shader): update per-invocation LDS without atomics
2026-10-14 23:30:37 +13:00
Dean 6ade14f52d Merge pull request #5679 from moong15/fix/agc-save-guest-bytes-before-untracked-results
fix(agc): save the guest bytes of units without a write generation when results land outside the write watch
2026-10-14 23:28:44 +13:00
Adrià 2a99157640 Merge pull request #4812 from AlxcBTW/feat/trace-summary-interval
feat(agc): add APS5_TRACE_SUMMARY_EVERY for summary lines of a long session
2026-10-14 12:24:56 +02:00
mrfelek dd7d649c36 feat(agc): storage image access to depth planes through a 2D array view from a later slice
A storage view of the depth plane that starts above slice 0 was refused. The
layered storage image already spans slices 0..last, and the view starts at its
base slice, so the refusal is dropped and only the slices from the base slice to
the last are copied in and out. The base slice joins the cache key.

DepthStorageDispatch stores through a view from base slice 2 and checks the
other slices stay untouched; it fails without the change.
2026-10-14 12:13:52 +02:00
Mehran e9c98900e7 fix(agc): bind a V# past the range limit by the memory behind it 2026-10-14 13:09:59 +03:00
Dean c654b199bd Merge pull request #5049 from eljackjoestar-cmd/codex/scalar-buffer-descriptor-fields
fix(shader): ignore unused descriptor fields for scalar buffer loads
2026-10-14 23:06:33 +13:00
Dean Galvin 52813787cf fix(libkernel): defer raises while a thread holds the address-wait lock on Windows 2026-10-14 23:03:06 +13:00
simonbronkandClaude Opus 5.5 378ac61788 fix(libSceConvertKeycode): ignore the state bit 0x4000000 RE Engine titles pass
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 12:02:20 +02:00
JJenkx b009318423 docs(shader): place traversal debt in existing Build section 2026-10-14 06:01:45 -04:00
JJenkx fd192b20cc docs(shader): place traversal debt with the component 2026-10-14 06:01:25 -04:00
JJenkx 8ed0bc395d perf(shader): avoid redundancy traversal map copies 2026-10-14 06:01:00 -04:00
Romans Pokrovskis c8b3a37533 feat(agc): emulate default eight-sample dithered alpha coverage 2026-10-14 12:58:43 +03:00
Dean 7963f16d12 Merge pull request #5514 from ps54all/feat/libsceappcontent-addcont-delete
feat(libSceAppContent): export sceAppContentAddcontDelete
2026-10-14 22:57:30 +13:00
Dean 56429064fc Merge pull request #5226 from ErenYeager1836/carry/libSceSsl-connection-calls
feat(libSceSsl): add the connection calls
2026-10-14 22:55:56 +13:00
simonbronkandClaude Opus 5.5 ddf5e146e1 docs(debt): list sceHttp2WebSocketSetPingTimeout
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 11:49:12 +02:00
Yunus Shaikh b37a8c295a chore(relinker): move the --frame-red-zone debt entry off a line another open PR changes 2026-10-14 02:48:40 -07:00
Oleksandr SierovandClaude Opus 5.5 84bb450d48 feat(libkernel): EVFILT_VNODE on macOS through the host kqueue
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 10:48:35 +01:00
Dean 115dc95784 Merge pull request #5347 from MathiasDevelopes/codex/pr-agc-stencil-clear-state
fix(agc): initialize stencil control and reference masks
2026-10-14 22:48:14 +13:00
Dean c3bad39372 Merge pull request #5434 from milescoviello/fix/relinked-module-name-case
fix(libc): find a relinked module whose name differs in case
2026-10-14 22:41:23 +13:00
Dean 5744094e79 Merge pull request #5506 from codingreapermaps/feat/agc-z64kbx-color-targets
feat(agc): render into SW_64KB_Z_X color targets
2026-10-14 22:40:55 +13:00
Dean 318f237602 Merge pull request #5258 from JAB-dev/perf/unwind-info-cache
perf(libkernel): cache the unwind tables and image name per module on Windows
2026-10-14 22:39:58 +13:00
Dean 1a40d3d81f Merge pull request #5013 from p3n1cillin/claude/select-pipes
feat(libkernel): select on pipes on Windows
2026-10-14 22:39:38 +13:00
Dean 21da4061be Merge pull request #5413 from mariusyo07/feat/audioout2-disable-chat
feat(libSceAudioOut): implement sceAudioOut2DisableChat
2026-10-14 22:38:41 +13:00
eljackjoestar-cmd aa2abf801b fix(shader): ignore unused descriptor fields for scalar buffer loads 2026-10-14 22:38:13 +13:00
Dean 64380313b5 Merge pull request #5521 from codingreapermaps/feat/agc-alpha-coverage-without-color
fix(agc): alpha-to-coverage from a 32_AR MRT0 export without a color target
2026-10-14 22:37:55 +13:00
eliasbruno124-dev b737308eed fix(ssl): retain loaded certificate authorities 2026-10-14 22:34:22 +13:00
Alexej Szpevák 8e812f4b73 fix(relinker): report RIP-relative operands of far indirect CALL and JMP
DecodeInstruction returned before reading the ModRM of FF /3 and FF /5,
so a far CALL or JMP through a RIP-relative pointer had no RIP-relative
displacement. A stub that moved such a JMP copied the displacement
without relocating it.

The decoder was compared with iced-x86 (AMD decoding) over 3.99 million
encodings: every opcode of the legacy, 0F, 0F38 and 0F3A maps under 34
prefix combinations and the VEX 0F, 0F38 and 0F3A maps, each with 48
ModRM forms. Apart from this, it agrees on length, RIP-relative offset,
control flow kind and branch target for every valid Zen 2 instruction
except near branches with a 66 prefix, recorded as technical debt, and
kernel-only returns, which it treats as sequential.

Add the comparison's metadata as cases: one RIP-relative encoding per
opcode, map and immediate size, every FF /r form, and the branch forms
with their flow kind and target. The existing cases check lengths only;
a loop or jrcxz decoded as an unconditional jump passed the whole suite.
2026-10-14 11:33:59 +02:00
Dean 0b97f8b9f5 Merge pull request #3664 from alfalfa-star/feat/linux-wayland
feat(videoout): use native Wayland on Linux
2026-10-14 22:32:26 +13:00
Romans Pokrovskis c393e720af test(shader): require exact invalid buffer descriptor refusals 2026-10-14 12:26:01 +03:00