Skip to content

perf(agc): widen small epoch collects to their 64 KiB block on Windows - #6273

Open
SoRadGaming wants to merge 1 commit into
boykopovar:mainfrom
SoRadGaming:perf/windows-widen-collects
Open

SoRadGaming wants to merge 1 commit into
boykopovar:mainfrom
SoRadGaming:perf/windows-widen-collects

Conversation

@SoRadGaming

@SoRadGaming SoRadGaming commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

Within a collect epoch, #1310 widens a collect of at most one 64 KiB block to the whole block, so the epoch's collect memo serves the block's other ranges. It left Windows on the requested range because it was not tested there. Windows now widens too.

Linux is unchanged: the widening block is the same, and the retry is Windows-only.

Tested

Windows 11 Pro 26200, Ryzen 7 5800X3D, Radeon RX 9070 XT (driver 32.0.23033.1002), WinLibs GCC 15.2.0 r7, Release.

  • New CheckWidenedCollectBesideUncommittedPages (agc_write_tracking, Windows):
    • The last 16 KiB of a 64 KiB block stays an uncommitted placeholder, which the test checks.
    • A 64-byte collect in the block must succeed and see a CPU write in the next epoch.
    • With the widening but without the retry, it fails with a collect beside uncommitted pages of its block failed.
  • agc_driver_image_table_reuse passes.
  • ctest, the whole suite on this commit (rebased onto main c0be1f6): 1,250 of 1,254 pass.
  • tools/check_conventions.py --base origin/main passes.
  • Linux: not built here.

The frame-rate runs below were on main ab9a476, before the rebase; the tests above ran on the rebased commit.

ASTRO BOT (PPSA21564 01.007.000), -lvl hub_crashsite (the full Crash Site hub), no input, warm shader cache (1,904 hits, 0 misses), APS5_NO_SNAPSHOT_CHECK=1 APS5_RESOURCE_CACHE_ENTRIES=4096.

A B (this PR)
hub FPS 3.09 / 3.11 / 3.10 / 3.08 3.20 / 3.20 (+3.4 %)

Trace summary lines, APS5_TRACE_SECONDS=300:30 in the same scene, no other APS5_TRACE_*/APS5_PROFILE_* switch, log not redirected. In every capture, queue worker 0's event buffer filled about 5.6 s into the window (trace_dropped). The four traces are available on request.

capture commit presents in 30 s frame ms p50 frame ms p90 gpu_busy ms/present queue worker 0x0 busy Driver.Packet ms/frame
A1 0e4cea2533e7 91 329.2 341.8 152.2 99.3 % 995
B1 76e7495c50a1 94 320.2 328.2 150.7 99.3 % 962
A2 0e4cea2533e7 91 333.4 341.6 151.0 99.3 % 1003
B2 76e7495c50a1 96 312.5 324.5 151.2 99.3 % 944

0e4cea2533e7 is A (main ab9a476 + #6060) and 76e7495c50a1 is B (A + this PR's commit, cherry-picked). A's two captures and B's two were taken in separate sessions on the same day; the FPS rows above alternate.

Summary lines (A1, B1, A2, B2)
{"commit":"0e4cea2533e7","dirty":false,"env":{"APS5_NO_SNAPSHOT_CHECK":"1","APS5_RESOURCE_CACHE_ENTRIES":"4096","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"300:30"},"gpu":"AMD Radeon RX 9070 XT","driver":"AMD proprietary driver 26.3.1 (LLPC)","os":"Windows 10.0.26200","resolution":"3840x2160","window":{"spec":"seconds 300:30","first_present":7589,"ms":30088.041},"presents":91,"frame_ms":{"p50":329.230,"p90":341.761,"p99":358.002,"max":358.002},"gpu_busy_ms_per_present":152.221,"worker_busy_pct":{"queue worker 0x0":99.317,"queue worker 0x40":99.198,"queue worker 0x48":97.882,"queue worker 0x46":4.639},"top_phases_ms_per_frame":{"Driver.Packet":994.826,"Driver.Packet.memory_wait":623.748,"Driver.Packet.draw":274.862,"Driver.Draw":273.691,"Driver.Draw.draw_and_resource_release":150.867,"Graphics.Draw":149.011,"Graphics.Draw.draw_and_resource_release":127.293,"Driver.Draw.shader_compile_and_link":96.645},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":5.671,"events_lost":1126861,"totals_full":false}},"trace":"aps5-trace-0e4cea2533e7-38328.json.gz"}
{"commit":"76e7495c50a1","dirty":false,"env":{"APS5_NO_SNAPSHOT_CHECK":"1","APS5_RESOURCE_CACHE_ENTRIES":"4096","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"300:30"},"gpu":"AMD Radeon RX 9070 XT","driver":"AMD proprietary driver 26.3.1 (LLPC)","os":"Windows 10.0.26200","resolution":"3840x2160","window":{"spec":"seconds 300:30","first_present":7485,"ms":30012.035},"presents":94,"frame_ms":{"p50":320.238,"p90":328.198,"p99":334.560,"max":334.560},"gpu_busy_ms_per_present":150.677,"worker_busy_pct":{"queue worker 0x0":99.300,"queue worker 0x40":99.198,"queue worker 0x48":98.077,"queue worker 0x46":4.813},"top_phases_ms_per_frame":{"Driver.Packet":961.729,"Driver.Packet.memory_wait":603.154,"Driver.Packet.draw":262.151,"Driver.Draw":261.033,"Driver.Draw.draw_and_resource_release":140.028,"Graphics.Draw":138.340,"Graphics.Draw.draw_and_resource_release":117.132,"Driver.Draw.shader_compile_and_link":95.201},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":5.626,"events_lost":1150218,"totals_full":false}},"trace":"aps5-trace-76e7495c50a1-24348.json.gz"}
{"commit":"0e4cea2533e7","dirty":false,"env":{"APS5_NO_SNAPSHOT_CHECK":"1","APS5_RESOURCE_CACHE_ENTRIES":"4096","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"300:30"},"gpu":"AMD Radeon RX 9070 XT","driver":"AMD proprietary driver 26.3.1 (LLPC)","os":"Windows 10.0.26200","resolution":"3840x2160","window":{"spec":"seconds 300:30","first_present":5939,"ms":30305.004},"presents":91,"frame_ms":{"p50":333.391,"p90":341.607,"p99":357.428,"max":357.428},"gpu_busy_ms_per_present":150.968,"worker_busy_pct":{"queue worker 0x0":99.321,"queue worker 0x40":99.211,"queue worker 0x48":98.099,"queue worker 0x46":4.703},"top_phases_ms_per_frame":{"Driver.Packet":1002.867,"Driver.Packet.memory_wait":629.182,"Driver.Packet.draw":276.746,"Driver.Draw":275.514,"Driver.Draw.draw_and_resource_release":151.510,"Graphics.Draw":149.656,"Graphics.Draw.draw_and_resource_release":127.574,"Driver.Draw.shader_compile_and_link":97.106},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":5.664,"events_lost":1141939,"totals_full":false}},"trace":"aps5-trace-0e4cea2533e7-25884.json.gz"}
{"commit":"76e7495c50a1","dirty":false,"env":{"APS5_NO_SNAPSHOT_CHECK":"1","APS5_RESOURCE_CACHE_ENTRIES":"4096","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"300:30"},"gpu":"AMD Radeon RX 9070 XT","driver":"AMD proprietary driver 26.3.1 (LLPC)","os":"Windows 10.0.26200","resolution":"3840x2160","window":{"spec":"seconds 300:30","first_present":5828,"ms":30034.340},"presents":96,"frame_ms":{"p50":312.495,"p90":324.478,"p99":345.084,"max":345.084},"gpu_busy_ms_per_present":151.188,"worker_busy_pct":{"queue worker 0x0":99.292,"queue worker 0x40":99.210,"queue worker 0x48":97.981,"queue worker 0x46":5.269},"top_phases_ms_per_frame":{"Driver.Packet":943.545,"Driver.Packet.memory_wait":589.044,"Driver.Packet.draw":256.496,"Driver.Draw":255.348,"Driver.Draw.draw_and_resource_release":137.372,"Graphics.Draw":135.660,"Graphics.Draw.draw_and_resource_release":114.983,"Driver.Draw.shader_compile_and_link":92.531},"trace_dropped":true,"trace_dropped_threads":{"queue worker 0x0":{"events_full_after_s":5.541,"events_lost":1170046,"totals_full":false}},"trace":"aps5-trace-76e7495c50a1-20508.json.gz"}

Related: #1201's pipelining commit keeps a thread's collected ranges for the whole epoch (EpochCollectMap). That covers a separate repeat: the 64-entry memo ring is smaller than a queue-0 epoch here. The two changes add up. With an epoch-long memo, the widening cut the hub's walks on queue worker 0 from 81k to 57k and their time from 686 to 578 ms per 10 s (local counter). This tree plus #1201 (with @Raghav314's and @eliyarson's ordering fixes), APS5_PIPELINED_DRAWS=1, runs the hub at 5.33 / 5.36 FPS.

Update (2026-10-19)

Rebased onto main 3ddbc4a (246b029). Only the debt file conflicted: #4650's depth-range entry and this one now sit side by side. The image-table test change dropped out of the diff because main has it (e3dd06f), so the PR is the collect widening with its retry, the new write-tracking test and the debt entry.

On the rebased commit, Windows 11 Pro 26200, Ryzen 7 5800X3D, RX 9070 XT (Adrenalin 26.8.1):

  • agc_write_tracking and agc_driver_image_table_reuse pass 3 of 3 (ctest --repeat until-fail:3).
  • CheckWidenedCollectBesideUncommittedPages resets its range before releasing it, as CheckStoredAllSince does. CheckVersionRanges and CheckCollectBoundaries on main release theirs without a reset. Release alone leaves the committed host allocation in place, so a test added after them that resets its own block hits "cannot release part of a host allocation" (a local experiment of ours did). Nothing on main runs into it, so this PR leaves them alone.
  • The frame-rate numbers above are from the original base (ab9a476); they have not been re-measured on this one.

Update (2026-10-16)

#6060 has merged since this was opened, and so has #1201 (pipelined draws, with its per-epoch collect map). This branch still merges cleanly. I retested it merged onto main 5d9dcc4:

  • agc_write_tracking and agc_driver_image_table_reuse pass 3 of 3.
  • ctest -R "agc_|guest_memory|write_watch": 602 of 605.
    • agc_driver_quad_pixel_mask and agc_driver_layered_volume_vertex_no_gpl fail on this GPU without this change, as noted above.
    • agc_driver_gpu_indirect_arguments_misaligned_writer_ahead does not build under MinGW on main itself: alignas(65536) exceeds the object file maximum of 8192. test(agc): align the indirect arguments block at run time #6452 fixes that.

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 (the gain shows with perf(agc): keep Windows host imports of write-watched private memory watched #6060, which keeps resident imports watched)
  • Unblocks: none
  • GPUs tested: AMD Radeon RX 9070 XT, driver 32.0.23033.1002, Windows 11 Pro 26200
  • AI-assisted: yes

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 15, 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 2434 docs/dev/debt/libSceAgcDriver.md
PR 4448 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 4449 docs/dev/debt/libSceAgcDriver.md
PR 5021 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
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 6169 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6185 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6186 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6187 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6192 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6194 docs/dev/debt/libSceAgcDriver.md
PR 6209 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6218 docs/dev/debt/libSceAgcDriver.md
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6280 docs/dev/debt/libSceAgcDriver.md
PR 6292 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6300 docs/dev/debt/libSceAgcDriver.md
PR 6412 docs/dev/debt/libSceAgcDriver.md
PR 6481 docs/dev/debt/libSceAgcDriver.md
PR 6498 docs/dev/debt/libSceAgcDriver.md
PR 6548 docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6572 docs/dev/debt/libSceAgcDriver.md
PR 6588 docs/dev/debt/libSceAgcDriver.md
PR 6612 docs/dev/debt/libSceAgcDriver.md
PR 6615 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6636 docs/dev/debt/libSceAgcDriver.md
PR 6639 docs/dev/debt/libSceAgcDriver.md
PR 6683 docs/dev/debt/libSceAgcDriver.md
PR 6718 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6727 docs/dev/debt/libSceAgcDriver.md
PR 6741 docs/dev/debt/libSceAgcDriver.md
PR 6743 docs/dev/debt/libSceAgcDriver.md
PR 6801 docs/dev/debt/libSceAgcDriver.md
PR 6804 docs/dev/debt/libSceAgcDriver.md
PR 6808 docs/dev/debt/libSceAgcDriver.md
PR 6820 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6868 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6887 docs/dev/debt/libSceAgcDriver.md
PR 6921 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6926 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6946 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6947 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6959 docs/dev/debt/libSceAgcDriver.md
PR 6960 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 6965 docs/dev/debt/libSceAgcDriver.md
PR 6973 docs/dev/debt/libSceAgcDriver.md
PR 6977 docs/dev/debt/libSceAgcDriver.md
PR 6987 docs/dev/debt/libSceAgcDriver.md
PR 6989 docs/dev/debt/libSceAgcDriver.md
PR 6995 docs/dev/debt/libSceAgcDriver.md
PR 7002 docs/dev/debt/libSceAgcDriver.md
PR 7085 docs/dev/debt/libSceAgcDriver.md
PR 7154 docs/dev/debt/libSceAgcDriver.md
PR 7201 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
PR 7233 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
PR 7256 docs/dev/debt/libSceAgcDriver.md
PR 7307 docs/dev/debt/libSceAgcDriver.md
PR 7310 docs/dev/debt/libSceAgcDriver.md
PR 7371 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
PR 7426 docs/dev/debt/libSceAgcDriver.md
PR 7446 docs/dev/debt/libSceAgcDriver.md
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7480 docs/dev/debt/libSceAgcDriver.md
PR 7505 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7600 docs/dev/debt/libSceAgcDriver.md
PR 7604 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7618 docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7659 docs/dev/debt/libSceAgcDriver.md
PR 7668 docs/dev/debt/libSceAgcDriver.md
PR 7696 docs/dev/debt/libSceAgcDriver.md
PR 7717 docs/dev/debt/libSceAgcDriver.md
PR 7729 docs/dev/debt/libSceAgcDriver.md
PR 7800 docs/dev/debt/libSceAgcDriver.md
PR 7803 docs/dev/debt/libSceAgcDriver.md
PR 7844 docs/dev/debt/libSceAgcDriver.md
PR 7869 docs/dev/debt/libSceAgcDriver.md
PR 7883 docs/dev/debt/libSceAgcDriver.md
PR 7893 docs/dev/debt/libSceAgcDriver.md
PR 7896 docs/dev/debt/libSceAgcDriver.md
PR 7910 docs/dev/debt/libSceAgcDriver.md
PR 7911 docs/dev/debt/libSceAgcDriver.md
PR 7912 docs/dev/debt/libSceAgcDriver.md
PR 7927 docs/dev/debt/libSceAgcDriver.md
PR 7948 docs/dev/debt/libSceAgcDriver.md
PR 7965 docs/dev/debt/libSceAgcDriver.md
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 7981 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
core/libs/prx/libSceAgcDriver/tests/WriteTracking.cpp
PR 8014 docs/dev/debt/libSceAgcDriver.md
PR 8046 docs/dev/debt/libSceAgcDriver.md
PR 8069 docs/dev/debt/libSceAgcDriver.md
PR 8070 docs/dev/debt/libSceAgcDriver.md
PR 8083 docs/dev/debt/libSceAgcDriver.md
PR 8099 docs/dev/debt/libSceAgcDriver.md
PR 8115 docs/dev/debt/libSceAgcDriver.md
PR 8121 docs/dev/debt/libSceAgcDriver.md
PR 8123 docs/dev/debt/libSceAgcDriver.md
PR 8139 core/libs/prx/libSceAgcDriver/Execution/src/GuestMemory.cpp
PR 8145 docs/dev/debt/libSceAgcDriver.md
PR 8180 docs/dev/debt/libSceAgcDriver.md
PR 8206 docs/dev/debt/libSceAgcDriver.md
PR 8213 docs/dev/debt/libSceAgcDriver.md
PR 8223 docs/dev/debt/libSceAgcDriver.md
PR 8224 docs/dev/debt/libSceAgcDriver.md
PR 8261 docs/dev/debt/libSceAgcDriver.md
PR 8281 docs/dev/debt/libSceAgcDriver.md
PR 8283 docs/dev/debt/libSceAgcDriver.md
PR 8297 docs/dev/debt/libSceAgcDriver.md
PR 8319 docs/dev/debt/libSceAgcDriver.md
PR 8365 docs/dev/debt/libSceAgcDriver.md
PR 8395 docs/dev/debt/libSceAgcDriver.md
PR 8401 docs/dev/debt/libSceAgcDriver.md
PR 8412 docs/dev/debt/libSceAgcDriver.md
PR 8419 docs/dev/debt/libSceAgcDriver.md
PR 8420 docs/dev/debt/libSceAgcDriver.md
PR 8423 docs/dev/debt/libSceAgcDriver.md
PR 8424 docs/dev/debt/libSceAgcDriver.md
PR 8426 docs/dev/debt/libSceAgcDriver.md
PR 8469 docs/dev/debt/libSceAgcDriver.md
PR 8519 docs/dev/debt/libSceAgcDriver.md
PR 8527 docs/dev/debt/libSceAgcDriver.md
PR 8538 docs/dev/debt/libSceAgcDriver.md
PR 8542 docs/dev/debt/libSceAgcDriver.md
PR 8563 docs/dev/debt/libSceAgcDriver.md
PR 8564 docs/dev/debt/libSceAgcDriver.md
PR 8592 docs/dev/debt/libSceAgcDriver.md
PR 8639 docs/dev/debt/libSceAgcDriver.md

This was referenced Oct 15, 2026
@Scramblrrrr

Copy link
Copy Markdown
Contributor

Windows/RTX5070Ti617.42 combined cross-test is ready at51b148e100509891c9b194da360e6dd80bdeb16b: https://github.com/Scramblrrrr/AnyPS5/tree/codex/first-light-watch-proof-current . Includes #6346 5532d51 and #6273 fdcbb83, on main93e54cedd plus our explicitly listed007/shared-table/level prerequisites. Both author commits applied cleanly; no replacement implementation.

30/30 selected native CPU/Vulkan checks PASS14.19s, no skips, including write_tracking's new cases, repeated-neighbour stores, image-table reuse/bounds, shared-table vouches, draw reuse/verify/inline, storage flush ordering, tessellation, serializer/cache and prebuild unset/0/1. Conventions clean. After final revision-string rebuild,5/5 related controlsPASS1.46s. Combined native evidence, not standalone each-PR evidence; no title FPS result yet.

Integration test adjustment: the a driver store over an entry case now counts2reuse/1resolution across its two dispatches, instead of1/1. With the finer range proof, clean siblings are reused even on the dispatch that rebuilds the changed entry. Both texel checks retained; no production proof weakened. #6273's CpuWriteResolutions=1 is retained. All other current #6340 expectations pass unchanged.

There is also an opt-in bounded copied-buffer ownership sampler in this test branch (maximum25small records per process, no game contents). Its initial asynchronous output triggered a native process-exit timeout; sampler-off control passed, and switching it to the existing direct trace sink made all3prebuild policies pass with sampling on. That defect was mine, not attributed to either PR. The full native result above has sampling enabled after the correction. Starting a guarded007 cross-test next. AI-assisted: Codex; raw title data local.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 17, 2026
@adriadam10 adriadam10 self-assigned this Oct 18, 2026
@github-actions github-actions Bot added the perf Performance change label Oct 18, 2026
@Amoenus

Amoenus commented Oct 19, 2026

Copy link
Copy Markdown
Contributor

Current-main Windows fixture check (2026-10-19)

Heads-up for the next refresh: the exact counter failure described above now also occurs without this PR's production change on unmodified main 0c25997a5a19dede15c8b0da5fb4bc3683bd14d3:

image table reuse: a CPU write collected in a new epoch, then two dispatches:
2 reused and 1 resolved tables, expected 1 and 2

Reproduced once on each actual GPU after a matching full Windows relinker/library + reuse-fixture build. Its preceding texel checks pass; it stops at this counter assertion.

I then applied only your four-line CpuWriteResolutions test correction from fdcbb838d69705002f14457881bac83388c93918, keeping all production code at that main pin. Credited test-only backport a868b033d4 retains Sorab's co-authorship. With it, the full agc_driver_image_table_reuse fixture passes 3/3 per GPU, including the later image-store cases. No validation error/warning, whole-test skip, internal no-write-watch bypass or timeout; Khronos insertion and device identities verified.

Windows 11 Enterprise 26200 / WinLibs GCC 15.2 r7; RTX 5080 driver 32.0.16.1062 (610.62), Radeon(TM) Graphics 32.0.21036.18; Khronos 1.4.363. ANYPS5_REQUIRE_VULKAN=1, project shader cache disabled, ctest -V -j1 --timeout 30 --repeat until-fail:3 -R '^agc_driver_image_table_reuse$'. Driver caches uncontrolled.

This validates the fixture expectation on that main pin, not the collect-widening/retry behavior or performance of #6273. In particular, the old Windows counter expectation no longer distinguishes the optimization from its base there. We will carry the credited fixture correction in our experimental composition; no duplicate PR for your change. Original build/test logs are retained. AI-assisted validation/report: Codex; author responsible.

Amoenus added a commit to Amoenus/AnyPS5 that referenced this pull request Oct 19, 2026
Backport only the fixture expectation from PR boykopovar#6273 by Sorab, commit fdcbb83. Main0c259 already produces the one-resolution outcome on both physical GPUs without the Windows collect-widening change. Retain every texel check and exact reuse-count assertion.

Co-authored-by: Sorab <sohorhab.azizdel@outlook.com>
(cherry picked from commit a868b03)
@SoRadGaming
SoRadGaming force-pushed the perf/windows-widen-collects branch from fdcbb83 to 5782b2b Compare October 19, 2026 03:15
@github-actions github-actions Bot added needs rebase Conflicts with main, rebase needed and removed needs rebase Conflicts with main, rebase needed labels Oct 19, 2026
Linux widens a collect of at most one 64 KiB block to the whole block within an epoch (boykopovar#1310), so
the memo serves the block's other ranges. Windows kept the requested range because it was not
tested there. On Windows with boykopovar#5596's resident direct memory every walk is a GetWriteWatch call,
and ASTRO BOT's hub walks about 50k ranges of at most 64 KiB per 10 s on queue 0.

Windows coverage does not know which pages of a block are committed or inaccessible, and a walk
refuses such a range before it collects anything. So a widened walk that fails is retried over the
requested pages; without that, a collect beside uncommitted pages of its block fails.

agc_driver_image_table_reuse expected one more table resolution on Windows than on Linux, from
the narrower collects; it now expects Linux's count on both.

The new uncommitted-pages test resets its range before releasing it, so the arena does not hand
the next test an address inside memory that is still committed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@SoRadGaming
SoRadGaming force-pushed the perf/windows-widen-collects branch from 5782b2b to 246b029 Compare October 19, 2026 04:15
@SoRadGaming

Copy link
Copy Markdown
Contributor Author

Rebased onto main 3ddbc4a as 246b029, and it merges cleanly again. Only the debt file conflicted (#4650's entry and this one now sit side by side).

@Amoenus thanks for the fixture check. Main took the same CpuWriteResolutions correction in e3dd06f, so it dropped out of this diff. What's left is the Windows collect widening with its retry, CheckWidenedCollectBesideUncommittedPages and the debt entry.

On the rebased commit (Windows 11, RX 9070 XT, Adrenalin 26.8.1), agc_write_tracking and agc_driver_image_table_reuse pass 3 of 3. The description has a 2026-10-19 update with the details. That includes the note that the frame-rate numbers are still from the original base.

Written with AI assistance (Claude).

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 19, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* docs needs rebase Conflicts with main, rebase needed perf Performance change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants