Skip to content

perf(shader): skip log2 correction outside the near-one range - #10336

Merged
oneandonlydean merged 2 commits into
boykopovar:mainfrom
Filip722:submit/log2-20261023
Oct 28, 2026
Merged

oneandonlydean merged 2 commits into
boykopovar:mainfrom
Filip722:submit/log2-20261023

Conversation

@Filip722

@Filip722 Filip722 commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

What

The log2 lowering evaluates its eight-term near-one correction for every input, including inputs outside the range where that correction can be selected. This adds unnecessary shader work to the startup/menu rendering in God of War Sons of Sparta (PPSA28997).

  • Evaluate the existing correction only when abs(x - 1) <= 1/8, reusing the structured conditional-emission helper.
  • Preserve the native log2, correction arithmetic, inclusive range and four-ULP selection threshold from 580ac08.
  • Extend the existing GPU test with the immediately adjacent f32 values inside and outside both range boundaries. Expected values were computed from 100-digit logarithms, using the existing six-/twelve-ULP accuracy allowances.

This is a small optimization and does not resolve the full reported 11 FPS problem. No system-library exports are added.

The former #8612 overlap is merged. The rebase retains its ExactSub/ExactMul helpers.

Tested

Cooled matched repeats on 2026-10-25 UTC: main 2742004ed28f versus exact PR head 5d0cddb50e2c. Four main controls and three independent PR repeats; code and original patch are unchanged. The other performance PR is not included.

The earlier mini-PC setup was thermally stressed, reaching 99–101°C on the GPU, and the captures lacked continuous focus verification. Those thermal conditions limited confidence in the earlier comparison. After a cooling upgrade, a six-minute baseline preflight found no thermal/PROCHOT flags in 1,441 samples. The new valid repeat cohort peaks at GPU 81°C and CPU package Tctl 80.875°C, with zero sampled thermal flags and 2599 MHz GPU clock throughout its timed windows. The old captures did not record firmware throttle flags, so thermal throttling is not a proven cause of the old stalls.

Same PPSA28997 version 01.008.001 startup menu, converted executable, copied save seed and per-commit warmed shader/Mesa caches. Radeon 760M (RADV PHOENIX), Mesa 25.0.7-2+deb13u1, Debian 13 / Linux 7.2.10-x64v3-xanmod1, GCC 15.2.0. Wayland window 1152×648, guest 1920×1080. Each run starts with GPU/package ≤53°C for 10 seconds. Cross at 45 seconds; trace window 90:30 lets startup activity settle. Existing GPU power mode high was left unchanged. No SQTT/RGP, hardware profiling lock, extra profile/trace switch, validation or timing interception layer was used during measurement; output used a PTY.

Window activation and geometry changes were monitored continuously. The ten valid captures remained active at 1152×648 throughout their measurement windows; all pre/post scene images were inspected locally and show the same menu. Two attempts failed the predeclared focus rule and remain disclosed: S2 p99 37.586 ms lost focus and was replaced by S2r; A4 p99 39.402 ms had a 123 ms focus interruption and was replaced by A4r. Both were excluded regardless of favorable timings. Fixed accepted order: A1, L1, S1, A2, S2r, L2, A3, L3, S3, A4r. All other captures were retained.

Thermal metrics were sampled every 250 ms with a 96°C process guard. Package/current-limit flags and background GPU activity are retained in the audit. Runtime-library hashes match the exact builds; every summary is clean with no dropped events; all owned processes exited.

Run Commit FPS Frame p50 ms Frame p99 ms Max frame ms GPU ms/present
A1 2742004ed28f 26.91 37.169 38.390 40.021 33.566
L1 5d0cddb50e2c 27.28 36.527 38.583 39.506 33.120
A2 2742004ed28f 26.72 37.367 39.162 41.502 33.592
L2 5d0cddb50e2c 27.38 36.424 38.465 38.912 33.071
A3 2742004ed28f 26.73 37.357 39.055 41.336 33.603
L3 5d0cddb50e2c 27.41 36.405 37.850 39.979 33.126
A4r 2742004ed28f 26.65 37.451 39.435 40.918 33.608

Present-weighted mean GPU time: 33.5922 → 33.1057 ms/present, 0.4865 ms (1.45%) lower. PR p99 range: 37.850–38.583 ms; main controls: 38.390–39.435 ms. No frame over 50 ms occurred in the valid trace intervals. The earlier 60.851/67.350 ms p99 outliers did not reproduce.

The earlier same-head runtime-library builds and all six focused correctness fixtures passed independently on main and each PR with Vulkan required, shader cache disabled and Khronos validation actually loaded: no missing-layer warnings, skips or VUID errors. Conventions and whitespace checks pass. No production change was indicated by the repeat investigation. These results cover this menu on one GPU; they do not establish broader gameplay, cross-title or console behavior. Cooling, focus control and settling time changed together, so the repeats do not isolate the historical stall's cause.

Original traces, digests and results remain unchanged. The old A2 post-capture image selected another active window, was discarded, and is not claimed as scene verification. The original L1/S2 slow frames show long CPU-side packet-processing wall spans; that locates the delay on the host side but does not distinguish descheduling, waits or another cause.

Download the cooled-repeat traces, digests, all included/excluded summaries, thermal/focus telemetry, original-outlier analysis, thermal preflight and same-head correctness evidence. No game files, saves, screenshots, binaries or shader caches are included.

Full current summary lines, in capture order:

