Commit Graph
7642 Commits
Author SHA1 Message Date
hypermistandClaude Opus 5.5 e54d2f35fe fix(agc): check GPU-side indirect dispatch group counts against the device limit
A DISPATCH_INDIRECT read on the GPU took its group counts unchecked. A count
buffer that a skipped producer never wrote (PPSA08427: 0xffffffff left by
skipped depth-plane passes) launched up to 2^32 groups and kept the GPU busy
until the title hung. The CPU path already refuses counts above
maxComputeWorkGroupCount.

- Recorder::RecordDispatchArguments copies the three counts from the import
  into a 12-byte indirect buffer with a one-thread kernel
  (DispatchArguments.comp), all three 0 when one exceeds the device limit, as
  RecordMeshArguments does for mesh indirect records.
- VulkanDevice records the dispatch from that buffer; without the kernel the
  import is read directly, as before.
- agc_driver_indirect_dispatch_limit: 0xffffffff groups run nothing, one group
  still runs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Q8tinbP1MUpUaDsbNWnGnu
2026-10-16 02:03:15 +13:00
Adrià e534fd98b6 Merge pull request #5715 from ErenYeager1836/fix/web-browser-dialog-error-codes
fix(libSceWebBrowserDialog): return error codes instead of throwing in initialize and terminate
2026-10-15 15:00:27 +02:00
Adrià f0a1e3443b Merge pull request #5691 from xXPBSXx/fix/video-out-flip-rate-error-v2
fix(libSceVideoOut): return VIDEO_OUT_ERROR_INVALID_VALUE for a flip rate outside 0..2
2026-10-15 14:59:01 +02:00
Adrià 2b8a685dfe Merge pull request #5683 from MarcZX100/codex/rosetta-scalar-compare-5642
fix(relinker): isolate Rosetta scalar compare hazards
2026-10-15 14:57:14 +02:00
Adrià 54ee3c0945 Merge pull request #5675 from fogydes/fix/test-windows-fixed-base-error-mode
test(relinker): suppress Windows error dialog in occupied base collision check
2026-10-15 14:56:20 +02:00
Adrià f3c00ad28e Merge pull request #5670 from fogydes/fix/relinker-cfg-address-overflow-guards
fix(relinker): prevent address overflow and signed UB in CFG, GOT access, and entry point analysis
2026-10-15 14:55:50 +02:00
Adrià e890b4a385 Merge pull request #5660 from milescoviello/fix/ngs2-empty-waveform-blocks
fix(ngs2): accept empty waveform blocks and matrix levels on a voice without a format
2026-10-15 14:54:20 +02:00
Adrià 3ee5371915 Merge pull request #5627 from AlxcBTW/fix/agc-htile-written-by-any-kernel
fix(agc): take depth fast clears from HTILE written by any kernel
2026-10-15 14:52:34 +02:00
Adrià a61c8a37e0 Merge pull request #5554 from Amoenus/codex/native-depth-htile-clears
fix(agc): apply completion-proven native depth clears
2026-10-15 14:51:07 +02:00
Adrià FranchandClaude 57ce03944d fix(agc): keep the draw key trace map out of module teardown on Windows
Co-Authored-By: Claude <[email protected]>
2026-10-15 14:48:04 +02:00
Adrià de663b8841 Merge pull request #6333 from milescoviello/fix/pm4-tests-recompiler-includes
fix(agc): link agc_driver_pm4_tests against the shader recompiler
2026-10-15 14:16:40 +02:00
Adrià f728e37955 Merge pull request #5702 from AlexOfTheForest/test/runtime-layout
test(cli): cover RuntimeLayout file tree output
2026-10-15 14:15:39 +02:00
Adrià 7a22c43027 Merge pull request #5695 from YossiYad/fix/relinker-executable-mode
fix(relinker): write Linux and macOS executables with execute permission
2026-10-15 14:15:08 +02:00
Adrià e53927780c Merge pull request #5671 from oneandonlydean/fix/unwatch-hook-blocks
fix(agc): save pending storage results in every 64 KiB block that leaves the write watch
2026-10-15 14:13:48 +02:00
Adrià 1036905b5f Merge pull request #5565 from Dripl1x/feat/socket-options-nodelay-nosigpipe-nbio
feat(libkernel): answer TCP_NODELAY, SO_NOSIGPIPE and SO_NBIO on a guest socket
2026-10-15 14:11:15 +02:00
Adrià 264a528877 Merge pull request #5556 from Nixitov/feat/rtprio-thread
feat(libkernel): implement rtprio_thread and the pthread concurrency controls
2026-10-15 14:10:58 +02:00
milescovielloandClaude Opus 5.5 2c9ab96a0b fix(agc): link agc_driver_pm4_tests against the shader recompiler
Since #5364, Draw/DrawRegisterKey.hpp includes Shaders/ShaderRegistry.hpp,
which reaches ShaderMemory.hpp and its "Recompiler.hpp". tests/Pm4.cpp
includes DrawRegisterKey.hpp, but agc_driver_pm4_tests only links
libSceAgcDriver, libc and libkernel, so the recompiler's include
directories are not on its path and Pm4.cpp no longer compiles. The test
targets that already reach ShaderMemory.hpp link shader_recompiler_agc_driver;
this one now does too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 12:06:06 +00:00
Dean Galvin af4e074a02 fix(agc): save pending storage results in every 64 KiB block that leaves the write watch
On Windows the write watch is dropped in whole 64 KiB blocks
(WriteWatchCoverage::Exclude), but the unwatch hook was given the page
range of the import. An image with results pending in the same block as
an imported page, outside that page, lost the watch without its guest
bytes saved, and storing its results threw.

