Repository navigation
fix(agc): serialize pipeline cache snapshots - #4795
oneandonlydean merged 1 commit into
Conversation
|
Windows test (MinGW GCC 15.2, Release, Windows 10, RTX 4080 SUPER). Built on current main
Not tested: no game run. The batch was built once, not per PR; it had no failures, so no bisect was needed. AI-assisted (Claude Code). |
cecaa48 to
dfff45d
Compare
|
Rebased onto current |
51c9e5b to
1eeb2c6
Compare
|
Tested on an Intel Arc 140T on Windows, where Setup
Results
I did not symbolize the crash frames; the timing and the AI-assisted: yes (Claude). |
|
Rebase handoff — rebased onto current Verified on Linux (CachyOS, kernel 7.2.9, GCC 16.2.1, Ninja, Release,
To pick it up: Head is |
|
I checked the current head |
1eeb2c6 to
87d831f
Compare
|
Thanks for preparing and validating the rebase handoff. I picked up the original topic and rebased it directly onto the newer upstream |
87d831f to
4307e3c
Compare
|
Rebased onto main to resolve the conflict in |
|
Fresh Linux validation for the current PR tree: published head |
|
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.
|
What
Serialize the periodic persistent pipeline-cache snapshot against pipeline creation that uses that cache. Pipeline creation paths take shared locks, so they can continue concurrently with each other.
PipelineCache::save()takes the exclusive lock only around its twovkGetPipelineCacheDatacalls, then releases it before hashing or writing the cache file.The guard covers graphics, compute, pipeline-library and asynchronous LTO creation paths using the persistent cache. Capture replay uses a separate temporary cache and remains unchanged. A regression checks that snapshot access cannot acquire while a pipeline-use lock is held and succeeds after that lock is released.
This is an application-side workaround for the Intel driver crash reported in issue #4781. The Vulkan specification describes pipeline-cache use by pipeline creation as internally synchronized across threads; this PR does not claim that the crash is a Vulkan valid-usage violation. See the Vulkan pipeline cache specification and
vkGetPipelineCacheDatareference.Tested
libSceAgcDriverandagc_driver_graphics_testspassed on based379bfd014193cb3dc7b1e559c374b40a6dcdf48;agc_driver_graphicspassed 1/1.main30f961266ade83b41d5c9de7dec1393e7fcecfb7. On the rebased head, configured Linux Release withBUILD_TESTING=ONand SPIR-V tools disabled; Ninja builtagc_driver_graphics_testssuccessfully (706/706 steps).ctest --test-dir /tmp/AnyPS5-4795-rebased-build -R '^agc_driver_graphics$' --output-on-failure: passed (1/1, 7.99 s).python3 tools/check_conventions.py --base upstream/main --head HEADandgit diff --check upstream/main...HEADpassed on the rebased head.Checklist
main; no open PR implements persistent pipeline-cache snapshot serializationNotImplemented_nid_no_patch