Skip to content

fix(agc): let heap mirrors replace host imports when the import budget is full - #12074

Merged
oneandonlydean merged 4 commits into
boykopovar:mainfrom
mehmetbayoglu:fix/agc-import-yield-mirrorable-pr
Oct 29, 2026
Merged

oneandonlydean merged 4 commits into
boykopovar:mainfrom
mehmetbayoglu:fix/agc-import-yield-mirrorable-pr

Conversation

@mehmetbayoglu

@mehmetbayoglu mehmetbayoglu commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

What

Since #8380 imports a heap over the host import budget in pieces, the budget (8132 MiB here) can fill with imports that every address-based build uses. #11357 then protects every import used in the current or the previous frame, so none of them is evictable. Astro Bot (PPSA21567) has a working set of about 12 GiB and hits two problems:

  • Abort. When a registered range of about 1.1 GiB that is outside the write watch is re-registered, its import is refused and no mirror can serve it. The build's copy passes APS5_ADDRESS_COPY_MAX_MIB, the evicting retry finds nothing to evict, and the title stops with FATAL: an address-based build copies ~1.1 GiB ... import over the host import budget, heap not fully write-watched.
  • Copy storm. The address-space cache keeps the mirror of a heap whose range has left the write watch whenever the budget refuses that range's import. Such a mirror is refreshed in full at every use, so every build copied about 1.1 GiB and retried the import. That is thousands of refusals per run.

Many of the imports holding the budget cover a single releasable range that is still write-watched, so a heap mirror can serve that range just as well. This PR lets both paths evict those imports:

  • Copy cap path (AcquireRegistered): the evicting retry for a range only an import serves may also evict imports whose single range is releasable and write-watched, even inside the frame protection, as long as the current build has not taken them yet. The build then serves those ranges from heap mirrors. Remembered refusals are not used for this retry.
  • Address-space cache check (importsNow): for a cached heap mirror that left the write watch, the import attempt now evicts the same way, with the imports of earlier builds no longer held, instead of the non-evicting attempt that was refused every time.

Other requests keep the current eviction rules. The debt entry for host import windows and budget describes the new eviction.

Checked against open and merged PRs:

Neither fixes it.

Tested

Windows 11 Pro, MinGW GCC (winlibs), Release, NVIDIA GeForce RTX 4070 Ti. main is 14332cd; each tree was built in its own build directory.

New tests (each runs with 0, 1 and 2 frames ended, so both the lookup-count rule and the two-frame rule are covered):

  • agc_address_copy_cap_mirror: a build past the copy cap needs a range outside the write watch while the budget is held by a recently used, write-watched import.
    • On main with only this PR's test changes: aborts with FATAL: an address-based build copies 2 MiB of 1 registered ranges, past 1 MiB (APS5_ADDRESS_COPY_MAX_MIB); ... (2.0 MiB committed, import over the host import budget, heap not fully write-watched), the same abort as in Astro Bot.
    • With this PR: passes. The range is imported and the write-watched range is served from a heap mirror that holds the guest bytes.
  • agc_address_space_unwatched_mirror_import: a cached heap mirror leaves the write watch while the budget is held by another heap's import.
    • On main with only the test changes: fails (a heap whose mirror left the write watch was not imported in place of an import a mirror can replace).
    • With this PR: passes.
  • agc_heap_mirror_unwatch now takes its idle and busy ranges out of the write watch on Windows, so they are outside it as on Linux (where only the heap is registered) and a mirror cannot stand in for them. It passes on main and with this PR.

AGC suite, ctest -R "agc|shader_cache" -j 4:

  • main: 1107 of 1108 pass.
  • This PR: 1109 of 1110 pass.
  • The one failure is the same on both: agc_driver_mesh_barycentric_emulation (the pixel shader did not emulate barycentrics). It does not touch host imports.

Validation layer: ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ctest -R "agc_address|agc_heap_mirror|host_import" -V

  • main: 19 of 19 pass.
  • This PR: 21 of 21 pass.
  • agc_host_import_sparse is skipped on both (udmabuf imports are Linux only).
  • Neither log has the "was not found but was requested by env var VK_INSTANCE_LAYERS" line. Both have 0 VUID- messages over 7 real devices. The new tests run against the mock Vulkan device, so the layer does not see them.

Astro Bot (PPSA21567), Windows, RTX 4070 Ti. Measured on our integration tree with the pin fix (#6182's change) and #11307, not on plain main:

Before With this change
Copy cap aborts 3 in about 12 runs 0 in 6 runs
Import refusals per run 6,000 to 28,000 72 to 308

Black Ops (BO1) output is identical on the same tree (byte-equal frames and draw records in a strict frame replay). This PR makes no speed claim.

python3 tools/check_conventions.py --base origin/main reports no errors and one warning: the host import debt entry, already over 1000 characters on main, grows by about 340.

python3 tools/pr_overlap.py reports one conflict: #7844 edits the same debt entry (docs/dev/debt/libSceAgcDriver.md L261). Either order is fine with me; the maintainers can choose. If #7844 lands first, this PR rebases on it, keeps both debt updates, and sets Depends on: #7844.

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: PPSA21567 Astro Bot ASTRO BOT (PPSA21567) - In-Game (Playable, Passes Tutorial, Heavy Queue Lag) #11917
  • GPUs tested: AGC on NVIDIA GeForce RTX 4070 Ti, driver 617.42 (Windows 11 Pro)
  • AI-assisted: yes

@github-actions github-actions Bot added the unblocks title Names a title ID on the Unblocks line label Oct 27, 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 two new regression scenarios target the reported failure modes, and the implementation only yields single-range, releasable, currently watched imports to mirrors. Exact-head conventions checks report no errors (with the existing debt-length warning), git diff --check is clean, and the branch merges cleanly with current main. The hosted Windows build has not finished, so I have not assessed its result yet.

Please resolve the remaining contribution-rule items before merge:

  1. The PR reports 5 fps versus 11–17 fps, but provides neither matched main/change summary lines nor attached traces. CONTRIBUTING.md requires the performance-report artifacts for speed claims. Please add a current-main comparison from the same title, scene and machine with the traces and digest, or remove the speed comparison and keep the claim focused on correctness/avoiding the abort and repeated copies.
  2. The body identifies a real debt-file conflict with open #7844, but says only that whoever lands second must rebase; Depends on: none does not record an agreed order. Please coordinate which PR lands first with its author and declare that dependency/order in the checklist, while preserving both debt updates.

@mehmetbayoglu

Copy link
Copy Markdown
Contributor Author

Thanks for the review. On point 1: I removed the fps comparison from the body. The PR now claims only correctness: the copy cap abort is gone, and refusals per run drop from thousands to a few hundred. It makes no speed claim. On point 2, I'm coordinating the order with the author of #7844 and will update the checklist once we've agreed.

@github-actions

github-actions Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 8874 core/libs/prx/libSceAgcDriver/tests/BdaTests.hpp L24
docs/dev/debt/libSceAgcDriver.md L274-275

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 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4448 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4449 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5372 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6185 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6548 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6905 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6918 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
PR 6970 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6977 docs/dev/debt/libSceAgcDriver.md
PR 6987 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6989 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6995 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7002 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7256 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7464 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7514 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7689 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 8014 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8246 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8319 docs/dev/debt/libSceAgcDriver.md
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8542 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 9356 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9432 docs/dev/debt/libSceAgcDriver.md
PR 9489 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9592 docs/dev/debt/libSceAgcDriver.md
PR 9712 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9748 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9891 docs/dev/debt/libSceAgcDriver.md
PR 9893 docs/dev/debt/libSceAgcDriver.md
PR 9895 docs/dev/debt/libSceAgcDriver.md
PR 9897 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 9898 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9899 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9915 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10026 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10049 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10442 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/BdaResources.cpp
PR 10472 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10757 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10920 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11444 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 11551 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 11554 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12070 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12120 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 12157 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 12348 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 12702 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12828 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12862 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 12904 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md

@QRMOE

QRMOE commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

A second title this gets past the import-budget wall: RESIDENT EVIL requiem (PPSA31246), Windows 11, RX 9070 XT (AMD 26.6.2), 32 GB RAM.

Without this PR, loading the area after the opening cutscene ends the same way every time:

  • Both heaps fill up: VRAM about 13.4 of 13.7 GB, and host-visible about 14.9 of 14.9 GB, 8 GB of it host imports.
  • Heap-mirror slabs spill into host memory.
  • A 16 MiB heap-mirror slab allocation fails with -2, and the driver aborts.
  • Capping APS5_HOST_IMPORT_MIB at 6400 or 7680 avoided the abort but stalled the load. The 6400 cap refused about 430,000 imports in a few minutes.

With this PR's GuestBufferMemory.cpp change applied to my local tree, the same load finishes and the title reaches the next area. The tree is main 74acfad plus #10935, #10304, #9950, #11199, #11369, #11485, #11580, #11357 and #9999, two title-run workarounds, and an address-space change of mine. Settings were the defaults plus APS5_LAZY_SHADER_PREPARE=1 APS5_NO_GPL=1.

RESIDENT EVIL requiem past the post-intro load with this PR

In the log after about 25 minutes:

  • no vkAllocateMemory failure and no abort;
  • 35 GB committed;
  • 114 shaders prepared that earlier runs never reached.

The budget is still full (8078 MiB live of 8078 MiB), and 9,319,224 import requests have been refused so far, 8,565,440 of them remembered. Imports are still churning, but the title no longer stops. One run so far.

Not tested: I haven't run this PR's ctests; I only tested the title.

AI-assisted: yes (Claude Code).

@mehmetbayoglu

Copy link
Copy Markdown
Contributor Author

Thanks for testing it on RESIDENT EVIL requiem (PPSA31246) on AMD. A second title and a second vendor getting past the same budget wall is very useful. The refusals you still see once the budget is full match what is left on Astro Bot: this PR stops the abort and the full-range copies, but it doesn't make the budget any bigger. That's a separate change.

@mehmetbayoglu

mehmetbayoglu commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor Author

On point 2: I don't mind which of this PR and #7844 lands first, so I'll leave the order to the maintainers. If #7844 merges first, I'll rebase this one onto it, keep both debt updates and set Depends on: #7844.

mehmetbayoglu and others added 4 commits October 29, 2026 07:50
…or can replace

An address-based build that copies a range the budget refused and no mirror serves (a range outside the write watch, or not releasable) evicts idle imports when the copy would pass APS5_ADDRESS_COPY_MAX_MIB. Imports used in the current or the previous frame (before two frames have ended, within the last 256 lookups) never count as idle, so once a build uses an import every frame, as it does for the pieces boykopovar#8380 imports of a heap over the budget or a whole heap imported before, nothing can be evicted and the build aborts. That eviction now also takes imports the build has not taken yet whose single range is releasable and write-watched: the build then serves that range from a heap mirror instead.
… imports a mirror can replace

A cached address space keeps a heap mirror whose range has left the write watch while the budget refuses the range's import, and such a mirror is copied in full at every build. When the budget is held by imports a build uses every time, as the pieces boykopovar#8380 imports of a heap over the budget are, the import was refused at every build, each refusal counted, and every build copied the whole range (about 1.1 GiB in Astro Bot). The check now evicts for that import as the copy cap does: idle imports, and imports a heap mirror can replace that no build in progress holds.
@adriadam10
adriadam10 force-pushed the fix/agc-import-yield-mirrorable-pr branch from db3a5cd to c283a72 Compare October 29, 2026 07:24

@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.

Re-review — changes requested

The latest description now explicitly makes no speed claim and focuses on the correctness result: the copy-cap abort is avoided and repeated full-range copies/import refusals are reduced. That resolves my earlier request for matched performance-report artifacts or removal of the speed comparison. The author reports the two new regression tests pass with this change and fail on main; I did not rerun them locally.

Two integration items remain:

  1. The reported test baseline and PR base are 14332cd8d0, while current upstream main is aaccd0ba39b7. Please refresh onto current main and rerun the focused address-copy/import tests on the exact resulting head.
  2. The debt-file conflict with open #7844 is still unresolved. The author says either order is acceptable and leaves the choice to maintainers, but the checklist still says Depends on: none, and neither PR records an agreed order. Please get that order selected and recorded on both sides; if #7844 lands first, preserve its debt edit while rebasing this PR as described.

The authored Windows/AGC suite report is useful, but the hosted Linux product job is skipped and I did not run a local GPU build. I am holding approval for the current-main and overlap items, not for the removed speed claim.

@oneandonlydean oneandonlydean self-assigned this Oct 29, 2026
@oneandonlydean
oneandonlydean merged commit 3d1b1c3 into boykopovar:main Oct 29, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* build docs unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants