Commit Graph

661 Commits

Author SHA1 Message Date
Gjon Gojcevic 04dec3ddbc feat(libSceVideoOut): register the VRR status event and accept the VRR status call
LibwuIonIBw registers video out event id 16, which the host never triggers because its VRR state does not change; kP2L8t3j-aM returns 0 without effect.
2026-10-09 23:12:08 +02:00
Adrià 27cb335be1
Merge pull request #1650 from Pedroj-64/feat/libkernel-uid-gid
feat(libkernel): implement getuid, geteuid, getgid, getegid and issetugid
2026-10-09 23:04:27 +02:00
Adrià 747726c43f
Merge pull request #2203 from XairRrR/feat/libscevdecsw
feat(libs): implement libSceVdecsw on top of libSceVideodec2
2026-10-09 23:04:00 +02:00
Adrià 837dbd8568
Merge pull request #2319 from parl0v/refactor/agc-interpolant-mapping-name
refactor(agc): name HV4j+E0MBHE sceAgcCreateInterpolantMapping_0100
2026-10-09 23:01:34 +02:00
Adrià 5694d3fd3e
Merge pull request #2344 from mrzacarias/refactor/np-partner-name-ea-access
refactor(libSceNpPartner001): name the EA access exports
2026-10-09 22:49:12 +02:00
Dean 8b393b6e9a
Merge pull request #759 from Celegans12/feat/agc-guarded-null-pointers
feat(agc): implement deferred faults for reads through null SRT pointers
2026-10-10 08:06:47 +13:00
Dean 0c8d5356d7
Merge pull request #1480 from awake-devel/fix/cond-wait-recursive-mutex
fix(libkernel): release every level of a recursive mutex during a cond wait
2026-10-10 08:05:19 +13:00
Dean 87e773689e
Merge pull request #1478 from awake-devel/fix/guest-signal-delivery
fix(libkernel): keep ymm upper halves across a redirected raise
2026-10-10 08:05:04 +13:00
Dean fffb830363
Merge pull request #1477 from awake-devel/fix/current-cpu-in-guest-mask
fix(libkernel): report the current CPU within the thread's guest affinity
2026-10-10 08:04:50 +13:00
marcio-ch fc3e2345c0 refactor(libSceNpPartner001): name the EA access exports
sceNpEAAccessInitialize and sceNpEAAccessTerminate resolve the NIDs
7CxI50-xlCk and pMxXhNozUX8, which shadPS4 names in np_partner.cpp. The
stubs still throw; only the names and no-argument signatures change.
2026-10-09 12:57:50 -03:00
Josip Parlov c90f85535e refactor(agc): name HV4j+E0MBHE sceAgcCreateInterpolantMapping_0100 2026-10-09 17:25:54 +02:00
XairRrR 60c26120a6 feat(libs): implement libSceVdecsw on top of libSceVideodec2
libSceVdecsw is the software H.264 decoder interface PPSA05684 uses for
its movies. Decoder creation, compute queues, memory queries, decode
input and output, AVC picture info, reset and finalize are implemented
with the layouts of shadPS4's vdecsw.h, checked against the title's
movie decoder, and decode through libSceVideodec2. The H.264 stream the
Videodec2 test uses moves to a shared fixture, and a guest test decodes
it through Vdecsw.

Uncharted: Legacy of Thieves Collection (PPSA05684) plays its movies through libSceVdecsw and stopped at sceVdecswQueryComputeMemoryInfo.
2026-10-09 13:28:48 +02:00
boykopovar 43972e69a1
Merge pull request #2096 from boykopovar/fix/windows-host-import-texture-reuploads
fix(win): windows host import texture reuploads
2026-10-09 12:56:45 +03:00
Dean ede2a9cb1f
Merge pull request #1711 from SleglJan/feat/libkernel-socketpair
feat(libkernel): implement socketpair
2026-10-09 22:55:53 +13:00
Dean 2c3a386e29
Merge pull request #2075 from jdmagic/feat/audioout2-mastering-term
feat(libSceAudioOut): accept sceAudioOut2MasteringTerm
2026-10-09 22:42:37 +13:00
Dean a7ff88524d
Merge pull request #2074 from jdmagic/feat/ppsa01289-missing-exports
feat(libs): provide the exports PPSA01289 imports that no library has
2026-10-09 22:42:23 +13:00
Dean 1d7c70a752
Merge pull request #1992 from LuisBiceps/feat/system-service-kill-app
feat(libSceSystemService): let the running title close itself with sceSystemServiceKillApp
2026-10-09 22:42:08 +13:00
Dean da8345b00d
Merge pull request #1269 from st44rplatinum/feat/systemservice-mediaplay
feat(libSceSystemService): implement Disable/ReenableMediaPlay
2026-10-09 22:40:54 +13:00
Dean 6cc0503dac
Merge pull request #1550 from ska2704/fix/progress-exclude-test-sources
fix(progress): exclude library test fixtures from function counts
2026-10-09 21:04:18 +13:00
Dean 943bd52616
Merge pull request #1514 from CyanBook/docs/drop-json2-value-clear-debt
docs(debt): drop sce::Json::Value::clear from PPSA23566 unknown signatures
2026-10-09 21:03:55 +13:00
Dean 0905b51f6a
Merge pull request #1931 from johnmaia/feat/videodec2-hevc-vp9
feat(libSceVideodec2): decode HEVC and VP9
2026-10-09 21:03:44 +13:00
Dean eaed9371ce
Merge pull request #1820 from hugodearaujo/fix/audioout2-main-port-formats
fix(audioout2): match measured MAIN port format validation
2026-10-09 21:03:31 +13:00
Dean 812c86cde7
Merge pull request #1481 from awake-devel/feat/http-auth-info-callback
feat(http): accept sceHttpSetAuthInfoCallback
2026-10-09 21:03:15 +13:00
Obi Newman 881fb01069
feat(libs): report Http2, Ssl and Net memory pool statistics (#1119)
sceHttp2GetMemoryPoolStats, sceSslGetMemoryPoolStats and
sceNetGetMemoryPoolStats threw. PPSA16064 (Minecraft Dungeons II,
Unreal Engine) queries all three while its HTTP module starts, and
aborted there.

Each library now records the pool size given at sceHttp2Init,
sceSslInit or sceNetPoolCreate and reports it with a peak and current
use of 0: the offline Http2 and Ssl models and the host-socket Net
library allocate nothing from these pools. The layouts follow the PS4
SDK's *MemoryPoolStats structures. Net returns EBADF for an unknown
pool and EINVAL for a null output, like its other pool calls; Http2 and
Ssl throw for both, as their error codes are unknown. Terminating a
context or destroying a pool forgets its size.

sceHttp2SetResolveRetry, which the title calls next, accepts and
ignores its value like the other Http2 settings. The four Http2
WebSocket exports the title imports are added as unimplemented.

guest_http2, guest_ssl and guest_sce_net check the reported sizes;
guest_sce_net also checks the null-output and unknown-pool errors.
2026-10-09 21:03:06 +13:00
Dean d3a926ad36
Merge pull request #2077 from johnmaia/feat/np-entitlement-info-list
feat(libSceNpEntitlementAccess): report signed out for entitlement info lists
2026-10-09 21:03:01 +13:00
Dean 9e8db341d8
Merge pull request #1775 from MathiasDevelopes/fix/libscehttp-wait-request
fix(libSceHttp): sceHttpWaitRequest reports no ready requests
2026-10-09 21:02:43 +13:00
boykopovar 20cfc0130f fix(agc): preserve write tracking for shared host import aliases 2026-10-09 10:59:50 +03:00
Adrià Franch 1910d1456d feat(shader): choose f32 arithmetic NaN results on the bits
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-09 09:14:44 +02:00
john.maia 530aa2088b feat(libSceNpEntitlementAccess): report signed out for entitlement info lists
The unified and service entitlement info list requests and polls threw.
They now return SCE_NP_ERROR_SIGNED_OUT, like the consume requests in
the same library. Their signatures are unknown, so they stay declared
without parameters.

PPSA15657 calls the unified request during start-up and continues past
the error.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0134RWCyiyydJBbfKz8g9Bwe
2026-10-09 07:56:44 +01:00
jdmagic 9d2e4188ca feat(libs): provide the exports PPSA01289 imports that no library has
Sackboy: A Big Adventure (PPSA01289) imports nine functions that no library
exports, so eager binding fails before it starts.

- libSceVoiceChat: sceVoiceChatRequestLeaveVoiceChatGroup and
  sceVoiceChatRequestDeleteVoiceChatGroup, offline requests like the other
  sceVoiceChatRequest* calls
- libSceNpSessionSignaling: sceNpSessionSignalingGetConnectionFromPeerAddress,
  a throwing stub; the signature is unknown
- libSceCdlgG2P, a new library: the six sceG2PDialog* functions, throwing
  stubs declared without parameters

TechnicalDebt records the assumed and unknown signatures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:42:57 -04:00
jdmagic 90864ffb8d feat(libSceAudioOut): accept sceAudioOut2MasteringTerm
PPSA01289 (Sackboy: A Big Adventure) calls sceAudioOut2MasteringTerm when it
replaces its world, which threw. Like Init and SetParam it has no effect, as
there is no mastering stage. The title creates its next world's audio device
before it destroys the previous one, so Init runs twice before Term runs
twice; whether the console reports an error for either is unknown, so both
return 0 and the case is recorded in TechnicalDebt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 02:40:20 -04:00
LuisBiceps 75345b07b9 test(libSceSystemService): reject app ID 0 and how -2 in the kill test
Also say in the debt entry that on the console sceSystemServiceKillApp returns and the shell ends the title, while here the call does not return.
2026-10-09 12:22:29 +08:00
LuisBiceps 38cbdfe34c fix(libSceSystemService): close the title through the libc exit coordinator
sceSystemServiceKillApp now ends the title as guest exit() does, so driver calls that wait for the exit park instead of throwing ProcessShutdown, and a second exit waits for the first. The test now fails when the kill returns, exits with a status other than 0 or bypasses the coordinator, and checks why a rejected call throws.
2026-10-09 12:21:09 +08:00
LuisBiceps cb43a4c306 feat(libSceSystemService): let the running title close itself with sceSystemServiceKillApp
Report an app ID for the running title from sceSystemServiceGetAppIdOfRunningBigApp, and shut the guest down and exit when sceSystemServiceKillApp receives that ID with the arguments -1, 0 and 0. SwanStationPS5 (PPSA98510) 1.0.6 closes itself this way and stops on both imports on main.
2026-10-09 12:10:19 +08:00
john.maia f5293b64d2 feat(libSceVideodec2): decode HEVC and VP9
EVO-PLAYER (PPSA99039) creates resident AVC, HEVC and VP9 decoders at
start-up, and stopped at "Videodec2: unsupported codec" on the HEVC one.
Codec types 974921 (HEVC) and 2382845 (VP9) now open FFmpeg's HEVC and
VP9 decoders. HEVC input goes through the same Annex B conversion as
H.264 and VP9 frames are passed through; output stays 8-bit NV12, and a
frame deeper than 8 bits throws. Picture info throws for HEVC and VP9,
whose layouts differ from the AVC one.

Assisted by Claude Code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DwFnKjMxmwGDWiuYYf1v4D
2026-10-09 01:27:15 +01:00
Adrià Franch ef4dca9a54 fix(shader): quiet signaling NaNs only in IEEE mode
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-09 00:33:02 +02:00
Adrià Franch f04ce007b6 feat(shader): follow DX10_CLAMP in the clamp modifier
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-09 00:25:07 +02:00
Adrià ce64d8eb36
Merge pull request #1850 from adriadam10/feat/shader-f32-denormal-flush
feat(shader): flush f32 denormals in the float modes that flush them
2026-10-09 00:24:54 +02:00
Celegans12 56f8a62428 feat(agc): implement deferred faults for reads through null SRT pointers
Capturing a shader threw "null or misaligned address" when the flat
SRT walk read through a pointer loaded from memory that is null or
unmapped, even when the program skips that s_load. Such a read now
yields zero and a record with its pc and address, as does a slot whose
address needs it. The registered artifact checks one flag word per
guarded slot at each ReadConst; the capture appends the flags and the
records to the flattened SRT, and a set flag raises an Unmapped BDA
fault through the fault buffer and stops the invocation as a BDA read
does. Nothing per capture enters a key: poisoned and clean captures
share one variant and specialization. Descriptors, branch conditions,
uniform fills, table bases and user-data pointers that need such a
value still throw, and poisoned results stay out of the dispatch and
draw caches. The shader disk cache format becomes 21.
2026-10-09 00:20:59 +02:00
Adrià Franch f132f16155 feat(shader): flush f32 denormals in the float modes that flush them
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-08 23:59:24 +02:00
Adrià Franch d3f2611384 fix(shader): apply the output modifier only in the float modes where the hardware does
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-08 23:58:08 +02:00
Adrià ae91d9780b
Merge pull request #697 from queeeef/feat/interp-f16
feat(shader): implement v_interp_p1ll_f16, v_interp_p1lv_f16 and v_interp_p2_f16
2026-10-08 23:56:17 +02:00
Adrià 94b1eecb59
Merge pull request #533 from adriadam10/test/vop3p-packed
fix(shader): choose packed f16 NaN results on the bits, as RDNA does
2026-10-08 23:41:34 +02:00
Adrià dc79e9b1d6
Merge pull request #938 from CnRJay/feat/ds-src2-b32
feat(shader): implement the 32-bit DS src2 operations
2026-10-08 23:36:33 +02:00
Adrià Franch 8f663d0123 feat(shader): follow the float mode in 16-bit interpolation
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-08 23:36:04 +02:00
Daan Dehing 425836e73f fix(shader): give 16-bit interpolation NaNs the hardware priority
Measured on RDNA2 in #697: an invalid product or sum (inf * 0, inf - inf)
gives the negative default NaN, 0xffc00000 or 0xfe00, and beats a NaN
addend. A NaN delta, then a NaN coordinate, still wins, quieted; a NaN
addend is returned quieted only when the product is valid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:36:04 +02:00
Daan Dehing 7f53a48131 fix(shader): round each 16-bit interpolation step once, as on hardware
Measured on RDNA2 in #697: v_interp_p1ll_f16 and v_interp_p1lv_f16 are a
fused multiply-add rounded once to f32, and v_interp_p2_f16 rounds the exact
P20 * J + S2 once to f16. The separate multiply and add matched about 85% and
4% of the measured rows.

Both steps now use FPInterpolateF32 and FPInterpolateF16: the f16 delta times
the f32 coordinate is exact in f64, the sum is rounded to odd and then once to
nearest even at the target precision, so no driver can split or reround it.
Infinite and NaN operands take the unbounded f64 result.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:36:04 +02:00
Daan Dehing daa6bee7cf feat(shader): implement v_interp_p1ll_f16, v_interp_p1lv_f16 and v_interp_p2_f16
Decode the three VOP3 16-bit interpolation instructions (attribute, channel
and high-half select in the src0 field, the I/J VGPR in src1, P0 or the first
step's result in src2) and translate them with a new
GetInterpolationParameterF16 IR value. It reads the selected 16-bit half of
each vertex's parameter through VK_KHR_fragment_shader_barycentric, so P10 and
P20 are vertex differences rounded to f16; both steps are a multiply and an
add, as in the f32 forms.

An input in FP16_INTERP_MODE whose low half is defaulted is still declared at
its slot when its high half is read, and the high half takes its default from
USE_DEFAULT_ATTR1 and DEFAULT_VAL_ATTR1. Without barycentrics, on an input
without FP16_INTERP_MODE or on a pass-through input the instructions throw.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 23:36:04 +02:00
Adrià Franch a000305181 fix(shader): choose packed f16 NaN results on the bits, as RDNA does
Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-08 23:34:18 +02:00
Adrià aa258760dc
Merge pull request #1826 from adriadam10/feat/shader-ieee-minmax
feat(shader): follow IEEE_MODE in f32 min, max, min3, max3 and med3
2026-10-08 23:33:59 +02:00