Commit Graph
2230 Commits
Author SHA1 Message Date
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
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
Dean 2dbb729b78 Merge pull request #5738 from oneandonlydean/revert/5608
Revert "fix(libSceVideoOut): export unknown Onimusha import NID" (#5608)
2026-10-14 21:58:37 +13:00
Dean 2582ec1193 Merge pull request #5309 from hugodearaujo/feat/agc-sparse-dmabuf-import
feat(agc): import shared ranges above 64 MiB as sparse buffers over udmabuf chunks
2026-10-14 21:50:50 +13:00
Dean Galvin 6b4d3c8ae6 Revert "fix(libSceVideoOut): export unknown Onimusha import NID" (#5608)
The export turned YNw9Xk5iNWo from an unresolved import into a stub that throws. Dreaming Sarah (PPSA02929) calls it during start-up and now aborts with "YNw9Xk5iNWo not implemented" about 2 s in. Reverting until the function is implemented.
2026-10-14 21:40:28 +13:00
Dean 1209d37072 Merge pull request #5705 from oneandonlydean/feat/host-cpu-check
feat(libkernel): stop at start-up on a host CPU without the PS5's extensions
2026-10-14 20:47:35 +13:00
Dean 327249d4e9 Merge pull request #5028 from nikowolf123/perf/structurizer-attempt-budget
perf(recompiler): iterate structurizer fixpoints in post-order and bound shared merge splitting growth
2026-10-14 20:45:02 +13:00
Dean eac1e26e29 Merge pull request #4926 from nikowolf123/feat/structurizer-complete-fallback
feat(recompiler): structure every control-flow graph the structurizer refuses
2026-10-14 20:44:09 +13:00
Dean 5ee94cf571 Merge pull request #4201 from Celegans12/feat/agc-tessellation-relative-patch-data
feat(agc): rebuild the hull's relative patch index when it is used as data
2026-10-14 20:39:33 +13:00
Dean Galvin 83a268a867 feat(libkernel): stop at start-up on a host CPU without the PS5's extensions
Titles run natively, so a host CPU without an extension that compiled Zen 2 code uses faults with an illegal instruction deep inside a title (#3719: SHLX, BMI2). libkernel now reads CPUID and XCR0 when it loads on Linux and Windows, logs the host CPU's extensions and throws, naming the CPU and the missing extensions, before any title code runs.
2026-10-14 20:29:57 +13:00
Dean a3aeaf884b Merge pull request #5608 from hossiendehghan989/fix/videoout-unknown-nid-ynw9xk5inwo
fix(libSceVideoOut): export unknown Onimusha import NID
2026-10-14 20:17:13 +13:00
Dean 3152609030 Merge pull request #5454 from mohammad-alosta/feat/libc-swprintf-s
feat(libc): implement swprintf_s
2026-10-14 20:12:15 +13:00
hossiendehghan989 5dc7111924 fix(libSceVideoOut): export unknown Onimusha import NID 2026-10-14 20:04:08 +13:00
Dean d8888df9b2 Merge pull request #5075 from SandstromPL/fix/ajm-opus-mono-family-255
fix(ajm): accept Opus mapping family 255 for a mono stream
2026-10-14 19:38:43 +13:00
Dean 4a34ebd5fa Merge pull request #4962 from fdfawef324/feat/libScePad-unknown-zBsgF0q8DIM
feat(libScePad): declare the unknown import zBsgF0q8DIM
2026-10-14 19:38:31 +13:00
Dean f87799aa3a Merge pull request #5061 from p3n1cillin/claude/getdtablesize
feat(libkernel): add getdtablesize
2026-10-14 19:33:57 +13:00
Dean d000959a6c Merge pull request #5313 from Raghav314/perf/agc-msaa-fill-host-only
perf(agc): do not store a compute fill a multisampled target takes as its clear
2026-10-14 19:28:50 +13:00
Dean a94675fb17 Merge pull request #5039 from YossiYad/fix/agc-sample-array-target-layer
fix(agc): sample a slice-0 array color target as a 2D texture through its image
2026-10-14 19:20:40 +13:00
Dean bfad46ed30 Merge pull request #4878 from nikowolf123/perf/windows-import-hint
perf(agc): compare Windows direct imports only after a write-watch mark
2026-10-14 19:20:14 +13:00
Dean a308b823d6 Merge pull request #5366 from codingreapermaps/feat/convert-keycode-get-character
feat(libSceConvertKeycode): implement sceConvertKeycodeGetCharacter for the US layout
2026-10-14 19:17:43 +13:00
Dean 043f420c87 Merge pull request #5348 from MathiasDevelopes/codex/pr-fiber-active-stack-range
fix(fiber): report the stack used by the executing fiber
2026-10-14 19:17:16 +13:00
Dean 591d39c393 Merge pull request #5005 from fdfawef324/feat/recompiler-aperture-source-values
feat(recompiler): read the scalar aperture sources as values
2026-10-14 19:16:56 +13:00
Dean 6546a33944 Merge pull request #4728 from Ondra97/codex/fix-fdopen-access-mode
fix(libc): reject incompatible fdopen access modes on Windows
2026-10-14 19:06:55 +13:00
Dean ea53213fd4 Merge pull request #4674 from zaydzaari/research/kernel-system-version-size-1342
fix(libkernel): accept measured system version record values
2026-10-14 19:06:34 +13:00
Dean 9858d27be7 Merge pull request #4673 from milescoviello/fix/scenet-msg-dontwait
fix(libSceNet): accept MSG_DONTWAIT in the send and receive calls
2026-10-14 19:06:13 +13:00
Dean f38b70b5e8 Merge pull request #4777 from MarcZX100/codex/ngs2-patch-to-rack-4334
fix(ngs2): resolve voice patches to rack handles
2026-10-14 19:05:53 +13:00
Yossi Yadgar 70d7497a27 docs(debt): note the array layer views of slice-0 color targets 2026-10-14 18:56:46 +13:00
NikoandClaude Opus 5.5 83787e692a perf(agc): compare Windows direct imports only after a write-watch mark
On Windows every direct host import leaves the write watch, and a storage
image over it compares its whole surface with its guest-byte copy at every
collect epoch. #4432 measured 7-8.6 s of every 10 s in those compares on a
GTA V scene, with 98% of the compared surfaces unchanged.

Tracker blocks that leave the watch now keep their write-watch marks as a
hint. Leaving the watch gives a block a fresh hint stamp, and
UntrackedHint walks a range of such blocks, at most once per collect epoch
and thread, stamping the blocks whose pages a CPU store marked; it
returns the newest stamp of the range. compareUntracked puts that stamp in
its memo key in place of the collect epoch, so an image is compared again
after a mark in its range, a driver store, a mapping change or a recorded
GPU write. The byte compare still decides whether anything changed: a mark
the driver makes without a CPU store costs one compare and drops nothing.
Nothing else reads the hint. Collects, Watched, UnchangedSince,
ChangedBlocks and NewestStamp still treat those blocks as untracked, and
Linux is unchanged.

agc_driver_dcc_keys_first_write refreshes an imported storage image over
50 collect epochs with no store: it compared the image 50 times before and
0 times now. A CPU store is still uploaded on the next refresh, and a store
of the bytes already there costs one compare and keeps the pending
results. agc_write_tracking checks the hint itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 18:56:27 +13:00
alfalfa-starandClaude Opus 5.5 040873f9dc feat(videoout): use native Wayland on Linux
Build SDL's Wayland backend next to X11 and ask SDL for "wayland,x11"
on Linux, so the window runs natively under a Wayland compositor instead
of through XWayland. SDL loads libwayland, xkbcommon and libdecor at run
time, so systems without them, or sessions without WAYLAND_DISPLAY, keep
using X11. SDL_VIDEODRIVER still overrides the choice.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 07:24:34 +02:00
Dean e46c695054 Merge pull request #5657 from oneandonlydean/fix/storage-save-at-unwatch
fix(agc): save the guest bytes of pending storage results when their range leaves the write watch
2026-10-14 18:23:11 +13:00
Dean c9ee728a7c Merge pull request #3925 from eliasbruno124-dev/fix/http2-direct-wait
fix(http2): allow completion waits without an event queue
2026-10-14 18:19:42 +13:00
Dean Galvin 4e136dd323 fix(agc): decide the sparse dma-buf import before importing and throw after
A shared range larger than one chunk now takes the sparse path only when
the device binds sparse memory, udmabuf is open, the range's backing
offset is on the sparse block size, the sparse buffer accepts every
memory type a chunk import can have and the backing file covers the
last chunk. All of that is known before a chunk is imported. Once the
path is chosen, a failed chunk import, fence creation, bind, fence wait or device
address throws instead of going on to the whole-range udmabuf and copies.

agc_host_import_sparse checks the import against a mocked device with
the real udmabuf: a range above size_limit_mb becomes one sparse buffer
bound to one chunk import per 64 MiB, an unaligned backing offset
imports no chunk, and failures of UDMABUF_CREATE and vkQueueBindSparse
after the decision throw.
2026-10-14 18:16:17 +13:00
Dean ac35f596cc Merge pull request #5193 from 0xRickx/fix/libsceopusdec-narrowband
fix(libSceOpusDec): decode narrowband SILK packets
2026-10-14 18:12:32 +13:00
Dean d4efd33978 Merge pull request #4895 from fdfawef324/feat/agc-index-attributes-indirect
feat(agc): execute INDEX_ATTRIBUTES_INDIRECT (PM4 0x91)
2026-10-14 18:12:18 +13:00
Dean Galvin db4fd5f29c fix(agc): take the GPU lock when saving pending storage results before the range leaves the write watch
A draw made outside the GPU lock (agc_driver_recorded_kept_bytes) imports a target's memory and leaves the watch there; the hook threw instead of saving. It now takes the lock, as FlushPending does.
2026-10-14 18:04:20 +13:00
codingreapermapsandClaude Opus 5.5 c8662b6bca fix(agc): accept alpha-to-coverage from a 32_AR MRT0 export without a color target
radeonsi exports MRT0 as 32_AR when alpha-to-coverage is on and no color
buffer is bound, so a depth-only draw can depend on that alpha. The
decoder now accepts 32_AR and an absent MRT0 target, and reads the MRT0
export format from SPI_SHADER_COL_FORMAT, which it masked to 0 for
draws without a color target.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:57:00 +13:00
NikoandClaude Opus 5.5 26a746a433 fix(shader): take the 32_AR export alpha from channel 1 as GFX10 does
A pixel export to an MRT whose SPI_SHADER_COL_FORMAT is 32_AR read its
alpha from export channel 3 (EN mask 0x9), the layout before GFX10. On
GFX10, which the PS5's gfx1013 is, the alpha is channel 1: Mesa's
emit_ps_color_export (ac_nir_lower_ps_late.c, index
gfx_level >= GFX10 ? 1 : 3), ACO and radeonsi in Mesa 22.0
(enabled_channels 0x3 with the alpha in channel 1) and LLPC's
FragmentColorExport.cpp (EXP_FORMAT_32_AR, exports[1]) all emit it
there. A console shader's `exp mrt0 v0, v1, off, off` therefore lost
its alpha: it stayed at the 1.0 default, so an alpha-only COLOR_32
ALT_REV target stored 1.0 and an R32 target blended with SRC_ALPHA
blended as if the alpha were 1. With channel 3 enabled, channel 3 was
taken instead.

ExportVector now reads channels 0 and 1 for 32_AR and puts channel 1
in the alpha component; channels 2 and 3 are ignored. The layout comes
from the compilers, not from a hardware measurement, and is recorded in
docs/dev/debt/shader.md.

agc_driver_pixel32_ar_export draws 32_AR exports with EN 0x3, 0xb and
0xf, as wave32 and wave64, into a COLOR_32 FLOAT ALT_REV target and a
COLOR_32 FLOAT target blended with SRC_ALPHA and ONE_MINUS_SRC_ALPHA,
and compares every stored value bit for bit. Without the fix every row
fails: the stored value uses an alpha of 1.0 or of channel 3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:56:48 +13:00
hugodearaujoandClaude Opus 5.5 5894feff7e feat(agc): import shared ranges above 64 MiB as sparse buffers over udmabuf chunks
On Linux a shared-backed guest range is imported through one udmabuf
covering the whole range, and udmabuf refuses buffers above its
size_limit_mb (64 MiB by default). Larger ranges fell back to copies; an
address-based dispatch then synced its whole mirror, storing back every
pending storage image inside it each time.

Such a range is now one sparse buffer bound to the existing 64 MiB chunk
imports. The bind runs on a sparse binding queue of its own when the
device has one, so imports made at map time (without the GPU mutex) can
use it; otherwise only under the GPU mutex on the main queue.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 17:55:39 +13:00
Dean 75690a117e Merge pull request #4237 from MarcZX100/codex/carry-fixed-base-3043
fix(relinker): load Windows executables at a fixed low base
2026-10-14 17:49:45 +13:00
Dean Galvin e56a7c2351 fix(agc): save the guest bytes of pending storage results when their range leaves the write watch
On Windows, singly mapped direct memory is private since #5596, so its host
import is a direct import that leaves the write watch instead of a shared
alias that stays watched. A storage image whose results were pending when
its memory was imported had no saved guest bytes, and storing them threw.

GuestMemory now calls a hook before Unwatch and before an ImportWatched
that does not stay watched. Every image with results pending over the
range saves the guest bytes of its pending units that have none, then
collects and records the pieces the keep rule leaves to the CPU for the
writes the watch saw. The next store and Refresh leave those pieces to the
CPU and compare the rest with the saved bytes. A map-time import made
without the GPU lock is deferred to the locked retry when pending results
overlap the range.
2026-10-14 17:43:41 +13:00
Dean Galvin bf6b6c0a17 docs(relinker): describe fixed-base default for Windows executables 2026-10-14 17:39:48 +13:00
Dean ee50655414 Merge pull request #5109 from pushkarreddyy/feat/libkernel-foreign-module-protect
feat(libkernel): support sceKernelMprotect on foreign guest module images on Windows
2026-10-14 17:26:42 +13:00
Dean 718ae1355c Merge pull request #4903 from ErenYeager1836/carry/fstat-guest-socket
fix(libkernel): report socket status from fstat on a guest socket
2026-10-14 17:26:23 +13:00
Dean 1c95691fb5 Merge pull request #5290 from veosett/codex/allocator-failure-results
fix(libc): return allocation failures to guest callers
2026-10-14 17:26:13 +13:00
Dean 6fad06c19e Merge pull request #4669 from milescoviello/fix/scenet-unspec-disconnect
fix(libSceNet): dissolve a datagram association on connect to AF_UNSPEC
2026-10-14 17:25:39 +13:00
Dean 6ed374413e Merge pull request #4681 from milescoviello/fix/alias-trailing-slash
fix(libc): keep a trailing slash on paths under a mount alias
2026-10-14 17:25:15 +13:00
ThatsLeo 9828710a38 feat(videoout): implement sceVideoOutGetOutputStatusWithVrr
Writes the 80-byte status described in #2746: the sceVideoOutGetOutputStatus
fields followed by zeros, with the documented codes for a null status and an
unknown handle.

(cherry picked from commit e893efad2d0a7b90243d07bf6669cc9b5f540432)
2026-10-14 16:37:40 +13:00
Dean a14ae8e232 Merge pull request #5186 from p3n1cillin/claude/carry-fioclex
fix(libkernel): handle FIOCLEX and FIONCLEX in ioctl
2026-10-14 16:31:08 +13:00
Dean f5cda839ec Merge pull request #4717 from Ondra97/codex/fix-relro-unused-filter
fix(relinker): map standalone RELRO in unused import filtering
2026-10-14 16:05:01 +13:00