Commit Graph

6138 Commits

Author SHA1 Message Date
Dean 9651ec9a92
Merge pull request #574 from CnRJay/fix/shader-memory-select
fix(shader): splat the bindless table hit into a bool vector for SPIR-V 1.3
2026-10-05 12:59:53 +13:00
Dean 07404b67e4
Merge pull request #581 from DotDebian/fix/mimg-a16-bias-dword
fix(shader): give the a16 bias of image samples its own address dword
2026-10-05 12:50:04 +13:00
Chad 7030c57393 Merge remote-tracking branch 'upstream/main' into feat/ampr-nop-04-writes
# Conflicts:
#	docs/dev/TechnicalDebt.md
2026-10-04 18:49:51 -05:00
DotDebian 52c13a0bde feat(font): implement sceFontGetRenderScaledKerning
Return the kerning between two character codes at the render scale of
the font, the one set by sceFontSetupRenderScalePixel and
sceFontSetupRenderScalePoint, and fail with NOT_BOUND_RENDERER when no
renderer is bound. sceFontGetKerning keeps its behaviour and shares the
FreeType lookup.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:49:49 +02:00
Dean b5d54c9db8
Merge pull request #578 from DotDebian/feat/ajm-dec-mp3-parse-frame
feat(ajm): implement sceAjmDecMp3ParseFrame
2026-10-05 12:49:23 +13:00
Chad e3f18eec00 Merge remote-tracking branch 'upstream/main' into fix/ampr-wait-signatures
# Conflicts:
#	docs/dev/TechnicalDebt.md
2026-10-04 18:49:15 -05:00
Dean 7c0c8e753c
Merge pull request #575 from DotDebian/feat/agc-cb-registers-direct-size
feat(agc): implement the Sh and Uc RegistersDirect size queries
2026-10-05 12:49:13 +13:00
Dean 53485db448
Merge pull request #565 from Phi1ow/complete-pad-angular-velocity-deadband
feat(pad): implement scePadSetAngularVelocityDeadbandState
2026-10-05 12:49:03 +13:00
Chad 6f5cb736ae fix(libs): match the AMPR 04_00 measure checks of ampr_emu
The WriteAddressFromCounter_04_00 measure checks only the address and the
counter pair measure only the address and an even start, as in ampr_emu.
TechnicalDebt records that AMPR commands are larger than the console
records, which affects titles that pad with Nop to an exact offset, and
that the at-start flag of the 04_00 writes is ignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:48:45 -05:00
Dean d5cf8a0add
Merge pull request #558 from Phi1ow/implement-error-dialog
feat(errordialog): implement the libSceErrorDialog state machine
2026-10-05 12:48:20 +13:00
Chad 53928c712e docs: record that s_getreg_b32 reads round to nearest even after s_setreg_b32
s_setreg_b32 has no effect, so a read of the MODE round fields after it
wrote another mode still reports round to nearest even, the rounding the
recompiled code uses. The refused HW_ID test row is named as hardware
register 4, which has no name on gfx10.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:48:04 -05:00
Dean 221ea3c0bd
Merge pull request #535 from DotDebian/feat/audioout-set-mix-level-pad-spk
feat(libSceAudioOut): implement sceAudioOutSetMixLevelPadSpk
2026-10-05 12:47:38 +13:00
Chad 4b5baea6c4 fix(shader): refuse v_dot2_f32_f16 without op_sel_hi on the accumulator
Its meaning for the f32 accumulator is not known, like op_sel and neg_hi,
and the integer dots already refuse anything but op_sel_hi set on every
source.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:47:31 -05:00
Dean b57f722ca4
Merge pull request #542 from Pouare514/tools/nid-names
feat(tools): suggest real names for Unknown NID stubs from hash-verified DB
2026-10-05 12:46:56 +13:00
Chad 7907e876d6 test(shader): order the contended LDS 64-bit atomics with barriers
On a device whose subgroups are narrower than the wave, the recompiled
wave runs as several subgroups, so one subgroup's zeroing write could
land after another's atomics, and a read could run before another
subgroup's atomics. An s_barrier after the zeroing writes and another
after the atomics order them on any subgroup width.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:46:54 -05:00
Dean f83ee125ce
Merge pull request #516 from Pouare514/fix/tlou-rtc
fix(libs): TLOU sceRtcParseDateTime ISO 8601 subset parser
2026-10-05 12:46:14 +13:00
Dean e682ed35a1
Merge pull request #406 from Pouare514/feat/crashreport-thread-dump
feat(crashreport): dump all threads on fatal crash plus hang watchdog
2026-10-05 12:45:32 +13:00
Dean ac7b0f9d87
Merge pull request #405 from Pouare514/feat/libc-quick-exit
feat(libc): implement at_quick_exit and quick_exit
2026-10-05 12:44:51 +13:00
Dean d220149542
Merge pull request #299 from Pouare514/fix/relinker-tls-tail
fix(relinker): tolerate trailing data in TLS scan
2026-10-05 12:44:41 +13:00
Chad 1566e1b397 feat(agc): implement packet and range predication and the predication sizes
sceAgcSetPacketPredication sets or clears the predicate bit of a type-3
packet header, and sceAgcSetRangePredication does so for every type-3
packet between two addresses, skipping type-2 fillers. The z-pass, bool
and disable predication size queries return the size of the
SET_PREDICATION packet sceAgcDcbSetPredication writes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:35:47 -05:00
DotDebian 7a4e1a2245 fix(shader): give the a16 bias of image samples its own address dword
With a16 the bias is a half that occupies a full address dword and the
coordinates start in the next one. The layout packed the first
coordinate into the upper half of the bias dword, so image_sample_b,
image_sample_b_cl, image_sample_b_o and the biased gathers read their
coordinates from the wrong halves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:30:17 +02:00
Chad 8289f30a03 feat(libs): implement the AMPR nops and the 04_00 completion writes
sceAmprCommandBufferNop/NopWithData and their measure functions record a
Nop of the requested dwords. The 04_00 forms of WaitOnAddress and of the
time counter, counter, counter pair and event queue writes record the
same commands as the current exports; their at-start flag has no effect,
as commands run in order. Argument checks follow ampr_emu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:28:50 -05:00
Chad a583dc7116 fix(libs): reject odd AMPR counter pairs and invalid write addresses
As in ampr_emu, a counter pair starts at an even counter, and the write
commands take a non-null, 8-byte aligned address; others return EINVAL.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:27:00 -05:00
Chad 5018b69fba fix(libs): take the AMPR wait and counter signatures from ampr_emu
sceAmprCommandBufferWaitOnAddress took (address, reference, mask,
compare) and WaitOnCounter (counter, reference, compare), and both read
the compare value as WAIT_REG_MEM (0 always, 1 <, 2 <=, 3 ==, ...).
ampr_emu, which replaces libSceAmpr for retail titles on the console,
has (address, reference, compare, flush) and (counter, reference,
compare, flush) with the SCE compare values (0 ==, 1 > unsigned,
2 < unsigned, 3 !=), so waits were decoded as other comparisons and
could block forever or pass early.

WriteAddressFromCounterPairOnCompletion takes one counter index, not
two, and WriteKernelEventQueueOnCompletion an int id and no user data.
Counter indices above 127, compare values above 3, flush values above 1
and misaligned wait addresses return EINVAL, as in ampr_emu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:25:45 -05:00
DotDebian f99be7e4d3 feat(ajm): implement sceAjmDecMp3ParseFrame
Read the MPEG audio frame header and report the frame size, channel
count, samples per channel, bitrate and sample rate. The signature,
the result layout and the rate tables follow shadPS4's reimplementation
of the PS4 library. Requesting the original file length throws: that
lookup is not implemented.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:24:18 +02:00
Pouare514 9e0152f18d fix(libkernel): replace mappings on fixed reserve over registered range 2026-10-05 01:21:44 +02:00
DiulioAires b6c97084ed fix(relinker): check byte writer bounds 2026-10-04 20:17:21 -03:00
Chad d78eea1f5f feat(shader): implement the 64-bit LDS atomics
ds_add/sub/rsub/inc/dec_u64, ds_min/max_i64/u64, ds_and/or/xor/mskor_b64,
ds_cmpst_b64/f64, ds_min/max_f64, their _rtn forms and ds_wrxchg_rtn_b64
threw in the decoder.

LDS is a 32-bit workgroup array, so the two dwords are read and written
under a lock dword placed after the guest LDS, which is cleared with a
workgroup barrier at entry. The lock is acquired and released in the same
loop iteration, so lanes of one subgroup cannot deadlock on it. Stages
whose LDS is a function variable update it directly. 64-bit GDS atomics
throw.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:14:24 -05:00
Chad 4e888083f9 feat(shader): implement s_getreg_b32 for the MODE round mode fields
SOPK 0x12 threw in the decoder. The recompiler emits round to nearest
even, which s_setreg_imm32_b32 already requires, so reads that stay
within MODE bits 0..3 return 0. Other hardware registers and fields
throw with the register and bits read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:11:59 -05:00
Dean 33a870d973
Merge pull request #382 from nicolasabosch/feat/audio3d-default-parameters
feat(audio3d): implement default open parameters
2026-10-05 12:11:10 +13:00
Pouare514 9e70325139 chore: drop stray AudioIn hunk 2026-10-05 01:10:56 +02:00
Dean 70bd96ea86
Merge pull request #362 from nicolasabosch/feat/ime-parameter-helpers
feat(libSceIme): implement parameter initialization and panel size queries
2026-10-05 12:10:51 +13:00
Dean c96745e912
Merge pull request #337 from DotDebian/feat/elf-phdr-match-addr
feat(libkernel): implement __elf_phdr_match_addr
2026-10-05 12:10:32 +13:00
Pouare514 e67d50cb2f fix(libs): route DateTime zone suffix through RFC3339 path, throw on unverified shapes 2026-10-05 01:10:25 +02:00
Dean 575c422b84
Merge pull request #281 from SP4C3B4R-8/fix/mingw-test-runtime
fix(build): copy MinGW runtime next to test executables
2026-10-05 12:10:13 +13:00
Dean d4c1bca1e1
Merge pull request #497 from adriadam10/feat/mimg-dlc
feat(shader): accept the dlc cache bit on MIMG
2026-10-05 12:09:53 +13:00
Dean 037b905684
Merge pull request #499 from MichonGoddijn231849/fix/vmov-sdwa-byte-destinations
fix(shader): v_mov_b32 SDWA writes byte destinations
2026-10-05 12:09:34 +13:00
Chad abbcb31e54 feat(shader): implement v_dot2_f32_f16
VOP3P 0x13 threw "VOP3P opcode is not implemented". It computes
src0.lo * src1.lo + src0.hi * src1.hi + src2 like v_dot2c_f32_f16, with
the VOP3P op_sel/op_sel_hi and neg_lo/neg_hi modifiers on the packed f16
sources, neg on the f32 accumulator and clamp. op_sel and neg_hi on the
accumulator throw.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:09:01 -05:00
DotDebian dd9a62f2a3 feat(agc): implement the Sh and Uc RegistersDirect size queries
sceAgcCbSetShRegistersDirectGetSize and sceAgcCbSetUcRegistersDirectGetSize
return the bytes their writers need when no two registers are adjacent: one
three-word packet per register. Adjacent registers are merged into ranges
and take less. A count whose size does not fit 32 bits throws.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 01:07:40 +02:00
Chad c227c62649 fix(shader): splat the bindless table hit into a bool vector for SPIR-V 1.3
TableResult selected a uvec4 with a scalar bool condition, which needs
SPIR-V 1.4. Targets at 1.3 failed validation (agc_shader_memory with
ANYPS5_ENABLE_SPIRV_TOOLS).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-04 18:05:13 -05:00
Pouare514 66f0e7b0eb fix(tools): always verify NIDs, collect all definitions, pin DB commit 2026-10-05 00:58:10 +02:00
Pouare514 dbe6b62922 fix(crashreport): capture thread stacks while suspended, report skipped threads 2026-10-05 00:57:04 +02:00
Pouare514 0b5fe3c23c fix(relinker): detect FS-prefixed previous instruction via SegmentPrefix decode 2026-10-05 00:56:11 +02:00
DotDebian 9a652bf82c docs(libSceAudioOut): record the pad speaker mix level as an assumed gain
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 00:55:11 +02:00
Pouare514 630cf0cf39 fix(libc): drop duplicate quick_exit stub clashing with the real export 2026-10-05 00:53:03 +02:00
Phi1ow e4bc4a4ecb fix(pad): check the handle and keep the dead band throwing when enabled
Per review: scePadSetAngularVelocityDeadbandState now returns PAD_ERROR_INVALID_HANDLE for a
handle other than PAD_HANDLE, like the neighbouring setters. Enabling the dead band still throws,
because the angular-velocity reading path does not apply the filter (that would change input, not
UI, so it is not a silent stub); disabling it succeeds, which matches the unfiltered readings.
The test checks the disabled call, the bad handle, and no longer asserts the enabled path.
2026-10-05 00:48:45 +02:00
Dean 28e7799183
Merge pull request #564 from Phi1ow/implement-razor-cpu
feat(razor): implement the libSceRazorCpu CPU profiler stubs
2026-10-05 11:46:10 +13:00
Dean 4db07b3a77
Merge pull request #449 from MichonGoddijn231849/feat/3d-color-targets
feat(agc): render into one depth slice of a 3D color target
2026-10-05 11:45:29 +13:00
Dean 3fe90689ca
Merge pull request #562 from adriadam10/feat/image-atomics-float
feat(shader): implement image_atomic_fmin, fmax and fcmpswap
2026-10-05 11:44:47 +13:00
Dean 1bc945c1e5
Merge pull request #489 from oneandonlydean/feat/audiopropagation-source-render
feat(libSceAudioPropagation): render silence for propagated sources
2026-10-05 11:44:05 +13:00