The hook now gets the span of blocks Exclude drops (ExcludedSpan, the same
block math), so every image with results pending in those blocks saves its
bytes first.
2026-10-15 14:01:01 +02:00
Adrià Franch c9a96a548c fix(agc): pass the native HTILE clear extent after the pipeline drain 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 9e27d0b623 fix(agc): bound native HTILE clears to the kernel offset span 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 06b787f25d test(agc): refuse a mask with an uncleared HTILE key 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 764f0ace02 test(agc): exercise native HTILE producers and clear refusals 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 7d0dd69f0a feat(agc): import completion-proven native HTILE clears 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 99e6003098 feat(agc): prove complete tracked driver store coverage 2026-10-15 14:00:57 +02:00
Romans Pokrovskis 5fec3f600b test(agc): exercise completed native HTILE clears 2026-10-15 14:00:57 +02:00
Adrià b3f9f89e62 Merge pull request #5604 from babyhuey/fix/agc-geometry-vgpr-count
fix(agc): accept geometry programs with fewer GS and ES input VGPRs
2026-10-15 13:59:30 +02:00
Adrià 7bb2b1f973 Merge pull request #5598 from JJenkx/fix/guest-declared-host-import-registry
fix(relinker): record declared host imports in guest registries
2026-10-15 13:58:59 +02:00
Adrià 55d2fb6dfe Merge pull request #5659 from wachi35676/fix/libSceSaveData.native-memory-data-stride
fix(savedata): read every sceSaveDataSetSaveDataMemory2 data entry at its 64-byte stride
2026-10-15 13:56:05 +02:00
AlxcBTW 139e3b86ed fix(agc): route native-owned depth binds before the HTILE read and store-back
A multisampled depth target is created as, or already is, the native depth owner, and a target whose HTILE overlaps a resident depth guard aliases one. Neither may have its HTILE read or rewritten by the generic store-back: the expanded words would be a guest write over the owner's range. DepthSurfaceView decides this before the store-back, which still runs before GpuMutex() and the surfaces mutex are taken. NativeMultisampleDepth binds the owner and a single-sample alias of its HTILE and checks the words stay untouched.
2026-10-15 13:55:39 +02:00
Adrià 97d3bd3bc8 Merge pull request #5658 from wachi35676/fix/libSceAjm.native-at9-channel-config
fix(libSceAjm.native): reject ATRAC9 config data with a reserved channel configuration
2026-10-15 13:55:34 +02:00
Adrià 23dcb82499 Merge pull request #5648 from Amoenus/codex/buffer-resource-vcc-tuple
fix(shader): accept buffer resource tuples ending in VCC
2026-10-15 13:55:14 +02:00
AlxcBTW cc022df348 fix(agc): take a slice of a depth array from its own HTILE only when its words are uniform
A fill or clear the driver recognizes over an HTILE drops the range's last-read generation, so the
next bind reads the words and stores them back even when the write tracker did not see the fill's
stores. A depth view of slice 1 or later reads the HTILE at its own address
(DB_HTILE_DATA_BASE + slice * HtileMetadataBytes); the HTILE word layout is only modelled for slice 0,
so such a slice takes the clear and the store-back only when all its words are equal and keeps its
fill-time fast clears otherwise. DepthTarget::slice carries DB_DEPTH_VIEW SLICE_START.

agc_driver_depth_fast_clear_submit: an unrecognized kernel clears the HTILE on two frames in a row and
both clears are taken; slice 1 with words that are not all equal is refused and stored back untouched;
slice 1 with equal words takes the clear. agc_driver_graphics checks the decoded slice.
2026-10-15 13:53:50 +02:00
AlxcBTW 3e61fcf1f9 fix(agc): read and store back the whole pipe-aligned HTILE outside the surfaces lock
The bind-time HTILE read covered one word per 8x8 tile from DB_HTILE_DATA_BASE, but main models the
HTILE as the pipe-aligned SW_64KB_Z_X metadata (HtileMetadataBytes, the extent HtileFillCovers takes):
at 1920x1080, 1856 of the 32400 tile words lie past the first tiles*4 bytes, so they kept ZMask 0
after a store-back. The read and the store-back now cover the whole metadata and run before the
surfaces mutex is taken, since both wait for recorded work over the range. The tests' HTILE arrays
hold the whole metadata.

