Skip to content

fix(agc): enforce MSAA guards for ordinary image cache hits - #7650

Merged
adriadam10 merged 5 commits into
boykopovar:mainfrom
alex73630:fix/agc-cached-image-msaa-guard
Oct 20, 2026
Merged

adriadam10 merged 5 commits into
boykopovar:mainfrom
alex73630:fix/agc-cached-image-msaa-guard

Conversation

@alex73630

Copy link
Copy Markdown
Contributor

What

An ordinary sampled or storage image can remain cached after a multisampled color target is registered over the same guest memory. The resource reuse proof accepts unchanged memory stamps without checking the new owner. A fresh sampled build can also bypass the guard through its precollected texture shortcut. Check the color-target guard before either shortcut accepts an ordinary image. [1] [2]

Keep image-table entries outside this eager guard: they can contain valid native MSAA views, and invalid entries need per-element fault handling. The existing combined color/depth guard retains its behavior. The standalone regression covers draw and compute sampled/storage bindings, disjoint and overlapping targets, retirement, and a native MSAA table entry. The separate reused-table registration gap is recorded in technical debt. [3] [4] [5] [6]

No title unblock or speed improvement is claimed. This branch does not depend on the GT7 integration branch or PR #6636.

Overlap: #7154 adds depth-plane flushing adjacent to both checks; it does not implement the color-target guard. Either integration must retain the guard before the fast sampled lookup and retain the depth flushes. The debt paragraph also overlaps #6215, #6571 and the #6973/#6987/#6989/#6995/#7002 MSAA layout series; those changes do not add these ordinary-cache checks. Some comparisons are unavailable because those PRs already conflict with main; shared-code review found no equivalent fix. #7642 adds an opt-in device image-table path and does not replace this guard. #6946/#6947 add earlier reuse returns, which must remain after this ordinary-image guard when combined.

Tested

Arch Linux, kernel 7.2.11-zen1-1-zen, NVIDIA GeForce RTX 3070, driver 615.78.08. RelWithDebInfo, BUILD_TESTING=ON, bundled dependencies, ANYPS5_ENABLE_SPIRV_TOOLS=OFF, ANYPS5_REQUIRE_VULKAN=1. Based on main 48d61f5.

  • 9 focused tests pass in 6.14 s: graphics, cached_image_multisample_guard, image_table_reuse, multisample_fill_host_only, native_multisample_depth, sample_mask_multisample, sample_multisample_target, native_depth_retirement, and sampled_cache_budget_without_storage_image_multisample (all prefixed agc_driver_).
  • The new regression also passes with APS5_NO_EPOCH_REVALIDATE=1 and APS5_NO_FAST_REVALIDATE=1 (0.15 s each). Its native MSAA table case ran on this GPU; that subcase prints a skip on devices without image-table support.
  • Negative control: removing only the Revalidate guard fails the default and no-epoch runs with "a cached image access accepted memory owned by a multisampled color target". The full lookup control passes. Restoring the guard passes all three modes.
  • The initial sampled shortcut independently failed with "a fresh image access accepted memory owned by a multisampled color target"; APS5_NO_PRECOLLECT=1 passed before the fastTexture fix.
  • The native MSAA table regression fails with the broad range guard and passes after ordinary/table ranges are distinguished. It verifies that the native texture was actually bound before validation.

These are resource construction/validation regressions, not a title runtime or performance benchmark. Windows and other GPU vendors were not tested locally. The existing fresh storage guard is checked for consistency; it is not newly implemented here.

git diff --check and python3 tools/check_conventions.py --base origin/main pass. python3 tools/pr_overlap.py --branch fix/agc-cached-image-msaa-guard --jobs 1 completed with the overlap limitations above.

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: none
  • GPUs tested: NVIDIA GeForce RTX 3070, driver 615.78.08, Arch Linux, kernel 7.2.11-zen1-1-zen
  • AI-assisted: yes

alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 18, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
@github-actions

github-actions Bot commented Oct 18, 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 7154 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp L3230-3231, L4489-4490

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 2434 docs/dev/debt/libSceAgcDriver.md
PR 4448 docs/dev/debt/libSceAgcDriver.md
PR 4449 docs/dev/debt/libSceAgcDriver.md
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5372 docs/dev/debt/libSceAgcDriver.md
PR 5499 docs/dev/debt/libSceAgcDriver.md
PR 5925 docs/dev/debt/libSceAgcDriver.md
PR 6146 docs/dev/debt/libSceAgcDriver.md
PR 6177 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6192 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6194 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6202 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6223 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 docs/dev/debt/libSceAgcDriver.md
PR 6300 docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6498 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6548 docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6636 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6683 core/libs/prx/libSceAgcDriver/Graphics/include/MultisampleTarget.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6727 docs/dev/debt/libSceAgcDriver.md
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6808 core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6868 docs/dev/debt/libSceAgcDriver.md
PR 6926 docs/dev/debt/libSceAgcDriver.md
PR 6937 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6946 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6947 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6970 core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6971 core/libs/prx/libSceAgcDriver/Graphics/include/MultisampleTarget.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
PR 6972 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 6977 docs/dev/debt/libSceAgcDriver.md
PR 7002 core/libs/prx/libSceAgcDriver/Graphics/include/MultisampleTarget.hpp
core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7085 docs/dev/debt/libSceAgcDriver.md
PR 7256 docs/dev/debt/libSceAgcDriver.md
PR 7332 docs/dev/debt/libSceAgcDriver.md
PR 7446 docs/dev/debt/libSceAgcDriver.md
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7484 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
PR 7505 docs/dev/debt/libSceAgcDriver.md
PR 7604 docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7668 docs/dev/debt/libSceAgcDriver.md
PR 7800 core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7927 docs/dev/debt/libSceAgcDriver.md
PR 7948 core/libs/prx/libSceAgcDriver/Graphics/include/MultisampleTarget.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/ShaderResources.cpp
docs/dev/debt/libSceAgcDriver.md
PR 8014 docs/dev/debt/libSceAgcDriver.md
PR 8099 docs/dev/debt/libSceAgcDriver.md

@github-actions github-actions Bot added docs agc libSceAgc* labels Oct 18, 2026
@LeandroLP23

Copy link
Copy Markdown
Contributor

AMD on Windows: the new agc_driver_cached_image_multisample_guard fails here, 3 runs of 3. Radeon 860M (RDNA 3.5, driver 32.0.13058.8001), Windows 11 26300, WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON. Build: main e8ad642fe with #7651, #7650, #7647, #7655 and #7648 merged together (each merge clean, built once).

checking compute storage image reuse
AGC graphics: the fixture did not exercise the fast image proof

The failure is the fixture's own precondition, not a wrong result: on this GPU and driver the test doesn't reach the fast image proof it means to check. The other tests in this area pass 3 of 3: agc_driver_graphics, agc_driver_image_table_reuse, agc_driver_multisample_fill_host_only, agc_driver_native_multisample_depth, agc_driver_sample_mask_depth_stencil, agc_driver_sample_mask_draw and agc_driver_sample_mask_multisample.

AI-assisted

@savvaniss

Copy link
Copy Markdown
Contributor

Windows data on an Intel UHD 770 and an AMD RX 9070 XT. The new agc_driver_cached_image_multisample_guard fails on both, with and without the driver change, at the fixture's fast-proof precondition, before it reaches the guard:

checking compute storage image reuse
AGC graphics: the fixture did not exercise the fast image proof

Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release, every execution test built, ANYPS5_NO_SHADER_CACHE=1, serial CTest. Intel UHD Graphics 770 (8086:a780), driver 32.0.101.7088. AMD Radeon RX 9070 XT (RDNA 4, 1002:7550), driver 32.0.31041.1004, with VkCache emptied first. This head 36b059672 merged into main f3059421f.

agc_driver_cached_image_multisample_guard, ×3 UHD 770 RX 9070 XT
This head fails: the fixture did not exercise the fast image proof same
This test file on main, without the rest of the PR same same
This head with APS5_NO_FAST_REVALIDATE=1 3 of 3 pass 3 of 3 pass

Why the fast proof isn't taken on Windows:

  • The first storage-image upload imports the guest block (HostImportFor, Texture.cpp).
  • On Windows, decideImportWatch (GuestBufferMemory.cpp:1094) always sets unwatchImports. This log also prints [write-watch] Windows direct host imports use comparisons (no second queue to settle imports on).
  • So the imported block is excluded from write tracking, and GuestMemory::CollectWrites returns 0 for it.
  • fastRevalidate then stops at fail(FastFail::Collect) (ShaderResources.cpp:2796), and Revalidate succeeds through the full walk, reporting ProofPath::Full.
  • On Linux, imports stay watched where the write-protection probe allows it, which is presumably why the fixture passes there.

An existing pattern would keep the guard covered on Windows. tests/Recorder.cpp:3184 checks AgcDriver::GuestMemory::Watched(address, bytes) and prints host imports are compared, not watched: draw snapshot reuse not tested instead of failing. The fast-path Require here could depend on the same check. The run with APS5_NO_FAST_REVALIDATE=1 shows that the rest of the test passes on both GPUs.

Full CTest with this PR and the 14 other open AGC PRs I tested in the same batch merged together: the only failure beyond main's own is this test, on both GPUs.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
@alex73630
alex73630 force-pushed the fix/agc-cached-image-msaa-guard branch from 36b0596 to ad1bf47 Compare October 18, 2026 23:48
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 18, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
@alex73630

Copy link
Copy Markdown
Contributor Author

Thanks @LeandroLP23 and @savvaniss for the Windows reports and diagnosis. Pushed the fixture correction in ad1bf47 and rebased the branch onto main a6dd29b3d.

The fixture now checks GuestMemory::Watched(address, bytes) before requiring ProofPath::Fast. Watched image memory must still take the fast path unless it is explicitly disabled. When imports use comparisons instead of write tracking, the fixture reports that fast-proof coverage is unavailable and continues through all existing MSAA guard checks using the full proof. There is no early return, Windows-specific exception, or production-driver change in this follow-up.

Validation on Linux / RTX 3070:

  • Reproduced the original assertion with APS5_WRITE_WATCH_IMPORTS=unwatch.
  • The corrected agc_driver_cached_image_multisample_guard passes in default, APS5_NO_EPOCH_REVALIDATE=1, APS5_NO_FAST_REVALIDATE=1, and APS5_WRITE_WATCH_IMPORTS=unwatch modes.
  • agc_driver_multisample_retirement also passes after the rebase.

I do not have a Windows test host, so the Linux comparison-mode check is not Windows validation. Could you rerun agc_driver_cached_image_multisample_guard on the updated head, with default settings and with APS5_NO_FAST_REVALIDATE=1, on the GPUs you reported? Please include the head revision and output, including any message about compared image memory. The default run should now retain the guard assertions without requiring a fast proof for unwatched imports.

AI-assisted: yes (Codex).

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 18, 2026
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
@blawesom

Copy link
Copy Markdown
Contributor

Rebase handoff — rebased onto current main (authorship unchanged). One conflict in ShaderResources.cpp: main refactored the inline texture-placement block into a place() lambda — the merged version keeps main's place() call, which already covers your placement logic; your test changes replay on top.

Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release, BUILD_TESTING=ON, AMD RX 9070 XT / RADV): builds; conventions pass; the cached-image and image-table tests pass; full suite green apart from the two known main regressions (agc_driver_tessellation — Mesa, #5444; agc_driver_bda_device — #7584), neither from this PR.

To pick it up:

git fetch https://github.com/blawesom/AnyPS5 rebase/7650
git checkout <your branch>
git merge --ff-only FETCH_HEAD

Head is ad1bf47f7.

@LeandroLP23

Copy link
Copy Markdown
Contributor

Rerun on Windows as asked: agc_driver_cached_image_multisample_guard passes at ad1bf47, 3 of 3, and 3 of 3 with APS5_NO_FAST_REVALIDATE=1. It prints image memory is compared, not watched: fast image proof not tested; checking the image guards through the full proof for the compute and draw storage cases, as the new fixture intends. AMD Radeon 860M, WinLibs GCC 15.2.0, Release.

One thing to watch in the rebase. ad1bf47 still conflicts with current main (6b8228b) in ShaderResources.cpp and docs/dev/debt/libSceAgcDriver.md:

  • main moved the image-table texture placement into the place() lambda in resolveImageTables. Keeping main's place() call alone drops this PR's , true (the imageTable field) from that lambda's describedRanges.push_back({"texture", ...}). I tried that resolution: the test fails 3 of 3, at checking draw sampled image reuse, with a cached image access of 0x200000000+0x10000 overlaps multisampled color target ... guest access to it is not implemented.
  • With , true added inside place(), it passes as above.
  • In the debt file, main and this PR both edit the lines around "Multisampled target guest access". I kept main's lines and appended this PR's new sentence ("Ordinary sampled and storage bindings check the color-target guard …").

AI-assisted: yes (Claude Code)

alex73630 added a commit to alex73630/AnyPS5 that referenced this pull request Oct 19, 2026
Apply the reviewed fast sampled lookup guard, exclude image-table ranges from eager rejection, and import the standalone regression from PR boykopovar#7650. Preserve native MSAA table behavior and record the separate table reuse gap.
Check described image ranges before either resource reuse proof, preserving the combined color and resident-depth guard for existing callers. Add standalone draw and compute regressions for sampled and storage images, disjoint targets, guarded fresh builds, and target retirement.
Apply the color-target guard before the precollected texture shortcut can reuse an ordinary sampled image. Distinguish cached and fresh access failures in the regression and unregister tracked memory before unmapping it.
Mark described image-table ranges explicitly and apply the eager color-target guard only to ordinary image bindings. Cover native multisample table validation and record the separate table registration gap.
Require the fast image proof only for write-watched image memory while retaining every guard check for compared imports.
@alex73630
alex73630 force-pushed the fix/agc-cached-image-msaa-guard branch from ad1bf47 to 56d183d Compare October 19, 2026 09:44
@alex73630

Copy link
Copy Markdown
Contributor Author

Rebased onto main 64e2a810a; new head is 56d183dc946700720fa8eb71b36d56ebd6d27ab7.

Resolved the image-table conflict by retaining upstream's shared place helper and replay path, and marking table ranges inside that helper. This preserves the native-MSAA exemption for both newly bound and replayed sampled table entries. Retained upstream's updated MSAA documentation alongside this PR's guard/reuse limitation. The compared-import fixture correction is unchanged.

Validation on Arch Linux, kernel 7.2.11-zen1-1-zen, NVIDIA RTX 3070, driver 615.78.08:

  • Rebuilt the focused targets in the standalone PR worktree (RelWithDebInfo, bundled dependencies).
  • All 10 focused graphics/MSAA/image-table tests passed with ANYPS5_REQUIRE_VULKAN=1 and APS5_BARRIER_VALIDATE=1.
  • The guard regression also passed separately with APS5_NO_EPOCH_REVALIDATE=1, APS5_NO_FAST_REVALIDATE=1, and APS5_WRITE_WATCH_IMPORTS=unwatch.
  • Image-table reuse passed both with default replay and with APS5_NO_TABLE_REPLAY=1.
  • git diff --check and python3 tools/check_conventions.py --base origin/main passed.

Windows was not tested locally. A Windows rerun of the updated head is still needed; the Linux compared-import run does not substitute for that validation.

AI-assisted: yes (Codex).

@LeandroLP23

Copy link
Copy Markdown
Contributor

Windows rerun of 56d183d, merged into main 64e2a81 (clean merge). AMD Radeon 860M, WinLibs GCC 15.2.0, Release:

  • agc_driver_cached_image_multisample_guard passes 3 of 3. It also passes once each with APS5_NO_FAST_REVALIDATE=1, APS5_NO_EPOCH_REVALIDATE=1 and APS5_NO_TABLE_REPLAY=1.
  • The 6 agc_driver_image_table* tests pass with APS5_NO_TABLE_REPLAY=1.
  • These 16 pass with default settings: agc_driver_graphics, the image-table tests (including vouched_lookups and vouch_queued_draws), and the multisample* tests (including retirement, readback* and pass_order).

The place() helper now marks its ranges with true, so the case that failed 3 of 3 with the bare resolution is covered.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@adriadam10 adriadam10 self-assigned this Oct 19, 2026
@adriadam10
adriadam10 merged commit 3cde166 into boykopovar:main Oct 20, 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* docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants