Skip to content

perf(agc): validate host imports through their registered owner - #7466

Open
Dripl1x wants to merge 2 commits into
boykopovar:mainfrom
Dripl1x:codex/registered-host-import-owner
Open

Dripl1x wants to merge 2 commits into
boykopovar:mainfrom
Dripl1x:codex/registered-host-import-owner

Conversation

@Dripl1x

@Dripl1x Dripl1x commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

What

This PR is part of a series of graphics and memory-management performance improvements for AnyPS5, with SuperTuxKart as the main profiling workload. This is item 03/10; the UI Lab startup/cache fix follows as a separate eleventh PR. Each topic's measurements are distinguished from the combined result.

Validate an existing single-range host import through its registered owner after an unrelated registry mutation. Keep full reconciliation for replaced owners, aliases, joined imports and adjacent ranges that can extend an import run.

Tested

Pinned benchmark base: 6447ed1ed7fd11c7eef60df336e8d66fac271188. Tested topic snapshot: a32fe0a42ca02bd0a77ecf03827324e6e633e866. Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop, NVIDIA 617.42. Frozen runtime module hashes and raw traces were verified. No opt-in optimization flags are required.

4/4 real Vulkan cases passed on main and this topic: import windows, unmap, retirement/readback and a second direct-memory mapping. Serial identity is checked immediately after unrelated registration, owner replacement and creation of an alias, before the next fill can repair a stale entry.

SuperTuxKart captures for the bot's before/after requirement: Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop GPU, NVIDIA 617.42, WinLibs GCC 15.2.0 r7, Release; SuperTuxKart (PPSA69421) tutorial prompt over the main menu, 1920x1080 internal rendering in a maximized 2560x1369 window, warm shader caches, audio muted, no input; APS5_TRACE_SECONDS=20:8 with APS5_TRACE_EVENTS=1048576, console output not redirected, no profiling switches; 2026-10-18, two captures per side, order main, PR, main, PR.

Capture Build Commit FPS p50 / p90 / p99 ms
required1018-main-6447 main 6447ed1ed7fd 6447ed1ed7fd 9.584 103.2 / 111.2 / 116.8
required1018-main-6447-awake-r2 main 6447ed1ed7fd 6447ed1ed7fd 9.528 103.9 / 112.2 / 121.1
required1018-7466 this PR 7cea858cf57e 9.510 104.6 / 109.9 / 125.3
required1018-7466-awake-r2 this PR 7cea858cf57e 9.733 101.9 / 105.6 / 117.2

The FPS difference is within the run-to-run spread of main; this PR claims no FPS change. What it saves is shown under Where it helps.

Summary lines (main first, then this PR)
{"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":42,"ms":8034.483},"presents":77,"frame_ms":{"p50":103.246,"p90":111.156,"p99":116.826,"max":116.826},"gpu_busy_ms_per_present":5.271,"worker_busy_pct":{"queue worker 0x0":3.148},"top_phases_ms_per_frame":{"Driver.Packet":3.234,"Driver.Packet.draw":2.618,"Driver.Draw":2.562,"Driver.Draw.shader_compile_and_link":1.512,"Driver.Present":0.815,"Shader.DrawStage":0.813,"Driver.Present.queue_present":0.547,"Vulkan.QueuePresent":0.545},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-21748.json.gz"}
{"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":45,"ms":8081.323},"presents":77,"frame_ms":{"p50":103.882,"p90":112.153,"p99":121.116,"max":121.116},"gpu_busy_ms_per_present":5.214,"worker_busy_pct":{"queue worker 0x0":3.193},"top_phases_ms_per_frame":{"Driver.Packet":3.301,"Driver.Packet.draw":2.672,"Driver.Draw":2.617,"Driver.Draw.shader_compile_and_link":1.540,"Driver.Present":0.839,"Shader.DrawStage":0.828,"Driver.Present.queue_present":0.571,"Vulkan.QueuePresent":0.566},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-38428.json.gz"}
{"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":47,"ms":8097.035},"presents":77,"frame_ms":{"p50":104.599,"p90":109.886,"p99":125.292,"max":125.292},"gpu_busy_ms_per_present":5.263,"worker_busy_pct":{"queue worker 0x0":3.197},"top_phases_ms_per_frame":{"Driver.Packet":3.311,"Driver.Packet.draw":2.687,"Driver.Draw":2.629,"Driver.Draw.shader_compile_and_link":1.565,"Shader.DrawStage":0.856,"Driver.Present":0.841,"Driver.Present.queue_present":0.572,"Vulkan.QueuePresent":0.571},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-15412.json.gz"}
{"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":48,"ms":8013.801},"presents":78,"frame_ms":{"p50":101.898,"p90":105.632,"p99":117.162,"max":117.162},"gpu_busy_ms_per_present":5.268,"worker_busy_pct":{"queue worker 0x0":2.952},"top_phases_ms_per_frame":{"Driver.Packet":2.986,"Driver.Packet.draw":2.440,"Driver.Draw":2.388,"Driver.Draw.shader_compile_and_link":1.412,"Driver.Present":0.843,"Shader.DrawStage":0.757,"Driver.Present.queue_present":0.575,"Vulkan.QueuePresent":0.572},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-2908.json.gz"}
tools/performance_compare.py (first capture of each side)

Performance comparison

Capture Commit Trace Presents Window (ms)
baseline 6447ed1 aps5-trace-6447ed1ed7fd-21748.json.gz 77 8034.483
candidate 7cea858 aps5-trace-7cea858cf57e-15412.json.gz 77 8097.035
  • Compare captures from the same machine, title and scene; summaries do not record the CPU, title or scene.
  • Changes are candidate minus baseline. A negative frame-time change means a shorter frame interval.
  • A missing top phase is unreported, not zero; its change is unavailable.
  • Recorded configuration differs; these measurements do not isolate the code change.

Configuration differences

Setting Baseline Candidate
window.first_present 42 47

Frame and GPU times (ms)

Metric Baseline Candidate Change Change (%)
frame_ms.p50 103.246 104.599 +1.353 +1.310
frame_ms.p90 111.156 109.886 -1.270 -1.143
frame_ms.p99 116.826 125.292 +8.466 +7.247
frame_ms.max 116.826 125.292 +8.466 +7.247
mean_frame_ms 104.344 105.156 +0.812 +0.779
gpu_busy_ms_per_present 5.271 5.263 -0.008 -0.152

Top phases (ms per frame)

Metric Baseline Candidate Change Change (%)
Driver.Draw 2.562 2.629 +0.067 +2.615
Driver.Draw.shader_compile_and_link 1.512 1.565 +0.053 +3.505
Driver.Packet 3.234 3.311 +0.077 +2.381
Driver.Packet.draw 2.618 2.687 +0.069 +2.636
Driver.Present 0.815 0.841 +0.026 +3.190
Driver.Present.queue_present 0.547 0.572 +0.025 +4.570
Shader.DrawStage 0.813 0.856 +0.043 +5.289
Vulkan.QueuePresent 0.545 0.571 +0.026 +4.771
tools/trace_digest.py output (first capture of each side; all digests are in the evidence archive)

required1018-main-6447

seconds 20:8 from present 42: 77 presents, frame p50 103.2 / p90 111.2 / p99 116.8 / max 116.8 ms, GPU busy 5.3 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 1920x1080, commit 6447ed1, dropped: no

{"commit":"6447ed1ed7fd","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":42,"ms":8034.483},"presents":77,"frame_ms":{"p50":103.246,"p90":111.156,"p99":116.826,"max":116.826},"gpu_busy_ms_per_present":5.271,"worker_busy_pct":{"queue worker 0x0":3.148},"top_phases_ms_per_frame":{"Driver.Packet":3.234,"Driver.Packet.draw":2.618,"Driver.Draw":2.562,"Driver.Draw.shader_compile_and_link":1.512,"Driver.Present":0.815,"Shader.DrawStage":0.813,"Driver.Present.queue_present":0.547,"Vulkan.QueuePresent":0.545},"trace_dropped":false,"trace":"aps5-trace-6447ed1ed7fd-21748.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 67: 116.8 ms at 2551 ms: Driver.WorkerWait (queue worker 0x0) 111.9, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 111.8, batch (gpu) 5.3, Driver.Packet (queue worker 0x0) 3.6
  • present 68: 115.8 ms at 2668 ms: Driver.WorkerWait (queue worker 0x0) 110.8, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 110.6, batch (gpu) 5.3, Driver.Packet (queue worker 0x0) 3.7
  • present 97: 112.3 ms at 5756 ms: Driver.WorkerWait (queue worker 0x0) 107.7, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 107.6, batch (gpu) 5.2, Driver.Packet (queue worker 0x0) 3.3

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 2.6 (2 %) 100.7 (97 %) 1.0 3.9 Driver.Packet 2.6, Driver.EndSubmission 0.0
presenter 0.8 (1 %) 0.0 (0 %) 103.5 0.1 Driver.Present 0.8
gpu 5.3 (5 %) 0.0 (0 %) 99.1 0.0 batch 5.3

required1018-7466

seconds 20:8 from present 47: 77 presents, frame p50 104.6 / p90 109.9 / p99 125.3 / max 125.3 ms, GPU busy 5.3 ms per present
NVIDIA GeForce RTX 3070 Laptop GPU, NVIDIA 617.42, Windows 10.0.26300, 1920x1080, commit 7cea858, dropped: no

{"commit":"7cea858cf57e","dirty":false,"env":{"APS5_TRACE_SECONDS":"20:8"},"gpu":"NVIDIA GeForce RTX 3070 Laptop GPU","driver":"NVIDIA 617.42","os":"Windows 10.0.26300","resolution":"1920x1080","window":{"spec":"seconds 20:8","first_present":47,"ms":8097.035},"presents":77,"frame_ms":{"p50":104.599,"p90":109.886,"p99":125.292,"max":125.292},"gpu_busy_ms_per_present":5.263,"worker_busy_pct":{"queue worker 0x0":3.197},"top_phases_ms_per_frame":{"Driver.Packet":3.311,"Driver.Packet.draw":2.687,"Driver.Draw":2.629,"Driver.Draw.shader_compile_and_link":1.565,"Shader.DrawStage":0.856,"Driver.Present":0.841,"Driver.Present.queue_present":0.572,"Vulkan.QueuePresent":0.571},"trace_dropped":false,"trace":"aps5-trace-7cea858cf57e-15412.json.gz"}

Slowest frames (largest slices inside each, inclusive)

  • present 77: 125.3 ms at 3132 ms: Driver.WorkerWait (queue worker 0x0) 119.2, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 119.1, batch (gpu) 5.3, Driver.Packet (queue worker 0x0) 4.4
  • present 78: 119.2 ms at 3258 ms: Driver.WorkerWait (queue worker 0x0) 113.9, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 113.7, batch (gpu) 5.3, Driver.Packet (queue worker 0x0) 3.8
  • present 75: 114.4 ms at 2905 ms: Driver.WorkerWait (queue worker 0x0) 109.7, Driver.WorkerWait.idle_and_completion_poll (queue worker 0x0) 109.6, batch (gpu) 5.3, Driver.Packet (queue worker 0x0) 3.4

Threads (ms per frame)

thread busy wait untraced in slices < 20 us largest
queue worker 0x0 2.7 (3 %) 101.4 (96 %) 1.1 3.9 Driver.Packet 2.7, Driver.EndSubmission 0.0
presenter 0.8 (1 %) 0.0 (0 %) 104.3 0.1 Driver.Present 0.8
gpu 5.3 (5 %) 0.0 (0 %) 99.9 0.0 batch 5.3

Where it helps

In the SuperTuxKart scene, HostImportSerial runs about 119 times per frame. On main, after an unrelated registry change it reconciles all imports through refreshImports; with this PR the registered owner of the import is checked instead.

Measured main 2185dbf92e main + series
HostImportSerial calls per frame 119.0 118.7
HostImportSerial µs per call 23.88 0.32
HostImportSerial ms per frame 2.84 0.04
refreshImports called from HostImportSerial calls per frame 20.9 0.0
refreshImports called from HostImportSerial µs per call 134.25 —
refreshImports called from HostImportSerial ms per frame 2.81 0.00

Counters come from a local probe build that is not part of this PR (review-probe.patch in the evidence archive): the same counters and timers were inserted into main 2185dbf92e and into main with all eleven series PRs merged (#7464 in its rebased form), anchored on function definitions present in both trees. Runs were in the mirrored order main, series with #7464 reduced to its wake only, series, series, reduced series, main, in the scene above with APS5_PROFILE_DRAW=1; values are medians of two runs over the same 8-second window as the trace, starting 20 s after the first flip, per flip. These runs carry profiling overhead and are not used for FPS. Each optimised function below is changed by this PR only; counters show where the work goes, not an isolated FPS gain.

Other homebrew checks

Workload Control FPS This topic FPS Scope
vkQuake 54.590 54.797 Moving demo; small differences need matched camera repeats
Syobon Action 30.276 30.277 Approximately 30-FPS cap
Middle Ages Ping Pong N/A N/A Runtime compatibility checked; no performance figure reported

UI Lab: the 21 default concepts were rendered and visually reviewed in a navigation cycle for this topic. Artwork was present; this covers default navigation, not all themes or every widget interaction.

Known baseline rendering issue: vkQuake still has intermittent flickering and an intermittently black floor on main and the tested performance branches. These changes do not fix it. Yamagi Quake II gameplay stops at unsupported last-provoking-vertex flat interpolation, and UZDoom at unsupported clip/cull-distance handling on the baseline; neither supplies a valid gameplay FPS comparison.

Dependencies, series and overlap

#6917 retains registry lease snapshots; #6951 memoizes run bounds per lease; #7261 reconciles resource-set proofs after registry changes. This topic checks the registered owner of an individual import before full reconciliation. They optimize related paths and are not claimed as new work here.

The project overlap scan compared the local topics against 785 open PRs and checked merges into main e5c2b3c325e485ba7fd417c47c46f48aa2c89115. This topic merges cleanly in that snapshot. Some other PRs already conflict with main, so the tool cannot compare all their shared-file hunks; the full report is retained with the common series evidence package. No exact duplicate was identified in the inspected implementations. This is not a certification that every conflicting foreign branch is composition-tested.

Conventions and whitespace checks passed for the tested topic range. The benchmark base remains pinned for comparability; this is not a fresh-current-main build/test claim. Measurements and focused tests refer to the pinned source revisions above; no full-suite CI run is claimed.

Re-checked on 2026-10-21: this head still merges cleanly into main 2185dbf92e. #6658, which the earlier combined runs carried, merged into main on 2026-10-20.

Combined series result

Re-measured on 2026-10-21 on current main 2185dbf92e (Windows 11 Pro build 26300, Ryzen 7 5800H, RTX 3070 Laptop GPU, NVIDIA 617.42, WinLibs GCC 15.2.0 r7, Release; SuperTuxKart (PPSA69421) tutorial prompt over the main menu, 1920x1080 internal rendering in a maximized 2560x1369 window, warm shader caches, audio muted, no input; APS5_TRACE_SECONDS=20:8 with APS5_TRACE_EVENTS=1048576, console output not redirected, no profiling switches). Runs in the order A-B-C-D-D-C-B-A, two per configuration; FPS is presents over the 8-s window.

Configuration FPS, run 1 / run 2
main 2185dbf92e 9.18 / 9.03
main + #7464 + #7465 20.85 / 22.02
main + all eleven PRs of the series 29.01 / 28.70

#7464 and #7465 make the largest step together: the title's per-frame host imports disappear (see their PRs). With #7464 reduced to its CPU-label wake only, the whole series measured 10.07 / 9.01 FPS against main 9.24 / 9.30 in a separate block of the same session. Combined numbers are not the gain of any single PR. The combined builds are local merges of the published (#7465-#7470, #7472, #7474) and rebased (#7464, #7471, #7473) heads into main 2185dbf92e; the commits in their summary lines are those merges, not pushed. Summary lines, traces and digests: series-evidence.zip.

Checklist

  • Based on pinned main 6447ed1ed7fd; merges cleanly into current main 2185dbf92e (git merge-tree, 2026-10-21); related overlaps are listed above
  • 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 RTX 3070 Laptop, NVIDIA 617.42, Windows 11 Pro build 26300
  • AI-assisted: yes

The published head adds publication metadata only; its complete source tree is identical to the tested snapshot above.

Series index

These are the ten performance topics from the same profiling effort, followed by a separate UI Lab cache-preservation fix. Membership in the series does not imply a dependency.

Item Pull request Required dependency
01 #7464: perf(agc): keep unimported label stores on the CPU #6658
02 #7465: perf(agc): defer small host imports until first GPU use none
03 #7466: perf(agc): validate host imports through their registered owner none
04 #7467: perf(libc): avoid repeated Windows path component scans none
05 #7468: perf(libkernel): find direct-memory aliases through the physical index none
06 #7469: perf(libkernel): find free direct-memory ranges in allocation order none
07 #7470: perf(libc): release exact resident mappings without repeated queries none
08 #7471: perf(libc): collect resident writes directly into the output buffer none
09 #7472: perf(libc): reuse saved direct-memory buffers when unreferenced none
10 #7473: perf(libc): skip write-watch queries for proven clean resident ranges #7471
11 #7474: fix(agc): preserve pipeline caches on immediate guest exit none

Reproduction evidence

Series traces, summary lines, module hashes, focused-test logs and UI contact sheets. Game measurements use the pinned base and source revisions described above; assets contain no game binaries.

Update of 2026-10-21: 7466-evidence.zip (traces, summary lines, trace_digest.py and performance_compare.py output, loaded-module hashes), counters where.json and the probe review-probe.patch with probe_window.py.

Complete the publication checklist and series cross-links for boykopovar#7466.
No source or test changes.
@github-actions

github-actions Bot commented Oct 18, 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 1191 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 1368 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 1395 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 2434 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 4448 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 4449 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 5021 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 5372 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 5925 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6182 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6185 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6187 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6192 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6197 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6209 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6292 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6548 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6615 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 6868 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6918 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/execution/HostImportWindows.cpp
PR 6946 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6947 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 6971 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7201 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
PR 7457 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7604 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 7642 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8484 core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8527 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8658 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 8672 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp
core/libs/prx/libSceAgcDriver/tests/Recorder.cpp
PR 9012 core/libs/prx/libSceAgcDriver/Graphics/src/GuestBufferMemory.cpp

@github-actions github-actions Bot added agc libSceAgc* perf Performance change perf numbers missing perf pull request without a before and after summary line labels Oct 18, 2026
@github-actions

Copy link
Copy Markdown

This pull request is labeled perf, so it needs the summary line of a capture on main and one with the change, from the same title, scene and machine, as the Performance report form asks. Please paste both aps5-summary.jsonl lines, attach the two traces and add the output of tools/trace_digest.py.

@savvaniss

Copy link
Copy Markdown
Contributor

Intel and AMD Windows data: with this PR the 56 tests built from tests/Recorder.cpp and HostImportWindows.cpp pass on an Intel UHD 770 and an AMD RX 9070 XT. Without it, 8 import-settle and host-import tests fail on both.

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 (1002:7550), driver 32.0.31041.1004, with VkCache emptied first. This head 7cea858cf merged into main 07377573f. "Without" means this PR's test files on main 07377573f, with none of its other changes.

Tests, ×3 UHD 770 RX 9070 XT
This head: 56 tests 49 pass, 7 import-watch and import-settle tests skip (no other queue family to settle imports on) 56 of 56 pass
Without 8 fail with (9) a scan under a pending write was kept: the 6 import-settle tests, agc_driver_host_import_lifetime, agc_driver_host_import_mutation_race the same 8 fail with a signaled batch's read still refuses

This is a correctness check only; I measured no speed.

I also ran full CTest with this PR and the 13 other open AGC and shader PRs I tested in the same batch merged together (#7668, #7659, #7504, #7432, #7426, #7413, #7480, #7465, #7464, #7449, #7489, #7673, #7560). Neither GPU showed a failure beyond main's own: the five image-table tests (#6647) and agc_driver_sample_multisample_target (#6957) on the UHD 770, and agc_driver_layered_volume_vertex_no_gpl (#4768) on the RX 9070 XT.

AI-assisted: yes (Claude Code)

@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 19, 2026
@oneandonlydean oneandonlydean self-assigned this Oct 20, 2026
@github-actions github-actions Bot removed the perf numbers missing perf pull request without a before and after summary line label Oct 20, 2026
@Dripl1x

Dripl1x commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

Updated the description: before/after summary lines from the same machine and SuperTuxKart scene (main 6447ed1ed7fd 9.58 / 9.53 FPS, this PR 7cea858cf57e 9.51 / 9.73 FPS, so no FPS claim), trace_digest.py and performance_compare.py output, and probe counters that show where this change saves work in that scene: HostImportSerial runs about 119 times per frame; on main 20.9 of them per frame fall into a full refreshImports at 134 µs each (2.81 ms per frame), with this PR none do, and the call drops from 23.9 to 0.32 µs. Traces, digests and the probe patch are in the evidence release. The head is unchanged and still merges cleanly into current main.

AI-assisted: yes (Claude Code)

@CnRJay CnRJay 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 change is small (35 lines) and the four real Vulkan cases pass on main and on the topic. The description itself says the FPS difference is within the run-to-run spread and that "this PR claims no FPS change", so what is the PR for?

  • Post what it saves: the lookups or lease operations per frame that the registered-owner validation avoids, and the time they took on the queue worker, from SuperTuxKart (the profiling workload). The "what it saves" sentence is cut off in the description before it gives a number. If the saving is below the capture-to-capture noise (9.51-9.73 against 9.53-9.58 fps here), say that this is a cleanup, not a performance change, and drop the perf prefix.
  • The maintainers asked for the same on #7473 and #7464 from this series: a title scene where the changed path is a measurable share of frame time, with tools/trace_digest.py summaries of main and the change. Item 03 of ten needs the same before it can be weighed.
  • "Keep full reconciliation for replaced owners, aliases, joined imports and adjacent ranges that can extend an import run": list the cases the owner shortcut does cover, with a test that fails when the shortcut is applied to one of the excluded cases (a replaced owner at the same address), since the cost of a wrong shortcut is a stale import served.

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* perf Performance change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants