Commit Graph
14017 Commits
Author SHA1 Message Date
milescovielloandClaude Opus 5.5 51d6c2f9f2 feat(agc): take RADV's comp-to-single clear of a multisampled DCC target
RADV clears a multisampled DCC target to a color other than 0000, 0001,
1110 or 1111 with radv_clear_dcc_comp_to_single: a compute dispatch stores
the color at the first pixel of every DCC block through a uint storage view,
and the DCC keys become 0x10. The driver refused that view of a resident
target, made a separate target in the view's format otherwise, and couldn't
import 0x10 keys.

The dispatch is now recognized by its code and not run. Its clear color is
recorded for the surface its image descriptor names, and 0x10 keys on a
multisampled target of that surface, size and sample count import as a clear
to that color, for texels up to 32 bits.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 21:23:58 +00:00
wsjardijn dd523997da fix(libSceVideoOut): fall back to 59.94 Hz when display drops below 120 Hz
When a title has configured 119.88 Hz output (mode 15) and the window moves
to a display below 120 Hz, the presenter fell back to std::terminate via a
require() call. Replace the abort with a graceful fallback: reset outputMode
to mode 1 (59.94 Hz), fire the output-mode event so the title is notified,
and continue presenting.

This matches the HDMI output mode renegotiation a real display change
requires: the system falls back to a compatible mode and notifies the
title, rather than terminating the process.

After the fallback:
- sceVideoOutGetOutputStatus reports refreshRate 3 (59.94 Hz)
- sceVideoOutGetResolutionStatus reports refreshRate 3
- vblanks run at 59.94 Hz (every-other-tick skip resumes)
- sceVideoOutIsOutputSupported(mode=15) returns the unsupported error
- sceVideoOutConfigureOutput(mode=15) succeeds again once the window is
  on a 120 Hz display

The console's exact behaviour when a 120 Hz display is lost has not been
measured; this fallback is recorded as unverified in the debt file.

Fixes #7877
2026-10-19 23:21:16 +02:00
David 573d85e2b8 Merge remote-tracking branch 'origin/main' into feat/shader-barycentric-tessellation-last-vertex 2026-10-20 01:20:06 +04:00
Slick Daddy abf83aa4a8 feat(libSceVideodec): implement the video decoder on top of libSceVideodec2
libSceVideodec's five exports were stubs that threw. Decoder creation,
decoding, flushing, resetting and deleting are implemented with the
structure layouts of shadPS4's PS4 library, and the decode runs through
libSceVideodec2, which decodes H.264 with FFmpeg. The picture is copied
into the caller's frame buffer with the pitch aligned to 64 and the coded
height, the chroma after the luma rows, and the picture information holds
the timestamps and the crop offsets.

A guest test decodes the H.264 fixture through the library and checks the
pictures against the reference hashes.
2026-10-20 00:17:11 +03:00
juanpimg 2f0ed638dc feat(prx): declare the missing PS5 3.20 system exports
AnyPS5 resolves a title's imports by NID, so a title that imports a system
function no library provides fails to load with an unresolved import. The
PS5 3.20 export inventory lists 193 such exports across 37 PS5 system
libraries AnyPS5 implements but does not provide.

Declare them as throwing stubs so those titles load and reach their next
blocker. Each declaration calls NotImplemented_nid_no_patch and returns 0;
none of them implements the function. Declarations with a credible
prototype use it and cite the source with a pinned commit, and the rest
are declared without parameters, which resolves the import without making
an ABI claim. The technical-debt files record the limitation per library.

libSceMbus and libSceSystemService are left out because pull request #7821
declares them. libSceAgc is left out because its exports are versioned, so
the 3.20 NID names a different symbol from the one AnyPS5 ships.
libSceAvPlayer.native is left out because it compiles libSceAvPlayer's
Export.cpp.

Names and NIDs come from the PS5 3.20 export inventory at
https://github.com/DNNDHH/PS5-3.20_Libs/tree/b2a77c09cd71c01f34c790cfbe98c751a13262ad
2026-10-19 23:16:55 +02:00
Yossi Yadgar 3bdd430a32 docs(debt): note a float color export into a uint target is accepted 2026-10-20 00:07:54 +03:00
XairRrR 0e9d052541 Merge main into pr-7154
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/include/Texture.hpp
2026-10-19 23:07:50 +02:00
Yossi Yadgar ca76e540db test(agc): export the front-face bits through a uint target as uint 2026-10-20 00:07:36 +03:00
eliasbruno124-dev 7991f0130e fix(tools): resolve unscoped registry imports from guest modules 2026-10-19 23:05:59 +02:00
Claude 84a6fb0fe5 test(agc): register the CPU thread-dimension test in its own block
The agc_driver_indirect_thread_dimensions_cpu registration sat at the end of
the address-passes test block, where other open changes add their tests too.
It now has its own BUILD_TESTING block after the execution test name check,
with the same properties.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-19 21:04:35 +00:00
Dean Galvin 5e88d5f83e Merge main into pr-6730
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
#	core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
#	docs/dev/debt/libSceAgcDriver.md
2026-10-20 09:56:39 +13:00
Dean bf2c63f853 Merge pull request #7864 from MarcZX10/codex/pngdec-output-alignment
fix(libScePngDec): reject misaligned output buffers
2026-10-20 09:52:51 +13:00
Dean a9970f75df Merge pull request #7863 from MarcZX10/codex/pngdec-alpha-value-validation
fix(libScePngDec): reject oversized alpha values
2026-10-20 09:52:37 +13:00
Dean 5606dd7644 Merge pull request #7059 from Aryansh1520/fix/pad-tap-between-reads
fix(pad): report a press that ends before the next pad read
2026-10-20 09:52:24 +13:00
Dean 3756c72dc6 Merge pull request #6479 from EagleBearerYS/perf/agc-host-import-blocks
perf(agc): take the host import budget from the device's memory budget
2026-10-20 09:52:09 +13:00
Dean 524259954a Merge pull request #6457 from EagleBearerYS/perf/agc-host-import-aligned-blocks
perf(agc): import adjacent host ranges as aligned blocks and stop re-trying budget refusals
2026-10-20 09:51:55 +13:00
mugurc 7701a9b9da feat(libkernel): UDP sockets and name resolution on macOS hosts
The guest socket layer relies on a few Linux calls:

- The equeue wait uses poll with the timeout rounded up to a millisecond;
  macOS has no ppoll.
- A readable stream socket whose peer closed is reported with POLLHUP by
  peeking one byte; macOS has no POLLRDHUP.
- FIONREAD on a datagram socket, and the byte count that fstat and kevent
  report for it, is SO_NREAD, the size of the next datagram; macOS adds the
  source address to FIONREAD.
- socketpair throws for SOCK_SEQPACKET, which has no AF_UNIX pair on macOS.
- gethostbyname replaces gethostbyname_r, which macOS lacks.

The UDP test sends on its connected socket without an address, as #7475
does, because macOS, like FreeBSD, fails sendto with an address on a
connected socket with EISCONN. The log test uses a datagram pair with
enlarged buffers instead of SOCK_SEQPACKET.
2026-10-19 23:36:56 +03:00
Adrià 9127ea36d2 Merge pull request #7435 from MrMha/feat/parallel-syntax-checks-20261018
feat: run independent syntax checks with configurable concurrency
2026-10-19 22:32:17 +02:00
Adrià 283cde8987 Merge pull request #7438 from MrMha/feat/configure-seed-filters-20261018
feat: filter configure checks included in cache seeds
2026-10-19 22:30:08 +02:00
Alexej Szpevák 675ff30898 feat(libc): scan 16-bit wide conversions in the sscanf family on Linux
sscanf, vsscanf, sscanf_s and vsscanf_s threw on Linux for %ls, %lc, %l[, %S and %C, because glibc stores a 32-bit wchar_t per character into the guest's 16-bit buffer. ScanGuest, the per-directive scanner the _s forms already use, now scans those fields itself: the input is decoded as UTF-8, mirroring the narrow printf family's UTF-8 output, and each character is stored as one 16-bit unit, the width and the _s size counting characters; %ls skips leading white space and stops at the next, %l[ matches an ASCII scanset with ranges and negation, and a %lc field that meets the end of the input early keeps what it read, as FreeBSD's convert_wchar does. sscanf and vsscanf route a format with a wide conversion through ScanGuest and keep the host path otherwise. The UTF-8 decoding and scanset matching live in ScanWideField.cpp, which throws for input that is not UTF-8, a character outside the BMP, a scanset member outside ASCII and positional arguments next to a wide conversion; wide conversions in fscanf still throw.
2026-10-19 22:30:07 +02:00
Dean Galvin adf8e05f46 Merge main into pr-7042
# Conflicts:
#	core/shader/recompiler/Translation/include/Translation/TranslationContext.hpp
#	core/shader/recompiler/Translation/src/Float64Instructions.cpp
#	docs/dev/debt/shader.md
2026-10-20 09:25:06 +13:00
Dean 6d89a7bd8a Merge pull request #7036 from thuanquang/fix/f64-rounding-denormal-flush
fix(shader): flush f64 floor, ceil, fract and frexp denormal inputs
2026-10-20 09:22:37 +13:00
Dean b66cd49b01 Merge pull request #7153 from MarcZX10/codex/wait-regmem-no-drain-7138
perf(agc): keep draw pipeline for satisfied waits
2026-10-20 09:22:22 +13:00
Dean 030ba406f2 Merge pull request #5497 from gjonn/perf/agc-pattern-fill-dcc-keys
perf(agc): read DCC keys behind a pattern fill kernel's fast clear without a wait
2026-10-20 09:22:08 +13:00
Dean 6b981a212c Merge pull request #7675 from valenciana-nc/fix/recvmsg-guest-validation
fix(libkernel): fail recvmsg with EFAULT on guest memory it cannot read or write
2026-10-20 09:21:54 +13:00
Adrià 12ee57a39b Merge pull request #7396 from ErenYeager1836/fix/playgo-dialog-get-result-not-finished
fix(libScePlayGoDialog): return error for uncompleted dialog in scePlayGoDialogGetResult
2026-10-19 22:18:46 +02:00
Adrià 3d4da7ad01 Merge pull request #7434 from MrMha/feat/oracle-offline-validation-20261018
feat: validate hardware-oracle inputs without GPU tools
2026-10-19 22:17:49 +02:00
Adrià 602d8e66b1 Merge pull request #7429 from ps54all/feat/shader-ds-ordered-count-swap
feat(shader): model ds_ordered_count swap
2026-10-19 22:17:42 +02:00
Dean Galvin f1ac3be50c Merge main into pr-6557
# Conflicts:
#	core/libs/prx/libSceAgcDriver/tests/execution/NativeMultisampleDepth.cpp
2026-10-20 09:15:59 +13:00
Adrià c525369a67 Merge pull request #6701 from eljackjoestar-cmd/perf/sparse-windows-write-tracking
perf(agc): allocate Windows write-tracking stamps on demand
2026-10-19 22:15:37 +02:00
Adrià 252cbc29be Merge pull request #7430 from MrMha/feat/performance-context-gate-20261018
feat: require matching recorded context in performance comparisons
2026-10-19 22:05:21 +02:00
Adrià cde1ffdedd Merge pull request #7254 from gjonn/feat/agc-layered-2d-array-color-views
feat(agc): render layered draws into 2D array color views
2026-10-19 22:05:15 +02:00
Adrià 7fe0790e59 Merge pull request #7388 from pushkarreddyy/feat/recompiler-waterfall-image-table
feat(recompiler): support waterfall select conditions and key bounds in pointer image tables
2026-10-19 22:04:09 +02:00
Savvanis SpyrosandClaude Opus 5.5 9761125226 fix(libScePlayGo): read the chunk count of a PS4 plgo chunk table
A PS4 package's sce_sys/playgo-chunk.dat starts with the magic "plgo"
instead of the PS5 "plgx", so scePlayGo threw on every PS4 title that
ships one. Up to the chunk count the two headers have the same layout: a
32-bit magic, then 16-bit version major, version minor, image count and
chunk count, so the count is the little-endian 16-bit word at 0x0A in
both. The table is now read for either magic; a zero count is still
rejected.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 23:04:00 +03:00
Savvanis SpyrosandClaude Opus 5.5 1231265e50 fix(agc): accept a draw without a pixel program while CB_COLOR_CONTROL disables color
A draw with no pixel program was rejected as writing color whenever
CB_TARGET_MASK and CB_SHADER_MASK overlap, even with CB_COLOR_CONTROL
mode 0 (CB_DISABLE). DecodeState already drops every color export in
that mode, so such a draw writes no color: a depth or stencil
decompress pass draws this way, leaving the masks of the previous draw.
An unwritten CB_COLOR_CONTROL still leaves the decision to the masks.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 23:01:29 +03:00
Dean e80325a4c7 Merge pull request #7860 from MarcZX10/codex/pngdec-pitch-validation
fix(libScePngDec): validate custom decode pitch
2026-10-20 08:52:59 +13:00
Dean b372f302f3 Merge pull request #7857 from MarcZX10/codex/pngdec-decode-width-limit
fix(libScePngDec): enforce decode width limit
2026-10-20 08:52:45 +13:00
Dean f1861e4141 Merge pull request #7855 from KernelPanicNT/fix/pngdec-create-max-width
fix(libScePngDec): reject a maximum image width above 1000000
2026-10-20 08:52:31 +13:00
Adrià dfd22c1887 Merge pull request #7428 from mrfelek/fix/ngs2-setup-clears-callback
fix(libSceNgs2): clear the voice callback on sampler and mixer setup
2026-10-19 21:52:05 +02:00
Adrià dd4c2a413b Merge pull request #7418 from tkcm01/fix/relinker-backup-copy-export-aliases
fix(relinker): allow Windows export aliases when probing backup copies
2026-10-19 21:51:59 +02:00
Dean aea539e17a Merge pull request #7854 from KernelPanicNT/fix/userservice-initialize-priority
fix(libSceUserService): check the thread priority on initialization
2026-10-20 08:51:52 +13:00
Adrià 19f21ebcb7 Merge pull request #7415 from milescoviello/fix/staged-clear-format
test(agc): print the staged clear's expected byte count as a size_t
2026-10-19 21:51:47 +02:00
Adrià f745930f03 Merge pull request #7413 from thuanquang/fix/table-call-hoisted-descriptor
fix(shader): link a table call whose descriptor load sits before its loop
2026-10-19 21:50:42 +02:00
thuanquangandClaude Opus 5.5 baa581335f ci: give the PR label job 30 minutes
The first hourly pass over every open pull request after #5976 was
cancelled at the 10-minute limit (run 39160516271).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 02:49:30 +07:00
thuanquangandClaude Opus 5.5 881dfc1b16 fix(tools): don't label "Unblocks: none ..." pull requests as unblocking a title
title_ids took every title ID from the Unblocks field, so a field that
starts with "none" and then names a title for context ("none by
itself; foundation for PPSA27836 in #6570") got the unblocks title
label. A field that starts with "none" now names no title.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 02:47:59 +07:00
voidlakhan 0d24f581f4 docs(ampr): preserve existing debt entries 2026-10-19 19:47:08 +00:00
Johan David e4898783b6 feat(agc): sample the draw committer with APS5_SAMPLE_COMMITTER
Queue 0's draw committer records the draws the packet worker hands
over. When the worker's APS5_SAMPLE_WORKER stacks wait in
DrawPipeline::Enqueue, the committer is the thread that bounds the
frame, and only APS5_SAMPLE_THREADS sees it: 40 addresses, 12 frames
deep, without whole stacks.

APS5_SAMPLE_COMMITTER=<file> attaches the worker's sampler to the
committer when its thread starts and writes the same two files. Both
use one start function, and StopWorkerSampler stops both.
2026-10-19 14:45:14 -05:00
XairRrR a1c0f34f4b Merge main into pr-7154
# Conflicts:
#	core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
2026-10-19 21:43:06 +02:00
Leonardo 2b64ff202c Merge branch 'main' into feat/voiceqos-packet-attribute 2026-10-19 21:42:23 +02:00
Adrià 8075b6af19 Merge pull request #7398 from ErenYeager1836/fix/login-dialog-close-status
fix(libSceLoginDialog): transition to finished on dialog close
2026-10-19 21:38:18 +02:00