Repository navigation
Ghost of Yōtei (PPSA26344) #675
Replies: 13 comments
Update 2026-10-05: past the decal pass and GDS, next stop is an unnormalized samplerSame host as above. Testing is now on our integration branch: current
Other changes
|
Update 2026-10-06: image tables are up as pull requests; same GPU stop on current mainSame host as above. The testing branch was rebuilt from scratch on
|
Update 2026-10-06 (2): DCC presentation merged; the next GPU stops mappedSame host and testing branch as above.
Further GPU stops, from a run that skips failing dispatchesA diagnostic build that reports a failing dispatch and skips it ran for 6 minutes without a FATAL. The title reached save data setup (
|
Update 2026-10-06 (3): past the unnormalized sampler; next stop is an unsupported texture formatSame host as above, testing branch on
DCC display buffers: what stopped PPSA12544, and why it matters heremerwie's PPSA12544 numbers are not explained by key order or padding.
Next stops after this one, from a diagnostic run that skips failing dispatches
|
Update 2026-10-06 (4): DCC key extent found, one texture format left before the next GPU stopSame host, testing on
What comes after it, from the same capture run (failing dispatches skipped, 6 minutes, no crash)
|
Update 2026-10-06 (5): five more compute shaders dispatch; next stop is a runtime-indexed buffer descriptorSame host. The testing branch is
Found along the way
|
Update 2026-10-06 (6): first frames presented (black, about 1 fps), with six empty-table dispatches skippedSame host and testing branch as the previous update, plus #866 (8 and 8_8 SRGB loads through UNORM views).
Next: why the frames are black and slow, and the AJM call. |
Update 2026-10-06 (7): the boot screen rendersSame host and testing branch as the previous update, with the same local diagnostic that skips only the six empty-table
|
Update 2026-10-06 (8): menu music plays; the black screen is our DCC present pathSame host and testing branch as before, with the local diagnostic that skips only the six empty-table
|
Update 2026-10-06 (9): the intro rendersSame host and testing branch as before, with the local diagnostic that skips failing dispatches.
|
Update 2026-10-07 (10): about 5 fps through the intro, and past the GPU hangQuick summary of tonight: the intro now plays at about 5 fps instead of 1.3, and the GPU hang that stopped every run around 160 s is gone. The game now gets to about 4.5 minutes before the next problem. Frame rate. Most of each frame went into one light-culling compute shader. Its 8- and 16-bit buffer stores were emulated with compare-exchange loops, about 4.5 million per frame. With real 8/16-bit stores, that shader drops from about 590 ms to 28 ms. The intro goes from 1.3 to 5.6 fps, and the frames are pixel-identical. The same code is being reworked in #639, so I've asked the owner there how they'd like to take it rather than opening a competing PR. In the meantime it's only in our testing branch. The hang. A "UI Post Fade" pixel shader finds a minimum across the wave and reads lanes 31 and 63. On a 32-lane NVIDIA subgroup the game's wave64 pixel shaders run one lane per invocation, so lane 63 doesn't exist there. The value read back was undefined, the loop never ended, and the driver reset the GPU about 4.5 minutes later. #997 refuses those lane reads when the shader is built, so the draw is skipped instead of hanging. Five such shaders get skipped in the title, and runs now reach 268 s without a hang. Running them for real would need lane reads across subgroups, which is a design question for later. Also new since the last update:
What's next.
|
Update 2026-10-07 (11): the first in-game UIThe game got past the long black phase after the logos tonight and showed its first real UI: the Digital Deluxe Bonus popover, waiting for Cross. What was in the way. After the logos, the game renders its title scene in the background while it loads. Three compute shaders there recompile to about 830k SPIR-V words each, and the NVIDIA driver needed about two minutes for the biggest one. Most of that size was the cold raw-pointer read fallback, copied inline at every read site. #1043 moves it into shared functions, and in the game each of those pipelines now takes about 45 s. Once the pipeline cache holds them, the loading spinner shows up at about 190 s and the popover at about 330 s. Also new since the last update:
Still to do. The 3D scene behind the popover stays black. Its G-buffer pass writes an 8-bit sRGB colour target, which isn't supported yet, so those draws are skipped. About 70 compute shaders from the newly loaded packs also stop on one sampled image format we don't support yet, and the menu runs at about 0.5 fps. Those are next. Pressing Cross to get past the popover is the next run. |
Update 2026-10-07 (12): past the popovers, to the brightness screenWith scripted Cross presses, the game now gets through all three first-boot popovers (Digital Deluxe Bonus, Gift of the Northern Star, Pre-order Bonus) to the brightness calibration screen. It also no longer crashes: the latest run went the full 15 minutes. The wolf picture in the middle and the disc at the top right are still black, but the smoke background behind them now draws. Cross confirms the screen at about 800 s. After that the whole image goes black, UI included, and the run hit its time limit before anything else showed up. The next run is longer, to see whether that's a loading phase or a stall. What changed since the last update:
The last three are going up as PRs today. Still in the way of the 3D scene. Most of the remaining skipped draws are the terrain. Its G-buffer pass finds a wave minimum with a wave64 idiom: DPP row shifts, then After the terrain, the next skips are pixel shaders that export depth or use ordered execution (POPS), conservative rasterization, and one tessellation routing. Work on those has started. If you're already on any of them, please say so here so we don't duplicate it. |









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. Built with MinGW-w64 GCC 15.2.0.Status
Not in game. With the pull requests below on
main, the title:libc.prxincluded);/app0/cache_ps5files;Its first frame submission (8440 dwords, ending in a FLIP) is accepted and starts executing. It then stops in the "Tiled Decals" compute pass (blocker A). No frame has been presented yet.
Open blockers
compute shader 0x80003aa700: GetImageResource dword 0 is not a valid runtime value. The image descriptor is loaded from a descriptor table at an offset computed from the thread id inside a loop.[gpu] skipped draw: unsupported PA_CL_CLIP_CNTL flags (register 0x204 = 0x01080000). Draws are skipped; not fatal.tessellationAvailable=0log line was printed before the feature was read (#687 (merged)); the device has it. The native LS/HS/DS path is not complete: no lowering of the HS/DS ring and LDS accesses, no tessellation configuration passed to the recompiler, and the title's LS programs end ins_swappc_b64with a null destination. The title has at least 7 tessellated programs.A and C are being worked on locally; follow-up pull requests will be linked here.
Stops on
main, in the order they are hitFailed to load module libs\libSceUsbd.prx(needed module, nothing imported)libc.prx:sceKernelSyncOnAddressWait32/64libc.prx: the threelibSceLibcInternalExtthread-exit functionsdbOlWdppb4o(libSceAgc)scePsmlMfsr*1100functionssceAudioOut2Set3DLatencysceNpCommerceSetPsStoreIconLayoutsceNpSessionSignalingRequestPreparesceHttpParseStatusLinesceMsgDialogCloseunresolved: the title imports it fromlibSceMsgDialog.nativesceSystemServiceParamGetString not implementedcreate direct memory backing: Insufficient system resources(Windows commit limit, see the page file note below)VideoOut: unsupported ... buffer option(option 8, STRICT_COLORIMETRY)VideoOut: DCC presentation is not implementedshared mapping outside the guest arena: the title reserves its own range at 0x90_0000_0000 and makes fixed maps up to 0xFC_0000_0000sceAudioOut2PortCreate: data format 0xc00 is not implemented(12 channels, 7.1.4)WRITE_DATA engine, cache or reserved fields are not implemented(cache policy 2)atomic image descriptor uses an unsupported format(image_atomic_fmaxon a 32_FLOAT surface)DPP control 336 is not supported(DPP16row_share)COND_EXEC ... not implemented, in the first frame submission#646 (merged) is also needed, but not as a stop:
sceAgcGetIsTrinityModedoes not write the title's out pointer.Found by an offline sweep of all 21,610 shaders in the title's packs (not reached in-game yet)
global_*with VCC as SADDRv_mov_b32byte selectors with PRESERVEDB_SHADER_CONTROL.CONSERVATIVE_Z_EXPORTs_swappc_b64with a null destination, long branches, dword jump tablesNotes
libc.prxreserves the guest arena can land inside it. In this title's range this was seen at 0xA6_61xx_xxxx and 0xD6_48xx_xxxx. A fixed map over such a hole throws. fix(relinker): keep Windows startup stacks below the guest arena #679 (merged) keeps those stacks below the arena.shared mapping outside the guest arena, intermittent) may be related to fix(libc): reach the application map area end with the guest arena #652 (merged) or to the ASLR note above. Not established.All reactions