Commit Graph
14017 Commits
Author SHA1 Message Date
Nuno Silva cf43ef6691 fix(libSceAgcDriver): validate eager storage writeback behavior 2026-10-14 12:50:21 +01:00
Nuno Silva fc6d45768d test(libSceAgcDriver): run DCC pending test in deferred mode 2026-10-14 12:50:21 +01:00
Nuno Silva 88f56b480f fix(libSceAgcDriver): store image results to guest memory at draw time
markLayersPending deferred its write-back, so a sampled-lookup of a
surface read through a resident view fed the freshest GPU content back
only at flip time. The menu composite loops its own trio as feedback
each present, so the deferred view accumulated a pale frame until flip
and whitened Bendy's opening menu against the (120, 87, 17) reference.

Store a written image's results to guest memory at once, in recording
order behind the draw that produced them, and keep the batched store
behind APS5_DEFERRED_WRITEBACK=1 for comparison.
2026-10-14 12:50:21 +01:00
Adrià e464db9e33 Merge pull request #5805 from adriadam10/ci/skip-device-wording
test(agc): word the lavapipe skips of two tests as device limitations
2026-10-14 13:48:54 +02:00
Adrià FranchandClaude dca6020daa test(agc): word the lavapipe skips of two tests as device limitations
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:48:47 +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
Joel Fernandes dcfabcc579 feat(pad): bridge controller audio haptics to motor rumble 2026-10-14 13:45:00 +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
Andre KurthandClaude Sonnet 5.5 38be35d5a3 feat(libSceJson2): implement Value::setNullAccessCallBack
Value::setNullAccessCallBack(callback, context) sets the callback that
Value uses for a missing member or a type mismatch. It was a stub that
aborted the title. It now sets the same global callback and context as
Initializer::setGlobalNullAccessCallBack; a null callback clears it.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-14 13:43:57 +02:00
Adrià c0a272537d Merge pull request #5801 from adriadam10/ci/build-train
ci(build): build several pull requests together
2026-10-14 13:42:13 +02:00
Adrià FranchandClaude 15503d11fe ci(build): build several pull requests together
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:41:55 +02:00
Josip Parlov fc24253487 feat(agc): copy HLE for the 16-byte stream copy kernel
A 16-word compute kernel copies a buffer in 16-byte elements: 64 threads a
group, thread t of group g loads elements g*128+t and g*128+64+t from the
index-addressed buffer in s[0:3] and stores them at the same indices of
s[4:7]. Run as a shader against host imports it costs 11.8 ms of GPU per
present in PPSA25344's main menu on an RTX 4060.

Matched like the existing copy kernel, by its code hash and its descriptors
(16-byte stride and no swizzle on both, the same word 3), it becomes one copy
through the existing copy HLE path: the elements the kernel stores, min of
groups * 128 and the destination's record count, when the source's record
count covers them all. APS5_NO_COPY_HLE turns it off with the other kernel.
2026-10-14 13:40:32 +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
thibautandClaude Opus 5.5 4ae26f8ba0 feat(relinker): report every unresolved ELF import before failing on Windows
The Windows startup stub stopped at the first import it could not
resolve, so a title missing several functions showed one
"FAIL: unresolved ELF import" line per run and needed a run per
missing function to list them all.

The stub now counts unresolved imports, writes the FAIL line of each
and goes on with the next import. After the last import it fails once,
with the searched library list and the last Windows error as before,
and exits with STATUS_ENTRYPOINT_NOT_FOUND. Weak imports, lazy binding
and a startup where every import resolves are unchanged.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01V1W4jdNSKTV7xwuS6xQPJV
2026-10-14 13:38:31 +02:00
pushkarreddyy e1d402c6ca feat(libSceAgcDriver): support secondary LOD bias and relax unnormalized coordinate filters 2026-10-14 17:07:46 +05:30
Adrià FranchandClaude ecce9a3a16 fix(tools): keep the spliced-comment test, reject --name with --nid, no name truncation
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:36:11 +02:00
pushkarreddyy 41ef6acad3 feat(tools): add --name option to nid_names to compute symbol NIDs
Add --name / --symbol CLI option to tools/nid_names.py to compute the Sony SHA-1 NID for given symbol names from the command line without requiring a full database download. Support positional chaining and --json output format. Add unit test coverage in tools/tests/test_nid_names.py.
2026-10-14 13:35:54 +02:00
Adrià Franch b7c1293749 fix(libSceAjm.native): check the M4AAC instance flags outside sceAjmInstanceCreate
The direct NotImplemented call made the progress report count sceAjmInstanceCreate as reverted to a stub.
2026-10-14 13:32:42 +02:00
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
Adrià FranchandClaude 270eb0647c fix(recompiler): move the disk format to 32 after main took 31
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:24:53 +02:00
Adrià FranchandClaude ea91d68090 test(agc): read the waterfall test SPIR-V through a span
Co-Authored-By: Claude <[email protected]>
2026-10-14 13:24:53 +02:00
fdfawef324andCodex 3ce02f5928 fix(recompiler): preserve per-lane table modes in disk resource plans
The disk resource plan codec added on main must retain whether an indirect
image uses a per-lane key, an indexed record stride, and implicit derivatives.
Encode and decode those fields, update the aggregate field guard, and reject
the older resource-plan format. Cover all eight flag combinations so a loaded
plan cannot silently lose the stride or bound-mode checks.

Co-Authored-By: Codex <[email protected]>
2026-10-14 13:24:53 +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
Adrià 145cb82f3b Merge pull request #5794 from adriadam10/ci/submodules-recursive
ci(build): check out nested submodules
2026-10-14 13:24:05 +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
Josip Parlov c218429632 feat(agc): trace slices and GPU ranges carry the recorder batch they belong to
A recorder batch takes a trace id when it opens while a trace records. The
thread that opened it stamps the id on every slice it records afterwards,
and the batch's GPU ranges (the whole batch and its command classes) carry
the same id, written as "args":{"batch":N}. A GPU batch in the trace can
then be tied to the CPU slices that recorded it.
2026-10-14 13:16:56 +02:00
Adrià FranchandClaude fe4831f350 ci(build): check out nested submodules
3rdparty/mbedtls (#3897) has its own framework submodule. The PR build
fetched it in its merge step, but push builds on main skipped that step
and failed at configure.

Co-Authored-By: Claude <[email protected]>
2026-10-14 13:13:22 +02:00
Adrià Franch 6d7b1d11bb test(agc): pin that the content key reserves exactly its serialized word count 2026-10-14 13:07:04 +02:00
Scramblrrrr 00fe89c536 perf(agc): reserve resource keys for their serialized payload 2026-10-14 13:07:04 +02:00
Adrià 23be5a02b0 Merge pull request #5520 from Nesyth/perf/agc-dcc-keys-from-pending-fills
perf(agc): read DCC keys from the pending GPU fills that cover them instead of waiting for the fills
2026-10-14 13:04:04 +02:00
Adrià 9d883450af Merge pull request #4884 from nikowolf123/perf/shader-layout-pair
perf(shader): emit both registration layouts of a pixel shader from one program
2026-10-14 13:01:48 +02:00
Nicolas AboschandClaude Opus 5.5 84f6364944 fix(agc): skip retired multisampled targets when sampling
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 23:59:19 +13:00
Nicolas AboschandClaude Opus 5.5 6e6334e7e9 fix(agc): apply a pending color memory fill before sampling a multisampled target
A uniform fill of a multisampled target's color memory is held until the
next draw. A shader that samples the target first now sees the fill.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 23:59:19 +13:00
Nicolas AboschandClaude Opus 5.5 4b71846fab feat(agc): sample a multisampled color target through its 2D MSAA texture
A shader that loads from a 2D multisampled image whose T# names a color
target rendered on the host is bound to a view of that target's image.
Other multisampled textures keep throwing.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 23:59:19 +13:00
Dean 9d81b4f6cb Merge pull request #5555 from MidnightApora/fix/agc-2d-array-volume
fix(agc): accept 2D-array image loads and stores on 3D T#s
2026-10-14 23:57:51 +13: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
Dean b5c593aa2f Merge pull request #5550 from milescoviello/fix/shader-shared-table-image
fix(shader): plan a table T# that several image operations share
2026-10-14 23:56:57 +13:00
Romans Pokrovskis 260514de76 test(agc): keep untracked store surfaces alive through queued work 2026-10-14 13:56:51 +03:00
Adrià bfe3dfe87a Merge pull request #4730 from Dextroid17/feat/tools-check-compile
feat(tools): compile the changed translation units only
2026-10-14 12:56:42 +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 a97649fe4c Merge pull request #5189 from EagleBearerYS/fix/shader-half-wave-helper-keys
fix(shader): read lane 63 of half-wave reductions whose keys exclude helper lanes
2026-10-14 23:56:21 +13: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à a0b44cafb9 Merge pull request #5687 from Raghav314/perf/agc-draw-shared-stage-results
perf(agc): draw stages use their shared compiled result instead of a copy
2026-10-14 12:54:15 +02:00
Adrià 7d4f34c6ef Merge pull request #5062 from TideOPL/perf/collect-view-walk
perf(libc): walk shared views in order and remember collectable ranges in Windows write collects
2026-10-14 12:52:46 +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