Skip to content

fix(shader): decide each resource branch condition once per plan - #11506

Merged
oneandonlydean merged 1 commit into
boykopovar:mainfrom
hugodearaujo:fix/shader-may-decide-memo
Nov 2, 2026
Merged

oneandonlydean merged 1 commit into
boykopovar:mainfrom
hugodearaujo:fix/shader-may-decide-memo

Conversation

@hugodearaujo

@hugodearaujo hugodearaujo commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What

MayDecide (#8518) checks whether a resource block's branch condition can be decided at capture time. For LogicalAnd and LogicalOr it recurses into both operands, and every step starts with a full MayEvaluate. Nothing is kept between steps. A condition whose operands share their own operands is therefore walked once per path, and each level that reads the level before it twice doubles the work.

This PR keeps each value's answer: MayDecide takes a record of what it has already decided, and ExtractPlan passes one record for all of a plan's blocks. An answer doesn't depend on the block (MayDecide calls MayEvaluate without an active mask), so sharing the record doesn't change any result.

@JJenkx, this is the walk from #8518. Its answers are the same; they're just kept now.

Tested

  • Skyrim (PPSA03747 01.001.010), Linux, RX 9070 XT with RADV (Mesa 26.2.5), Release, X pressed every 30 s:
  • agc_shader_replay --prepare of the saved request, ANYPS5_NO_SHADER_CACHE=1: on main it was still running when I stopped it at 60 s. With this PR it takes 18 ms (3 runs).
  • agc_shader_memory, new verifyMayDecideSharedConditions: 64 levels, where each level's LogicalOr reads two LogicalAnds of the level before and a lane comparison. With only lane comparisons, MayDecide answers false. With a uniform conjunct at the bottom, it answers true. A shared record gives the same answers.
    • Red: with main's evaluator, the test times out at 60 s. With this PR it passes in 0.16 s.
  • Paired validation on main 88795ed and this head 0dc6d38, same machine and GPU: Linux (Arch, kernel 7.2.11), AMD Radeon RX 9070 XT (gfx1201) with RADV, Mesa 26.2.5, GCC 16.2.1, Release. ctest -V with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation (Khronos validation layer 1.4.363; the loader logs Insert instance layer "VK_LAYER_KHRONOS_validation"), ANYPS5_NO_SHADER_CACHE=1 and ANYPS5_REQUIRE_VULKAN=1, on the tests around resource plans and their branch conditions: agc_shader_memory, agc_shader_disk_cache, agc_driver_graphics, agc_driver_branch_past_endpgm, agc_driver_image_table, agc_driver_image_table_cache, agc_driver_image_table_cache_bounds, agc_driver_image_table_reuse, agc_driver_image_table_reuse_draw_pipeline, agc_driver_image_table_vouched_lookups, agc_driver_image_table_vouch_queued_draws, agc_driver_compute_table_calls, agc_driver_compute_fs_table_calls, agc_driver_vertex_table_read_order and agc_driver_vopc_compare_table.
    • main: 15 of 15 pass. This head: 15 of 15 pass.
    • Neither log contains was not found but was requested by env var VK_INSTANCE_LAYERS, and neither has a VUID- line.
  • tools/select_tests.py on main 88795ed, ANYPS5_REQUIRE_VULKAN=1: 1,500 of the 1,501 selected tests pass. agc_driver_tessellation segfaults inside RADV, as it does on main here (agc_driver_tessellation segfaults on RADV with Mesa 26.2+: nir_opt_varyings corrupts the TCS input offset's use list (Mesa bug) #5444, Mesa 26.2.5).
  • tools/check_conventions.py passes.
  • Not tested on Windows or macOS.

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file
  • No notes, investigation .md files or images added to the repository (attach them to this PR)
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • Fixes: none
  • Unblocks: PPSA03747 Skyrim (PPSA03747) #11508 (gets past its New Game loading screen hang to the cube descriptor stop above)
  • GPUs tested: AMD Radeon RX 9070 XT (gfx1201), RADV Mesa 26.2.5, Arch Linux (kernel 7.2.11)
  • AI-assisted: yes

MayDecide recursed into both operands of every LogicalAnd and LogicalOr
without keeping what it had decided, and ran a full MayEvaluate at each
step. A condition whose operands share their own operands, as when each
level's two conjunctions read the level before, took time exponential in
its depth.

MayDecide now keeps each value's answer, and ExtractPlan keeps one record
for all of a plan's blocks.

Skyrim (PPSA03747) prepares shader 0x122151a400 when it calls
sceAgcCreateInterpolantMapping on its New Game loading screen. Since
1c9a522 that preparation did not finish: the title's main thread spun
in MayDecide, 20 to 29 frames deep, for the rest of a 300 s run, and no
frame was presented after about 150 s. agc_shader_replay --prepare of the
captured request runs past 60 s on main and takes 18 ms with this change.
@github-actions github-actions Bot added the unblocks title Names a title ID on the Unblocks line label Oct 26, 2026

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The focused regression evidence is useful: the new shared-condition test times out with the old evaluator and passes with this change, and the full selected suite reports the same RADV tessellation failure as main. The branch is based on current main (88795ed448), and local conventions plus git show --check pass.

Before approval, please add the paired AGC/shader-recompiler validation required by CONTRIBUTING.md: the same focused ctest -V run on current main (88795ed44801fa719eb2df990cbe1f11a1f9bd81) and this head (0dc6d3829544ec5b4933d59f3d2ef9819a703085), on the same machine/GPU, with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_NO_SHADER_CACHE=1 and ANYPS5_REQUIRE_VULKAN=1. Please include the GPU vendor/model, driver and OS, confirm neither log reports the requested-layer-missing message, and compare new VUID- lines. The current PR description reports tools/select_tests.py results but not this exact paired validation, and hosted product/relinker checks are skipped.

I found no implementation defect in the memoization path; changes requested for the missing required validation record.

@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 907 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 5371 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 5609 core/shader/recompiler/Optimization/include/Optimization/SrtWalker/SrtEvaluator.hpp
core/shader/recompiler/Optimization/src/SrtWalker/SrtEvaluator.cpp
PR 6235 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 6280 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6412 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 6488 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 7085 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 7223 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 7410 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 7642 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 7684 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 7689 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 8004 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9020 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9335 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9356 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9387 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9508 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 9748 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 10000 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10193 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10233 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10359 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 10489 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10556 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10757 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 10846 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 10867 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 11351 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 11483 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 12324 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 12548 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/SrtWalker/SrtEvaluator.cpp
PR 12828 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 13928 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 13929 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 14032 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp
PR 14853 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 14871 core/shader/recompiler/Optimization/src/ResourceMaterializer.cpp
PR 14944 core/libs/prx/libSceAgcDriver/tests/ShaderMemory.cpp

@hugodearaujo

Copy link
Copy Markdown
Contributor Author

@MarcZX10 Thanks. I added the paired run to Tested: the same 15 focused tests on main 88795ed and this head 0dc6d38, on an RX 9070 XT (gfx1201) with RADV, Mesa 26.2.5, Arch Linux kernel 7.2.11, with VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, ANYPS5_NO_SHADER_CACHE=1 and ANYPS5_REQUIRE_VULKAN=1. Both pass 15 of 15. The loader logs Insert instance layer "VK_LAYER_KHRONOS_validation", neither log has the missing-layer message, and neither has a VUID- line.

I also added the title run on this base: Skyrim stops at 161 s on the cube refusal that #11507 handles. Could you take another look?

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The requested paired validation is now documented with the same RX 9070 XT/RADV/Mesa setup on 88795ed and this head. Both focused runs pass (15/15); the loader confirms the validation layer was inserted, and neither log reports a missing layer or any lines. The reported suite failure is on the broader selected run only and is the same RADV tessellation segfault reproduced on . Applicable hosted checks (conventions, labels, eligibility, intake and report) pass; product/relinker jobs are skipped. I found no remaining blocking issue in the reviewed memoization change.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The requested paired validation is now documented with the same RX 9070 XT/RADV/Mesa setup on main 88795ed and this head. Both focused runs pass (15/15); the loader confirms the validation layer was inserted, and neither log reports a missing layer or any VUID- lines. The reported suite failure is on the broader selected run only and is the same RADV tessellation segfault reproduced on main. Applicable hosted checks (conventions, labels, eligibility, intake and report) pass; product/relinker jobs are skipped. I found no remaining blocking issue in the reviewed memoization change.

@oneandonlydean oneandonlydean self-assigned this Oct 26, 2026
@Sumaiter

Copy link
Copy Markdown
Contributor

No-title Windows/NVIDIA test report for head 0dc6d3829544ec5b4933d59f3d2ef9819a703085 against its parent baseline 88795ed44801fa719eb2df990cbe1f11a1f9bd81.

Environment: Windows 11 Home 26200, 13th Gen Intel Core i5-13500H, NVIDIA GeForce RTX 4060 Laptop GPU, NVIDIA driver 596.21, WinLibs GCC 15.2.0 r7 (MinGW-w64 UCRT), Release. Official Khronos validation layer 1.4.363.0. ANYPS5_GPU=4060; the logs identify the NVIDIA device. No game or title was used.

Ran the same 15 tests listed in the PR description on both commits with ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, and VK_LOADER_DEBUG=layer, using ctest --test-dir b -R <the 15-test alternation> -V.

Commit Result VUID- occurrences Missing-layer warning
baseline 88795ed448 15/15 passed 0 absent
PR head 0dc6d38295 15/15 passed 0 absent

Both logs contain Insert instance layer "VK_LAYER_KHRONOS_validation", confirming that the requested layer loaded. The PR adds no validation errors in this comparison.

AI-assisted: yes (Kimi K3.1 Pro)

@TechLevelZero

TechLevelZero commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

✅ NVIDIA GPU test: passed

PR head 0dc6d38 merged onto main 0836dfd · tested 2026-11-01 02:35 UTC · 20 min

GPU NVIDIA RTX 2000 Ada Generation, driver 595.99.02, Vulkan 1.4.329
Host Ubuntu 26.04.1 LTS, kernel 7.0.0-38-generic, container ubuntu:24.04
Logs build and test logs for this run
Build ✅ passed (Release, -DANYPS5_ENABLE_SPIRV_TOOLS=ON)
Tests ✅ 2,394 passed · 6 failed (0 new, 4 also fail on main, 2 unstable on main) · 44 skipped (ANYPS5_REQUIRE_VULKAN=1)
Test setup CPU-only tests without a GPU; GPU tests (and any CPU-only test that failed or skipped without one) once on the GPU with VK_LAYER_KHRONOS_validation and ANYPS5_NO_SHADER_CACHE=1; main ran the same way
Test selection 2,444 of 3,087 tests run: the ones this change can reach, chosen by tools/select_tests.py from main's build graph
Vulkan validation ✅ no new validation IDs vs main (924 tests run on the GPU)
Slow tests (>30 s, GPU tests timed with validation layers) ⚠️ agc_driver_pipeline_journal 55.1 s, ⚠️ agc_driver_lookup_log_fits_build 51.9 s, ⚠️ agc_driver_graphics_maps_fallback 35.5 s, ⚠️ agc_driver_graphics 34.8 s
Unstable on main (2, these also failed in recent main runs on this machine; not counted against this PR)
agc_submit_progress: failed in 7 of the last 10 main runs
agc_submit_progress_no_timeline: failed in 9 of the last 10 main runs
Failing on main too (4, not counted against this PR)
agc_driver_idle_store_yields
agc_driver_image_table
guest_mmap_executable
guest_socket_options_multicast
Passed on retry (1, failed in the parallel run, passed when re-run with a 360 s timeout; not counted against this PR)
agc_driver_job_manager_compute_capacity: Failed in the parallel run; also passed only on retry in 210 other runs in the last 7 days
Validation IDs already present on main (5 IDs in 476 tests)
VUID-VkDeviceCreateInfo-pNext-pNext (476 tests): agc_driver, agc_driver_address_passes, agc_driver_alias_copy_label, agc_driver_alpha_to_coverage, agc_driver_array_layer_target, agc_driver_bc_block_copy, agc_driver_bda_anchor_reads, agc_driver_bda_span_reads, and 468 more
VUID-vkCmdCopyImage-srcImage-01548 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-vkCmdCopyImage-srcImage-01551 (7 tests): agc_driver_depth_clear_hle, agc_driver_depth_plane_buffer_memory, agc_driver_depth_plane_partial_store, agc_driver_depth_plane_sampling, agc_driver_depth_storage_dispatch, agc_driver_depth_surface_from_storage, agc_driver_dispatch_move_depth
VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605 (1 test): agc_driver_prepared_exports
VUID-VkShaderModuleCreateInfo-pCode-08737 (1 test): agc_driver_image_sample_derivatives
Skipped (44)
agc_driver_bda_reads_shadowed_results: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_bda_reads_shadowed_results_per_build: skipped, the device reports watched host memory written when it imports or reads it
agc_driver_sample_order_grid_reference: skipped, the device does not keep depth drawn at custom sample locations at those locations, even after a transition that names them: the composite of uniform renders holds the guest's depth in 0 of 3005 sloped samples, so no path can be compared with it bit for bit
agc_host_import_sparse: skipped, host imports are unavailable: /dev/udmabuf is not accessible
agc_import_settle_initial_dcc: skipped, the device has no deferred settle of host imports: imports under 1 MiB wait for one only on Windows
agc_unit_shadow_completion_store: skipped, the device reports watched host memory written when it imports or reads it
guest_http_uri_locale: 
guest_net_ctl: skipped, the host has no IPv4 address
guest_video_out_color_space: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_hdr: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_high_frame_rate: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_output_mode: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_resolution_status: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
guest_video_out_wqhd_detection: skipped, no display or Vulkan device: SDL_InitSubSystem(VIDEO | GAMECONTROLLER) failed: wayland,x11 not available
video_out_flip_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_backtoback: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_controls: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_cpuflip_in_order: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_dcc: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_deferred: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_aftergpu: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_eop_main: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_flip_fresh: skipped, no display or Vulkan device: DisplayWindow: Vulkan support is either not configured in SDL or not available in current SDL video driver (offscreen) or platform
video_out_f
Reproduce
git fetch origin 0dc6d3829544ec5b4933d59f3d2ef9819a703085 0836dfdf4fecb1e0326100c490476e15d3a74da5
git checkout 0836dfdf4fecb1e0326100c490476e15d3a74da5 && git merge --no-ff 0dc6d3829544ec5b4933d59f3d2ef9819a703085
git submodule update --init --recursive
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=ON -DANYPS5_ENABLE_SPIRV_TOOLS=ON
cmake --build build && cmake --build build --target libs
VK_DRIVER_FILES=/nonexistent/icd.json ctest --test-dir build -E '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 32 --output-on-failure
ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation \
  ctest --test-dir build -R '^(agc|shader|recompiler|videoout|video_out|guest_video_out|vulkan)|gpu' --timeout 120 --parallel 4 --output-on-failure
# failures are then re-run alone: --timeout 360 --parallel 2; new validation IDs: the test alone, twice, --parallel 1

Automated build and test on a contributor's NVIDIA machine; it does not replace upstream CI. A new comment is posted for each new push. Full logs.

@hugodearaujo

Copy link
Copy Markdown
Contributor Author

An update on the title result, on current main: with this head (0dc6d38) merged into main 21668cc (clean merge; #12923, #12995 and #12983 have landed since), Skyrim (PPSA03747) ran 1800 s with no abort, no not implemented throw and no label-wait timeout. It goes through the New Game loading screen this PR is about, the cart ride, the character creation and the name dialog, to control of the character in Helgen at about 840 s (20 to 24 presents per second there). Details are in discussion #11508.

AI-assisted: yes (Claude Code)

@JJenkx

JJenkx commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Fresh Linux/RADV focused validation of 0dc6d3829544ec5b4933d59f3d2ef9819a703085 on main c0e05f40e385f23f34a5ef9c3fe675f86089f5db.

Control 562e3720e9af contains main production plus shared test-only CFG boundary cases. Integration d3e2c4f0a79a adds this PR's production changes. Linux 7.2.11, GCC 16.2.1 Release, RX 6650 XT/RADV Mesa 26.2.6, required Vulkan, shader disk caches disabled and actual Khronos validation loading verified for the GPU execution fixture:

  • The same 10 structurizer/control-flow/prepared-graphics groups pass on control and integration.
  • Integration additionally passes agc_shader_memory, including the new 64-level shared-condition/memo assertions.
  • Zero skips or VUIDs; the slowest integration group took 1.623s. CPU IR/CFG checks are not counted as GPU execution.
  • SDK patched/unpatched ELF build IDs match; frozen SDK and fixture hashes remain intact.

Exact source/dependency pins, integration patch, builds, verbose logs and JUnit, SHA-256 cfd38c6eadd7dc0b59e13981df13a61263aec721141b0161e6970501824bf73f; download and internal hashes verified.

A plain-main Ghost of Yōtei startup host-thread sample also reached recursive MayEvaluate/MayDecide. Native bring-up checks are still in progress; the evidence above is focused correctness validation and does not establish a title loading or FPS improvement.

@github-actions github-actions Bot added the review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 2, 2026
@oneandonlydean
oneandonlydean merged commit f99dac0 into boykopovar:main Nov 2, 2026
17 checks passed
@github-actions github-actions Bot removed the review queue Next in the maintainer review queue: checks pass, no open change request, no conflict label Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* shader core/shader unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants