Astro Bot (PPSA21564) #357
Replies: 16 comments 5 replies
Update 2026-10-02: both blockers have a causeSame host and stack 2 as above.
A in detail
B in detail
Standalone reproduction with no AnyPS5 code ( Seen once B is bypassed with the diagnostic
Investigated with AI assistance (Claude Code). |
Update 2026-10-02 (2): runs for minutes with sound, frames still black
The three local diagnostics (none is a proposed fix)
Where it gets to
C in detail
Smaller points
Investigated with AI assistance (Claude Code). |
Update 2026-10-02 (3): first frames, and a correction to the update above
Open, in order
How the correction was checkedThe diagnostic reported shared views as untracked while private memory stayed write-watched. Checked with Dreaming Sarah (PPSA02929) on
The two unconfirmed stops did not appear in the two launches described below. Why the switch avoids BWithout write watching The runs that showed framesStack 2, FFmpeg enabled,
Investigated with AI assistance (Claude Code). |
|
Blocker B (the red zone overwritten when a write fault is resumed on Windows) now has its own issue, since it is on Written with AI assistance (Claude Code). |
|
Great write-up, thanks for digging into the Windows side. My Here is a Linux gameplay capture from last night, through the intro cinematic, the crash site tutorial and the world map into Sky Garden: https://www.youtube.com/watch?v=62wl_LddNnQ. It was recorded before most of the fixes below, so frame rate and visuals are better now. Relevant to your list
Tips for testing
Happy to compare logs if you try the newer head. |
|
If you release this and Gran Turismo I will not need a PS5 PLS add GT7 support in the future after astros playroom. Add them all |
|
I understand this is very difficult and hard and may takes months to years to complete |
Windows: in game, Gorilla Nebula first level reachedThanks to @oneandonlydean: the rendering and gameplay progress below is the work on his
Video: galaxy map, Sky Garden, the dive and the flight into the level, with the log console beside the game window. About 41 s of the white cloud transition are cut and the recording is re-encoded to fit the 10 MB attachment limit, so it is softer than the original 1440p capture. astrobot-windows-8bit.mp4Written with AI assistance (Claude Code). |
|
Thanks, this is great to see, and thanks for the Windows fixes. I've brought #282, #283 and #284 into my The branch has moved on since
Also new: the occlusion dumps no longer drain the GPU (Snowy Canyon went from 1.2 to 2.3 fps on Linux), and on Linux the queue workers are pinned to P-cores on hybrid CPUs. That is off on Windows unless Two things I can't reproduce on Linux and would like to understand:
|
Windows on an AMD GPU (Radeon RX 9060 XT): title card, blocker B in every launch with write watching on
Run 3 on the Radeon: the title card, 272 frames in, at 1.19 FPS. It stayed on this card until I stopped the run at 240 s; the title advances once per presented frame, so the video it had opened was not reached on screen.
B reproduces on every write-watched launch on this machine, so I can test a fix for #361 quickly if that helps. Tested with AI assistance (Claude Code). |
PPSA21567 (the other region's release) on the
|
| Run | Settings | Result |
|---|---|---|
| 1 | default, no input | Logos, title ("press any button") by about 140 s; idle there to 560 s. No error, no GPU hang. |
| 2 | default | Title, NEW GAME save-slot menu, warp. Then it stops: compute shader 0x500622100: AGC graphics: guest snapshot differs from registered memory. That's the same stop SP4C3B4R-8 hit on Windows. |
| 3, 4 | APS5_NO_SNAPSHOT_CHECK=1 |
Both run the full 15 min into the intro cinematic (the mothership, Nebulax's attack, the ship breaking up). No error, no GPU hang, no skipped draws. |
| 5 | as 3 and 4, 35 min | Through the intro cinematic to the crash landing in the desert (Crash Site), then waiting in the tutorial with a controller icon in the corner (no stick input sent). No error, no GPU hang. |
So PPSA21567 v01.018 needs nothing region-specific on top of your branch to get this far. On upstream main it hung the GPU (Xid 109) a few minutes in, inside a heavy compute shader. Your e6ff9656 explanation (two-lane register pressure, spilling) fits everything I'd measured, including why a loop guard that never trips made the hang go away.
What I have that the branch lacks (on my branches built on upstream main, #419 and #425; none merged; each with tests):
- Exact colour compare emulation. For a colour image bound to a comparison sampler, it does the compare in the shader the way the hardware does: per texel, before filtering, including clamp-to-border with black and white borders. Currently the result there is left to the driver (
1ad8fe93). Unsupported formats, clamp modes, the border colour table and aniso still throw. - Single-sample CMASK fast clear. It models the two fill values: CMASK 0 is "cleared to the CB_COLOR_CLEAR_WORD value", and 0xFFFFFFFF is "expanded". It's not rendered uncompressed. Anything else throws. Scoped as MichonGoddijn231849 asked on feat(agc): multisampled color and depth targets with CB resolves #419.
- Depth layout matching / write-back. A colour or storage view of memory a depth surface holds is served from the depth surface in the view's layout: it's written back through an R32 plane view and reloaded. That replaces a stale read. This is the proposal on feat(agc): depth surfaces read as textures and storage images #425; you raised there that the refusal should stay for the case without write-back.
How would you like contributions: PRs against your astrobot branch, or upstream PRs you then pull in? I'd start with whichever of the three you find most useful.
|
@oneandonlydean the exact colour compare emulation, ported onto
I'm away for about a month from today. You're welcome to take it as-is, adapt it, or PR it upstream yourself, whichever suits the branch. The single-sample CMASK model waits until I'm back. |
|
Two measurements from PPSA21567 on Internal resolution. I added a local counter (not pushed) that logs, every 2 s, the colour-target and viewport sizes of the draws and the pixel programs drawing into 3840x2160 targets.
Out of device memory on 8 GB. GPU memory (nvidia-smi, desktop about 0.5 GB included) climbs to about 6.8 GB in the cinematic and peaks at about 7.2 GB at the crash landing. Results of today's long runs (35-minute tests plus one play session), all on this branch, leaving out one real-display run that ended in a GPU hang (Xid 109) instead, 9 in all: 3 unmodified, 4 with my compare commit and 2 with the local counter. Neither of those adds GPU allocations of its own. Both kinds of result happen in each group:
So on an 8 GB card the margin from the intro to the crash landing is a few hundred MB. Each run either fits or doesn't. |
|
@oneandonlydean one region-specific blocker on PPSA21567 (v01.018), relevant to #476. Without my The faulting address is the same offset ( With libc linked Does PPSA21564 bundle |
|
@oneandonlydean a quick question about where I can help most. I test on a mid-range PC: Ryzen 5 5600X, RTX 3070 8 GB (NVIDIA 615.71), CachyOS, with PPSA21567 (v01.018) on your Which of these would be most useful to you?
Happy to go with whatever you'd rank first. |

Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Tested
--windows --to-intel.Status
Not in game on Windows. With the stacks below, the title resolves all its imports, reaches
main(), loads fonts and configuration, finishes PlayGo, creates the Vulkan device, compiles shaders and submits frames. It then stops within about 10 seconds on blocker A or B. The updates below give the cause of both, and the first frames on screen.On Linux, the public
astrobotintegration branch reports the tutorial as playable.Open blockers
shared mapping outside the guest arenaSceSndzAudioOutMainNo open issue or pull request mentioned either of them when this was posted. Not established at that point: whether they are specific to Windows, to Intel hosts or to this version of the title.
A and B as first observed
A. Thrown at
core/libs/prx/libc/src/GuestArena.cpp:177, before any output on stdout; the process aborts. The check is onmain. Not established: whether #286, which touchesGuestArena, plays a part (without it the title stops earlier, so the two could not be compared). Hypothesis: an address space layout that varies between launches, like theVirtualAlloc fixed failedof stack 1.B. Always in the same loop: an audio mixing loop in the title's own code, with no system function in the captured call stack. The loop takes its destination pointers from a table on the stack, and that table does not hold valid buffer addresses. Seen once as a write to
0x7ce1aeb3d7, once as a read at0x4000. Not established: who fills that table. Candidates: the audio libraries the thread calls earlier (libSceAudioOut, libSceAudioPropagation, libSceAcm, libSceAjm) returning wrong buffers, or, unverified, a wrong result from one of the 94EXTRQinstructions the relinker replaced with stubs for--to-intel.Stops on
mainbefore A and B, in the order they are hitFailed to load module libSceJpegDec.prxsceKernelSyncOnAddressWait,sceKernelSyncOnAddressWake, imported by thelibc.prx(SDK 9) shipped with the titlesceKernelMapNamedFlexibleMemoryInternal, samelibc.prxNon-fixed mapping address hints are not implementedStacks tried
main+ feat(libSceJpegDec): implement JPEG decoding #296, feat(libs): declare missing AudioPropagation, AudioIn, NpSessionSignaling and dialog exports #289, feat(libkernel): support mapping address hints and no-overwrite fixed mappings on Windows #286, fix(videoout): read the open param as the service thread's priority and affinity #297, feat(libScePad): implement scePadSetTiltCorrectionState #287, feat(libSceAgcDriver): back the global data share with driver-owned guest memory #285, feat(libkernel): implement sceKernelSyncOnAddressWait and sceKernelSyncOnAddressWake #349, and a local stand-in for the function feat(libkernel): implement sceKernelMapNamedFlexibleMemoryInternal #355 now implements. The title starts drawing. Three runs gave three different stops:sceAudioPropagationSystemQueryMemory not implementedcompute shader ...: AGC driver: guest memory is not readable at 0x30VirtualAlloc fixed failed(core/libs/prx/libkernel/DirectMemory/DirectMemory.cpp:95), seen once, after adding feat(libSceAgcDriver): back the global data share with driver-owned guest memory #285astrobotbranch (eeda258c, 253 commits ahead ofmain) + feat(libSceJpegDec): implement JPEG decoding #296, feat(libkernel): implement sceKernelSyncOnAddressWait and sceKernelSyncOnAddressWake #349, feat(libkernel): implement sceKernelMapNamedFlexibleMemoryInternal #355, feat(libkernel): support mapping address hints and no-overwrite fixed mappings on Windows #286 and feat(libs): declare missing AudioPropagation, AudioIn, NpSessionSignaling and dialog exports #289 without its libSceAudioPropagation file. This goes furthest and gives blockers A and B.All reactions