{"commit":"2742004ed28f","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3060,"ms":30029.635},"presents":808,"frame_ms":{"p50":37.169,"p90":37.724,"p99":38.39,"max":40.021},"gpu_busy_ms_per_present":33.566,"worker_busy_pct":{"queue worker 0x0":70.919},"top_phases_ms_per_frame":{"Driver.Packet":26.08,"Driver.Packet.draw":23.134,"Driver.Draw":23.101,"Driver.Draw.draw_enqueued":21.134,"Recorder.Sync":20.038,"VideoOut.Flip":9.956,"Driver.Present":9.909,"VideoOut.Flip.present":9.904},"trace_dropped":false,"trace":"aps5-trace-2742004ed28f-34884.json.gz"}
{"commit":"5d0cddb50e2c","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3090,"ms":30021.589},"presents":819,"frame_ms":{"p50":36.527,"p90":37.432,"p99":38.583,"max":39.506},"gpu_busy_ms_per_present":33.12,"worker_busy_pct":{"queue worker 0x0":72.435},"top_phases_ms_per_frame":{"Driver.Packet":26.282,"Driver.Packet.draw":23.302,"Driver.Draw":23.269,"Driver.Draw.draw_enqueued":21.221,"Recorder.Sync":20.09,"VideoOut.Flip":9.58,"Driver.Present":9.535,"VideoOut.Flip.present":9.53},"trace_dropped":false,"trace":"aps5-trace-5d0cddb50e2c-36155.json.gz"}
{"commit":"2742004ed28f","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3040,"ms":30018.879},"presents":802,"frame_ms":{"p50":37.367,"p90":38.125,"p99":39.162,"max":41.502},"gpu_busy_ms_per_present":33.592,"worker_busy_pct":{"queue worker 0x0":70.958},"top_phases_ms_per_frame":{"Driver.Packet":26.274,"Driver.Packet.draw":23.28,"Driver.Draw":23.246,"Driver.Draw.draw_enqueued":21.274,"Recorder.Sync":20.114,"VideoOut.Flip":10.02,"Driver.Present":9.972,"VideoOut.Flip.present":9.968},"trace_dropped":false,"trace":"aps5-trace-2742004ed28f-36998.json.gz"}
{"commit":"5d0cddb50e2c","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3089,"ms":30025.338},"presents":822,"frame_ms":{"p50":36.424,"p90":37.247,"p99":38.465,"max":38.912},"gpu_busy_ms_per_present":33.071,"worker_busy_pct":{"queue worker 0x0":72.544},"top_phases_ms_per_frame":{"Driver.Packet":26.214,"Driver.Packet.draw":23.219,"Driver.Draw":23.187,"Driver.Draw.draw_enqueued":21.216,"Recorder.Sync":19.981,"VideoOut.Flip":9.534,"Driver.Present":9.484,"VideoOut.Flip.present":9.48},"trace_dropped":false,"trace":"aps5-trace-5d0cddb50e2c-39033.json.gz"}
{"commit":"2742004ed28f","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3035,"ms":30037.407},"presents":803,"frame_ms":{"p50":37.357,"p90":38.052,"p99":39.055,"max":41.336},"gpu_busy_ms_per_present":33.603,"worker_busy_pct":{"queue worker 0x0":70.956},"top_phases_ms_per_frame":{"Driver.Packet":26.266,"Driver.Packet.draw":23.286,"Driver.Draw":23.252,"Driver.Draw.draw_enqueued":21.332,"Recorder.Sync":20.192,"VideoOut.Flip":9.992,"Driver.Present":9.947,"VideoOut.Flip.present":9.942},"trace_dropped":false,"trace":"aps5-trace-2742004ed28f-39498.json.gz"}
{"commit":"5d0cddb50e2c","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3092,"ms":30020.422},"presents":823,"frame_ms":{"p50":36.405,"p90":37.123,"p99":37.85,"max":39.979},"gpu_busy_ms_per_present":33.126,"worker_busy_pct":{"queue worker 0x0":72.498},"top_phases_ms_per_frame":{"Driver.Packet":26.162,"Driver.Packet.draw":23.185,"Driver.Draw":23.151,"Driver.Draw.draw_enqueued":21.195,"Recorder.Sync":20.004,"VideoOut.Flip":9.52,"Driver.Present":9.472,"VideoOut.Flip.present":9.467},"trace_dropped":false,"trace":"aps5-trace-5d0cddb50e2c-39937.json.gz"}
{"commit":"2742004ed28f","dirty":false,"env":{"APS5_NO_PAD_INPUT":"1","APS5_PAD_INPUT_FILE":"<path>","APS5_TRACE_DIR":"<path>","APS5_TRACE_SECONDS":"90:30"},"gpu":"AMD Radeon 760M (RADV PHOENIX)","driver":"radv Mesa 25.0.7-2+deb13u1","os":"Linux 7.2.12-x64v3-xanmod1","cpu":"AMD Ryzen 5 7640HS w/ Radeon 760M Graphics","cpu_threads":12,"memory_mib":23820,"title_id":"PPSA28997","title":"God of War Sons of Sparta","content_version":"01.008.001","resolution":"1920x1080","window":{"spec":"seconds 90:30","first_present":3049,"ms":30023.519},"presents":800,"frame_ms":{"p50":37.451,"p90":38.285,"p99":39.435,"max":40.918},"gpu_busy_ms_per_present":33.608,"worker_busy_pct":{"queue worker 0x0":70.929},"top_phases_ms_per_frame":{"Driver.Packet":26.343,"Driver.Packet.draw":23.381,"Driver.Draw":23.348,"Driver.Draw.draw_enqueued":21.372,"Recorder.Sync":20.271,"VideoOut.Flip":10.057,"Driver.Present":10.013,"VideoOut.Flip.present":10.007},"trace_dropped":false,"trace":"aps5-trace-2742004ed28f-41776.json.gz"}

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: AMD Radeon 760M (RADV PHOENIX), Mesa 25.0.7-2+deb13u1, Debian 13 / Linux 7.2.10-x64v3-xanmod1; paired correctness validation on main 2742004 and PR 5d0cddb
  • AI-assisted: yes

@github-actions github-actions Bot added perf Performance change shader core/shader agc libSceAgc* labels Oct 23, 2026
@github-actions

github-actions Bot commented Oct 23, 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 5021 core/shader/recompiler/SpirvBackend/src/SpirvAlu/SpirvAluEmitterMath.cpp
PR 7410 core/shader/recompiler/SpirvBackend/src/SpirvAlu/SpirvAluEmitterMath.cpp
PR 11351 core/shader/recompiler/SpirvBackend/src/SpirvAlu/SpirvAluEmitterMath.cpp

@oneandonlydean oneandonlydean self-assigned this Oct 23, 2026
Evaluate the existing accuracy correction only inside its established input range. Keep the native log2 result and all correction thresholds and arithmetic unchanged, and cover inputs adjacent to both range boundaries in the existing GPU test.
@Filip722
Filip722 force-pushed the submit/log2-20261023 branch from 76da856 to d7bb63b Compare October 23, 2026 22:46
@Filip722

Copy link
Copy Markdown
Contributor Author

Rebased onto main 11b175a6b956; new head d7bb63bb3b95. The patch is unchanged by the rebase. I reran the before/after comparison on these exact commits, with this PR alone.

Run Commit Presents FPS Frame p50 (ms) Frame p99 (ms) GPU (ms/present)
A1 (main) 11b175a6b956 646 26.89 37.145 39.101 33.536
L1 (PR) d7bb63bb3b95 668 27.79 35.904 37.690 33.098
L2 (PR) d7bb63bb3b95 664 27.65 35.990 38.759 33.042
A2 (main) 11b175a6b956 642 26.73 37.349 39.248 33.619

Present-weighted mean GPU time: 33.5774 → 33.0701 ms/present, 0.5073 ms (1.51%) lower. Main repeat span is 0.083 ms; PR repeat span is 0.056 ms. Both PR captures are below both main captures. This is a small sample of the startup menu on one GPU; no gameplay, cross-title or title-loading speedup is claimed.

Both runtime builds and all six paired correctness/GPU fixtures passed with Vulkan required, shader caching disabled and Khronos validation actually loaded. No skipped tests, missing-layer warnings or VUID errors. Same warmed menu scene, executable, save seed and settings; no dropped trace events. Non-display GPU activity was observed and retained in the evidence: A1: 9.973 GPU ms over the full 24-second capture (0.015438 ms/present), L1: 9.554 GPU ms over the full 24-second capture (0.014302 ms/present), L2: 9.737 GPU ms over the full 24-second capture (0.014664 ms/present), A2: 9.872 GPU ms over the full 24-second capture (0.015376 ms/present). This background activity limits attribution of small differences.

The PR description contains the methodology and full summary lines. Download fresh traces, digests, validation logs and the exact tested patch.

@Filip722

Copy link
Copy Markdown
Contributor Author

Manually checked the shared-file patches flagged by the overlap bot: #4072 adds packed-f16 FMA, #5021 changes lane shuffle and NaN handling, and #7410 adds half-wave exchange. None changes EmitFPLog2 or its near-one correction. No overlapping implementation or dependency found; Depends on: none remains accurate. No code or performance evidence changed. AI-assisted review.

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

Reviewed exact head d7bb63bb3b951df45294c34cc0c63028577736f9. EmitFPLog2 still computes the native log2 result and the same inclusive abs(x - 1) <= 1/8 gate; Log2SeriesNearOne, the four-ULP comparison and the selected results are unchanged, but series work is emitted only in the near branch. The four added boundary inputs cover the adjacent f32 values on both sides of the lower and upper cutoffs.

I manually checked the overlapping math-emitter hunks from #4072, #5021 and #7410; none changes EmitFPLog2 or the near-one correction. Conventions and git diff --check pass. The author reports all six paired Linux/RADV runtime fixtures passing with Khronos validation and provides four fresh traces. The report limits its 1.51% mean GPU result to the tested startup menu on one GPU and does not claim broad gameplay gains. Product jobs are skipped by policy, and I could not rerun the Vulkan test locally because this environment has no GPU device. I found no blocker.

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

Follow-up to my earlier approval: after refreshing upstream/main, this branch's merge base is 11b175a6b956, with 7,168 current-main commits since it. CONTRIBUTING.md asks contributors to keep branches up to date with main. The GPU fixtures and performance comparison in the PR were run on that older base, while current hosted product tests are skipped. Please update to current main and rerun the focused log2 boundary/runtime tests with Khronos validation, then refresh the paired performance comparison on the same current base. The reported result is carefully scoped, but it does not validate the current integration. I will revisit approval after current-base evidence is available.

@Filip722

Copy link
Copy Markdown
Contributor Author

@MarcZX10 updated to main 2742004ed28f; new head 5d0cddb50e2c. This is a normal merge into the existing PR branch, preserving published history. The original patch's added/removed lines are unchanged, and the other performance PR is not included.

The full runtime-library builds and all six focused correctness fixtures pass independently on that unmodified main and this exact head: IR rewrite/differential, SPIR-V module, log-near-one, VOP1 floating-point unary, runtime buffer descriptors and scalar wide loads. Tests ran on AMD Radeon 760M / RADV Mesa 25.0.7 with ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1 and Khronos validation actually loaded. No skips, missing-layer warnings or VUID errors on either arm. Conventions and whitespace checks pass.

Current-base correctness evidence includes verbose logs, build logs, result manifests, the exact patches and validation runner.

The performance-comparison refresh is deferred at the author's request. No performance tests were run today; the description now explicitly labels the older figures and traces as historical and says they do not measure this updated head. The current-base integration/correctness portion is addressed; the performance portion remains pending. AI-assisted update and validation.

@Filip722

Copy link
Copy Markdown
Contributor Author

@MarcZX10 the performance refresh is complete on the same current base used for the correctness checks: main 2742004ed28f versus exact PR head 5d0cddb50e2c, with this PR alone.

Run Commit Presents FPS Frame p50 (ms) Frame p99 (ms) GPU (ms/present)
A1 (main) 2742004ed28f 636 26.48 37.456 42.058 33.660
L1 (PR) 5d0cddb50e2c 608 25.31 37.851 60.851 33.086
L2 (PR) 5d0cddb50e2c 647 26.93 36.576 42.573 33.069
A2 (main) 2742004ed28f 626 26.06 37.836 48.405 33.604

Present-weighted mean GPU time is 33.6322 → 33.0772 ms/present, 0.5550 ms (1.65%) lower. Both PR repeats are below both main controls. This does not establish an FPS or stutter improvement: frame-rate and p99 results were inconsistent, including the worse PR run retained above.

Same warmed startup menu, executable, save seed, window and settings; main/PR/PR/main order. Runtime hashes and commit provenance match; no dirty build or dropped events. No hardware profiling locks or SQTT/RGP were used. All numeric captures are retained, including observed background GPU activity and temperature peaks in the audit. The menu was confirmed before every trace and afterward in six of seven; A2's post-capture image selected another active window and was discarded. Physical keys/mouse were ignored and scripted input ended before the trace window. This is a small sample on one Radeon 760M, with no broader gameplay or loading-time claim.

Fresh traces, digests, summary lines, audit data and same-base correctness evidence. The PR description now contains these current results instead of the deferred/historical comparison. The current-base correctness checks remain green, and the requested performance evidence is now available for another look. AI-assisted validation and reporting.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

@Filip722 the refreshed tables retain worse frame-time tails: #10336 L1 p99 is 60.851 ms versus 42.058/48.405 ms controls, and #10337 S2 is 67.350 ms versus 48.405/43.595 ms controls. The lower mean GPU time is a separate result. Before we clear the performance/no-regression bar, please investigate whether these repeats reflect capture variance or a regression, or add matched repeats with confirmed scene/window focus. Keep the original traces and the discarded A2 post-capture screenshot qualification. This does not assume the PR caused the outliers or request a stutter claim.

@Filip722

Copy link
Copy Markdown
Contributor Author

@oneandonlydean @MarcZX10 completed the requested matched repeats on unchanged head 5d0cddb50e2c against main 2742004ed28f after upgrading the mini-PC cooling and tightening focus controls.

The earlier setup reached 99–101°C on the GPU and was thermally stressed; those conditions limited confidence in the old timing tails. The new valid cohort peaks at 81°C GPU / 80.875°C CPU package, with zero sampled thermal/PROCHOT flags. The old runs lacked firmware throttle flags, so I am not claiming their stalls were proven to be thermal throttling.

Run Commit FPS Frame p50 ms Frame p99 ms Max frame ms GPU ms/present
A1 2742004ed28f 26.91 37.169 38.390 40.021 33.566
L1 5d0cddb50e2c 27.28 36.527 38.583 39.506 33.120
A2 2742004ed28f 26.72 37.367 39.162 41.502 33.592
L2 5d0cddb50e2c 27.38 36.424 38.465 38.912 33.071
A3 2742004ed28f 26.73 37.357 39.055 41.336 33.603
L3 5d0cddb50e2c 27.41 36.405 37.850 39.979 33.126
A4r 2742004ed28f 26.65 37.451 39.435 40.918 33.608

Present-weighted mean GPU time: 33.5922 → 33.1057 ms/present, 0.4865 ms (1.45%) lower. PR p99 range: 37.850–38.583 ms; main controls: 38.390–39.435 ms. No frame over 50 ms occurred in the valid trace intervals. The earlier 60.851/67.350 ms p99 outliers did not reproduce.

All valid timed windows have continuous active-window/size confirmation, locally verified matching pre/post menu images, matching runtime hashes, clean summaries and no dropped trace events. Two attempts failed the strict focus rule: S2 (p99 37.586 ms) and A4 (p99 39.402 ms); they remain in the evidence, with labeled replacements S2r/A4r. No numeric outlier was silently removed.

The original traces and discarded A2 post-capture image qualification remain preserved. Cooling, focus control and settling time changed together, so the old cause is still unproven. The requested tail-regression pattern did not reproduce in these matched runs; no production change was indicated. Same-head correctness and conventions checks remain passing.

Download the cooled-repeat traces, digests, all included/excluded summaries, thermal/focus telemetry, original-outlier analysis, thermal preflight and same-head correctness evidence. No game files, saves, screenshots, binaries or shader caches are included.

The PR description now contains the cooled repeat results and full exact-head summary lines. AI-assisted investigation, validation and reporting.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks @Filip722, the cooled matched repeats answer what I asked. On 5d0cddb50e the PR's p99 (37.85–38.58 ms) is at or below main's (38.39–39.44 ms), GPU time per present is about 1.45% lower, and the 60/67 ms tails didn't come back. I'm treating this as one machine and one scene, not a general stutter claim, and the old tails' cause stays open as you say. Next step is CI on the current head.

@Filip722

Copy link
Copy Markdown
Contributor Author

@MarcZX10, could you re-review unchanged head 5d0cddb50e2c? The requested main refresh and paired Vulkan validation are in the current-base validation update. The matched repeats use that exact head against main 2742004ed28f; @oneandonlydean confirmed they answer the tail-latency concern. The 1.45% lower GPU time remains limited to the tested startup menu on one Radeon 760M.

@oneandonlydean, could you trigger full Linux/Windows CI for this head, or link the run if it is already queued? The PR's visible product-build checks are skipped; Filip722 has read-only access upstream. Per CONTRIBUTING.md:

gh workflow run build.yml --repo boykopovar/AnyPS5 --ref main --field pr=10336

AI-assisted follow-up.

@oneandonlydean
oneandonlydean merged commit 899b2d3 into boykopovar:main Oct 28, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agc libSceAgc* perf Performance change shader core/shader

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants