AnyPS5/core
alfalfa-star 4f9ddffce0 perf(agc): read a fast-cleared surface's guest bytes only when the import is compared
#2096 keeps a copy of a storage image's guest bytes so that Refresh can
compare memory the write watch does not cover. The host-import upload
path takes that copy only when the range is unwatched, but the DCC
fast-clear path took it on every upload. Reading the whole surface goes
through the flush hook, so each 64 KiB block of a surface that a unit
shadow covers recorded a publish and waited for the GPU.

The clear path now resolves the surface's host import first (the import
can unwatch the range, as a compared host-pointer import does) and takes
the copy only when the range is then unwatched, like the import path.
Write-watched memory, such as direct memory behind a dma-buf import,
skips it; a range that is unwatched later re-uploads instead of
comparing, as before #2096.

agc_driver_dcc_keys_first_write checks that a fast-cleared upload keeps
the copy exactly when its range is unwatched at that point.

PPSA14632 (LEGO Horizon Adventures) on Linux, RX 9070 XT: the flush hook
waited ~60,000 times per 10 s for these publishes (6.4 s), now ~3,500,
and presents rise from ~24 to ~100 per 10 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 13:05:34 +02:00
..
Decoder fix(png): bound transparency chunk detection to the input 2026-10-10 09:28:30 +08:00
libs perf(agc): read a fast-cleared surface's guest bytes only when the import is compared 2026-10-10 13:05:34 +02:00
relinker Merge pull request #2594 from morten-holm/pr/macos-clear-pie 2026-10-10 11:15:15 +02:00
shader/recompiler Merge pull request #1290 from SirDarky/fix/shader-mac-legacy-denormals 2026-10-10 11:23:53 +02:00