PPSA25344 (Unreal Engine 5) decodes its depth through HTILE in its Nanite depth export after the
depth prepass and takes ZMask 0 as a tile holding the clear value; the new
agc_driver_depth_fast_clear_submit case checks that a draw after a fast clear leaves every word
expanded.
2026-10-15 13:53:50 +02:00
esatturan 4ddff7c6e5 fix(agc): take depth fast clears from HTILE written by any kernel 2026-10-15 13:53:49 +02:00
Adrià fdea36b836 Merge pull request #5524 from Amoenus/codex/native-depth-allocation-retirement
fix(agc): retire fully released native depth owners
2026-10-15 13:50:13 +02:00
milescovielloandClaude Opus 5.5 c6e3af3258 fix(ngs2): accept empty waveform blocks and matrix levels on a voice without a format
A sampler voice set up with an all-zero format has no channels. Adding no
waveform blocks to it, or setting a matrix with no levels, threw
std::invalid_argument, which ends the title.

Accept both on such a voice: the empty add only applies RESET and the
CONTINUE state, and the empty matrix clears that matrix, which rendering
already treats as unset. Blocks with data, APPEND, and an empty matrix on
a voice with a format are still refused.

Steins;Gate Re:Boot (PPSA36591) clears a voice this way when a button is
pressed at its title screen.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 13:48:54 +02:00
Adrià 6ea62f9b40 Merge pull request #5364 from MarcZX100/marc/trace-draw-key-misses
feat(agc): trace draw-key cache misses
2026-10-15 13:41:58 +02:00
Adrià f50d4335ab Merge pull request #5587 from nikowolf123/fix/relinker-dependency-diagnostics
fix(relinker): name missing and non-PE modules in Windows dependency diagnostics
2026-10-15 13:39:17 +02:00
Adrià 38d2454486 Merge pull request #5559 from JJenkx/fix/guest-executable-import-dependencies
fix(relinker): select guest startup dependencies from required roots
2026-10-15 13:38:52 +02:00
Adrià ab808e9d88 Merge pull request #5558 from JJenkx/fix/audio-output-conversion-state
fix(audioout): preserve conversion state across output blocks
2026-10-15 13:38:36 +02:00
Adrià 5050a23f38 Merge pull request #5473 from MarcZX100/type0-recompiler-followup-4779
fix(shader): accept TYPE=0 images during materialization
2026-10-15 13:37:52 +02:00
Muhammad Wasif Ali WasifandClaude Opus 5.5 f3a44a9be2 fix(libSceAjm.native): reject ATRAC9 config data with a reserved channel configuration
LibAtrac9 defines six channel configurations but indexed the table with all eight values of the 3-bit field, so indices 6 and 7 read past it and initialized a decoder from the bytes that follow. The config data check now fails for them, which sceAjmDecAt9ParseConfigData, AJM initialization, libSceAudiodec and NGS2 already report as invalid config data.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-15 13:34:21 +02:00
Adrià 341613ab62 Merge pull request #5543 from mariuszkreft/fix/gpu-extra-load-drops-guest-tail
fix(relinker): place the Linux extra PT_LOAD past the last guest page
2026-10-15 13:31:07 +02:00
Adrià 5e7d09aafe Merge pull request #5538 from JJenkx/fix/ngs2-render-capacity
fix(ngs2): limit render writes to the configured grain
2026-10-15 13:29:33 +02:00
Adrià 821c69e504 Merge pull request #5509 from billythemenace2/fix/shader-cube-tsharp-2d-access
fix(shader): read cube T#s through DIM 2D image_sample and image_load as face 0
2026-10-15 13:25:34 +02:00
Adrià 39d3ae13eb Merge pull request #5304 from tv7/fix/stencil-ref-export-unused
fix(agc): drop an unused stencil test value export from draws without a stencil test
2026-10-15 13:24:56 +02:00
Adrià 589da7661a Merge pull request #5213 from ivica00/fix/agc-sync-sample-dumps
fix(agc): publish occlusion counts before the ready marker
2026-10-15 13:24:22 +02:00
Adrià 0f0ca7b544 Merge pull request #5200 from nikowolf123/fix/agc-blend-reversed-component-order
feat(agc): blend into color targets with a reversed component order
2026-10-15 13:24:08 +02:00
Adrià f0c6c9e7ee Merge pull request #4794 from NFSS10/nfss10/fix_bendy_and_the_ink_main_menu
fix(libSceAgcDriver): flush pending results at staged-clear sampled reads
2026-10-15 13:23:26 +02:00
Adrià FranchandClaude d22872b19d test(agc): register the other-family import-watch test on Windows only
The settle queue on another family is only created under _WIN32, so on
Linux the test always skipped with a reason check_skips does not accept
and the linux job failed on every main build since #6060.

Co-Authored-By: Claude <[email protected]>
2026-10-15 13:11:32 +02:00