mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-08-03 11:23:49 +00:00
Trace the dispatcher fallback for PS 0x9e1133a6 to an acyclic RDNA2 S_CBRANCH_SCC0 ladder. Several inner headers reach both a shared continuation and a shared terminal, so they do not dominate the common post-dominator. The old shared-merge splitter redirected only the dominated terminal edge; the merge therefore remained shared and forced dispatcher lowering. Canonicalize this control flow with bounded cross-entry tail duplication: - find the complete selection region before its post-dominator - clone only region blocks that the header does not dominate - redirect header-owned edges into those clones - join every owned exit through a private synthetic merge - retain the existing dispatcher when loops, invalid merges, or growth bounds make duplication inappropriate Add the recovered seven-block topology as a focused regression. Assert SCC0 taken/fallthrough orientation, unique merges, full post-transform reachability, structured lowering without OpSwitch, and valid SPIR-V. Validation: - shader_cfg_tests --overlapping-cfg-only - shader_cfg_tests --loop-break-merge-only - shader_cfg_tests --loop-canonicalization-only - kyty_emulator built with _Build/vscode-clang - launch.json visible run advanced continuously to frame 570 - observed seven-block PS e83e3fb5 structured into 19 blocks without fallback - run stopped at the separately deferred sparse PRT BufferCache backing fatal Independent audits verified progress, ID remapping, vector lifetime, invalid merge handling, bounded termination, and dirty-tree staging scope.