Commit Graph
496 Commits
Author SHA1 Message Date
Adrià 7fccb7ff5f Merge pull request #1051 from fisherjoey/fix/linux-unwritable-host-import
fix(agc): skip Linux host imports of ranges not mapped read-write
2026-10-08 09:53:40 +02:00
Adrià 1e1e1390b5 Merge pull request #1123 from TideOPL/fix/agc-command-buffer-null-cursor-down
fix(libSceAgc): treat a null cursor_down as a buffer limited by its top
2026-10-08 09:41:38 +02:00
Adrià FranchandClaude 80456dac90 docs(debt): say the Linux host import check does not cover shared file mappings
Co-Authored-By: Claude <[email protected]>
2026-10-08 09:37:52 +02:00
Joey Fisher 25c0a71869 fix(agc): skip Linux host imports of ranges not mapped read-write
NVIDIA (595.91.07) refuses VK_EXT_external_memory_host imports of
read-only or executable mappings with VK_ERROR_OUT_OF_DEVICE_MEMORY and
then fails every later vkAllocateMemory on the device. Check the range
is mapped read-write before importing on Linux, as the Windows path
already does for read-only memory, and copy it otherwise.

Refs #1022
2026-10-08 09:37:46 +02:00
Adrià 6b57386237 Merge pull request #1100 from gookie-dev/fix/agc-indirect-register-lists-at-submission
fix(agc): read indirect register lists when the command buffer is submitted
2026-10-08 09:14:02 +02:00
Dean 58a1bd6688 Merge pull request #1447 from oneandonlydean/fix/cmask-metablock-size
fix(agc): size CMASK by whole 1024x512 metablocks
2026-10-08 20:12:42 +13:00
Adrià 979ae68996 Merge pull request #1095 from kjhq/feat/libkernel-write-throttling
feat(libkernel): report no write throttling in sceKernelWriteThrottlingStatus
2026-10-08 09:11:51 +02:00
ChadandClaude Opus 5.5 c17337b6d9 fix(agc): size CMASK by whole 1024x512 metablocks
A CMASK holds 4 KiB per 1024x512-pixel metablock, not one nibble per 8x8
tile of the target: 1920x1080 spans 0x6000 bytes, as titles clear it,
not 16200. The swizzled nibbles of the lower-right tiles lie past the
packed size, so the fast-clear check missed them and the expanded store
left them cleared.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 19:53:02 +13:00
Dean 66b9be6607 Merge pull request #1322 from TibixDev/pr/np-reachability-lifecycle
fix(npmanager): track reachability callback registration
2026-10-08 19:36:00 +13:00
Dean a57ccfb426 Merge pull request #1275 from KSWORK2001/fix/libscertc-dostime-range
fix(libSceRtc): answer out-of-range years in sceRtcGetDosTime
2026-10-08 19:35:43 +13:00
Adrià 56f3da20e8 Merge pull request #1072 from alfalfa-star/feat/agc-cmask-fast-clear
feat(agc): render into CMASK fast-clear color targets
2026-10-08 08:32:04 +02:00
gookie de651c6283 fix(agc): read indirect register lists when the command buffer is submitted
The driver copies a submission's packets when it is submitted, but
SET_SH_REG_INDIRECT, SET_UCONFIG_REG_INDIRECT and SET_CONTEXT_REG_INDIRECT
read their (offset, value) lists from guest memory only when the queue
worker reaches the packet. A title that reuses its per-frame memory once
it expects the GPU to be done with it can rewrite a list in between, and
the worker then throws on the data it finds there ("extended register
semantics are not implemented (offset dword 0x3a888889)").

The lists are now read with the packets, after validation, in Submit and
for a rewind tail, and the worker writes the registers from that copy.
Pm4::Execute keeps reading the list itself for direct callers.

PPSA21402 (Balatro) keeps three frame slots and does not wait for the GPU
before reusing one: its slot labels start at 0xffffffff and the GPU only
ever writes 0xffffffff to them, so the poll before a slot is reused never
blocks. When the worker falls more than two frames behind, the title
writes per-draw constants over a SET_CONTEXT_REG_INDIRECT list the worker
has not read yet.

The console's PFP reads the list when it reaches the packet; the
difference is recorded in TechnicalDebt.md.
2026-10-08 08:30:22 +02:00
kjhq 329c825fe1 docs(libkernel): record how PPSA17221 reads sceKernelWriteThrottlingStatus 2026-10-08 08:21:30 +02:00
kjhq 295780ab20 feat(libkernel): report no write throttling in sceKernelWriteThrottlingStatus
The host has no SSD write budget, so the status reports the largest budget in its first qword and zeroes the rest.
2026-10-08 08:21:23 +02:00
Adrià 57669661c5 Merge pull request #1038 from gjonn/feat/ngs2-pcm-streaming
feat(libSceNgs2.native): stream 16-bit PCM waveforms through appended waveform blocks
2026-10-08 08:01:17 +02:00
alfalfa-starandClaude Opus 5.5 b5be685912 feat(agc): accept CMASK fast-clear DCC targets whose CMASK is expanded
A color target with both DCC and CB_COLOR_INFO.FAST_CLEAR keeps its fast
clear in the DCC keys and fills its CMASK with 0xF (expanded), as radv
does (radv_get_cmask_fast_clear_value) and as PPSA21567 does
(CB_COLOR_INFO 0x10042730, reported on #419). Such targets now decode;
their clear is materialized by the existing DCC path. A DCC target's
CMASK that is not all expanded throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 07:58:40 +02:00
alfalfa-starandClaude Opus 5.5 61a61016d8 feat(agc): render into CMASK fast-clear color targets
Draws into a color target with CB_COLOR_INFO FAST_CLEAR (bit 13) were
rejected. The CMASK keeps one nibble per 8x8 tile: 0 means the tile is
fast-cleared and reads as CB_COLOR_CLEAR_WORD, 0xF means expanded (the
texels hold the color). The texture units and display scanout do not read
it, so a title runs a fast-clear eliminate pass before sampling or
flipping such a target.

DecodeColorBuffer now takes the CMASK address (CB_COLOR0_CMASK and
CB_COLOR0_CMASK_BASE_EXT) and the bytes one nibble per 8x8 tile spans.
Before a draw renders into the target, and in a fast-clear eliminate
pass, a CMASK whose nibbles are all 0 is materialized: the target is
filled with the clear texel (FillClear on its resident image, else
guest memory on the CPU) and the CMASK bytes are stored as expanded,
through the same GPU-ordered store as the DCC "uncompressed" keys
(0xFF either way). The result equals the draw followed by the eliminate
pass. An all-expanded CMASK changes nothing; a mixed one throws, as do
fast clears of DCC, mipmapped, 3D and array targets.

PPSA14632 (LEGO Horizon Adventures) fast-clears its two 3840x2160
display buffers through CMASK, so its final composite draw was dropped
on every frame and only black was presented.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 07:58:31 +02:00
Adrià e98466797f Merge pull request #1082 from MuhammadUmair1019/fix/oracle-explicit-float-modes
fix(oracle)!: require explicit float modes
2026-10-08 07:56:13 +02:00
Adrià 058dead176 Merge pull request #1058 from Celegans12/feat/agc-r8-srgb-color-target
feat(agc): implement 8 srgb color targets through rgba8 srgb proxies
2026-10-08 07:52:45 +02:00
Adrià a9c66ebfd6 Merge pull request #1065 from alfalfa-star/fix/radv-descriptor-pool-tail
fix(agc): keep RADV's descriptor pool overrun inside the pool's pages
2026-10-08 07:49:38 +02:00
Adrià 311c0493bd Merge pull request #957 from JAB-dev/feat/kernel-flexible-internal-hint
feat(libkernel): accept flag 0x8000 in sceKernelMapNamedFlexibleMemoryInternal
2026-10-08 07:42:56 +02:00
Gjon Gojcevic 88e77da57b feat(libSceNgs2.native): stream 16-bit PCM waveforms through appended waveform blocks
A 16-bit PCM block whose num_samples exceed its data starts a stream, and waveform blocks with flag 0x2 append more data to it. The voice outputs silence while it has played all appended data and CONTINUE is set, and ends at num_samples or when CONTINUE is cleared.
2026-10-08 07:35:59 +02:00
Dean 78cac62f30 Merge pull request #1137 from Sanjaysrinivas/fix/progress-shared-sources
fix(progress): report shared-source libraries
2026-10-08 18:29:17 +13:00
Dean 0ce1e45091 Merge pull request #1083 from ctz23/docs/linux-x11-build-requirements-20261007
docs(build): list Linux X11 development dependencies
2026-10-08 18:29:03 +13:00
Dean 7753fb0165 Merge pull request #1407 from hugodearaujo/fix/voiceqos-init-error-codes
fix(voiceqos): return the console's sceVoiceQoSInit argument errors
2026-10-08 18:23:39 +13:00
TibixDev e6324faef6 fix(npmanager): track reachability callback registration
Validate registration and unregister state in the existing offline model. Add lifecycle and invalid-argument coverage.

Written with AI assistance.
2026-10-08 08:23:31 +03:00
Dean 461ab16f0d Merge pull request #1104 from jeffrey12cali/docs/libs-target-not-default
docs(build): say that the libs target is not part of the default build
2026-10-08 18:22:17 +13:00
Adrià c6bb7c1025 Merge pull request #904 from merwie/fix/kernel-module-info-for-unwind
fix(libkernel): report guest unwind tables in sceKernelGetModuleInfoForUnwind
2026-10-08 07:21:21 +02:00
Dean d521209a3a Merge pull request #1161 from krishnaraya4/docs/build-windows-ca-bundle
docs(build): name the CA bundle the WinLibs CMake needs for the FFmpeg download
2026-10-08 18:20:11 +13:00
Dean 8180dc5b9c Merge pull request #1118 from TideOPL/feat/pad-is-remote-controller
feat(libScePad): implement scePadIsRemoteController
2026-10-08 18:19:30 +13:00
Dean e0924e28f1 Merge pull request #1160 from orbz22/feat/font-glyph-define-attribute
feat(font): accept sceFontGlyphDefineAttribute as a silent stub
2026-10-08 18:19:01 +13:00
Dean fd2eb90c69 Merge pull request #1158 from orbz22/feat/ppsa01325-missing-exports
feat(libs): provide the exports PPSA01325 imports that no library has
2026-10-08 18:18:53 +13:00
Dean 10cb0d208e Merge pull request #1092 from kjhq/feat/libscehttp2-async
feat(libSceHttp2): complete asynchronous requests through the kqueue option
2026-10-08 18:18:26 +13:00
Dean 5850a6cd11 Merge pull request #1374 from gjonn/feat/tts2-unavailable
feat(libSceTextToSpeech2): report the speech engine as unavailable
2026-10-08 17:39:02 +13:00
Dean cf3823dffe Merge pull request #1354 from gjonn/feat/bluetoothhid-no-devices
feat(libSceBluetoothHid): add Bluetooth HID with no devices attached
2026-10-08 17:30:03 +13:00
Dean 9ba908c202 Merge pull request #1356 from gjonn/feat/pad-open-ext-special
feat(libScePad): report special controllers as not connected in scePadOpenExt
2026-10-08 17:27:00 +13:00
Dean 893af87af0 Merge pull request #1353 from gjonn/feat/mbus-no-devices
feat(libSceMbus): add the device service with no devices attached
2026-10-08 17:26:49 +13:00
Dean a9ba39c927 Merge pull request #1258 from MathiasDevelopes/feat/audioout2-mastering-setparam
feat(libSceAudioOut): accept sceAudioOut2MasteringSetParam
2026-10-08 16:35:16 +13:00
hugodearaujoandClaude Opus 5.5 56e4ee3565 fix(voiceqos): return the console's sceVoiceQoSInit argument errors
Measured on a PS5 (firmware 13.60) through dlopen of
libSceVoiceQoS.sprx: a null block, any size other than exactly 0x40000,
and an app type other than 0x20000000 or 0x10000000 all return
0x804E0902 without touching the block, instead of throwing. A second
initialization returns 0x804E0905, as prosper reads from the module.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 23:34:15 -03:00
Gjon Gojcevic 8d1d430599 feat(libSceTextToSpeech2): report the speech engine as unavailable
sceTextToSpeech2Initialize fails so titles skip narration; the other imported exports throw.
2026-10-08 15:31:10 +13:00
Gjon Gojcevic 54ed8e7f9c feat(libScePad): report special controllers as not connected in scePadOpenExt
Add scePadOpenExt for special ports, which return DEVICE_NOT_CONNECTED because the host has no special controller, and the extended read and report exports, which throw.
2026-10-08 15:31:10 +13:00
Gjon Gojcevic cb00552dd6 feat(libSceBluetoothHid): add Bluetooth HID with no devices attached
Initialization and callback and device registration succeed, no device ever connects, and calls that need a device throw.
2026-10-08 15:30:58 +13:00
Gjon Gojcevic 10e5b0c33a feat(libSceMbus): add the device service with no devices attached
Initialization and termination succeed, no device events are reported and device queries return no entries.
2026-10-08 15:30:58 +13:00
Dean b015323ef0 Merge pull request #1363 from gjonn/feat/share-running-status
feat(libSceShare): report no running share feature in sceShareGetRunningStatus
2026-10-08 15:18:42 +13:00
Dean 4979afbe1e Merge pull request #1347 from gjonn/feat/hmd2-unavailable
feat(libSceHmd2): add PS VR2 modules that report the runtime as unavailable
2026-10-08 15:18:06 +13:00
Dean 497bd113d5 Merge pull request #1243 from tv7/feat/player-review-dialog
feat(libSceCdlgPlayerReview): add the player review dialog
2026-10-08 15:17:45 +13:00
Gjon Gojcevic 35e3b69a2b feat(libSceShare): report no running share feature in sceShareGetRunningStatus
The host never records or broadcasts, so the first status word is cleared and the call succeeds; a null status is rejected.
2026-10-07 20:21:26 -04:00
Gjon Gojcevic a988b8b1d0 feat(libSceHmd2): add PS VR2 modules that report the runtime as unavailable
sceHmd2Initialize fails, so titles skip their VR set-up; the other libSceHmd2 and libSceVrTracker2 exports throw.
2026-10-07 19:58:01 -04:00
MerijnandClaude Opus 5.5 b86370285b fix(kernel): throw on unsupported unwind tables in sceKernelGetModuleInfoForUnwind
Once an image has .ehmeta, an eh_frame_hdr version other than 1, an
eh_frame_ptr encoding other than absptr or pcrel, a 64-bit record length,
an eh_frame_ptr outside the image or a missing terminator now throw
instead of returning the empty answer. The test queries a fixture DLL
whose .ehmeta it can break, since the unwinder reads the same section.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 00:54:43 +02:00
Karan Shrivastava 954d6f19b1 fix(libSceRtc): answer out-of-range years in sceRtcGetDosTime
A year before 1980 or after 2107 cannot be packed into the DOS time, so
GetDosTime threw. Following the disassembly-derived fpPS4
reimplementation of the PS4 library, it now returns INVALID_YEAR after
writing 0 for an earlier year and 0xff9fbf7d, the largest encodable
time, for a later one. The TechnicalDebt entry now records fpPS4 as the
source for the SetDosTime year decode as well.
2026-10-07 17:18:42 -04:00