You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
agc tests: agc_driver_preparation_scope_settle fails intermittently on main ("the link did not wait for the vertex shader's registration preparation") #6984
agc_driver_preparation_scope_settle fails on some runs of unchanged code. It failed in the push CI for 7fcc15c (the merge of #6452, which doesn't touch registration): Linux run https://github.com/boykopovar/AnyPS5/actions/runs/38988458953, test #563, 1.25 s, llvmpipe on a Ryzen 9 7950X3D runner. The message is the link did not wait for the vertex shader's registration preparation (PreparationScopeSettle.cpp:121). It also failed on the Linux run of #6631 and of #6632; neither changes shader registration, the RegistrationPreparePool, SourceHandleFor/InvocationFor or CreateInterpolantMapping.
Rate on main, measured locally on an RTX 4090 with ctest -R '^agc_driver_preparation_scope_settle$' --repeat until-fail:50, one sequential run plus four parallel runs: 5 failures in 48 attempts (10.4%) on main 4986aca. The same test fails in the same way (about 1.3 s sequential, 1.9 s with four runs in parallel). With #6632 on top it was 5 of 65 and with #6631 and #6632 on top 4 of 111, so those differences are not significant. Plain main already fails at about that rate.
The test holds every registration-preparation pool thread (hardware_concurrency()+2 blocking tasks), registers a vertex shader, which queues behind them, starts sceAgcCreateInterpolantMapping on another thread, sleeps 1 s and requires the link to still be pending. On the failing runs the link finished inside that second. More load would make the wait longer, not shorter, so this looks like an ordering race rather than a timing flake: the vertex shader's preparation sometimes runs before the blocking tasks occupy every pool thread, or is not queued behind them. I haven't confirmed which, or whether the race is in the test setup or in the preparation path itself. The test came in with 11ef8e6.
It matters because it fails full CI on pull requests that have nothing to do with it, and a re-run hides it. Linux only so far; I haven't seen it on Windows.
Does anyone who knows the registration prepare pool want to take it? A fix in the test would be to wait until all pool threads are confirmed busy before registering the vertex shader; if the shader can really be prepared ahead of the queue, that is a bug in the pool instead.
I opened #6988 with a test-fixture fix. The registration task is moved to the front once the link demands it, so the test now waits until the configured preparation workers are actually blocked before registering the shader. The Linux target compiles; I could not run the test on this Xeon because AnyPS5 aborts at startup when required CPU features are missing. The PR records that limitation.
Activity
MarcZX10 commentedon Oct 17, 2026
I opened #6988 with a test-fixture fix. The registration task is moved to the front once the link demands it, so the test now waits until the configured preparation workers are actually blocked before registering the shader. The Linux target compiles; I could not run the test on this Xeon because AnyPS5 aborts at startup when required CPU features are missing. The PR records that limitation.