Repository navigation
fix(agc): keep the pipeline library extensions enabled under APS5_NO_GPL - #7828
oneandonlydean merged 1 commit into
Conversation
APS5_NO_GPL opened a device without VK_EXT_graphics_pipeline_library and the five extensions that go with it. The AMD Windows driver shares its on-disk pipeline cache between devices with and without those extensions, so a compute pipeline compiled on one kind of device and loaded on the other ran with the wrong descriptor layout. The startup f32 flush probe (boykopovar#6503) runs the same compute pipelines on every device. In a parallel test run, every APS5_NO_GPL test therefore page-faulted at 0xbeefdeadbeef, an address read from the probe's own 0xdeadbeef fill. Each fault reset the GPU, and twice the reset hung the machine. The device now enables the extensions and their features whenever the GPU supports them. APS5_NO_GPL only turns off their use, so every device on a GPU builds the same pipelines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
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.
|
|
An RDNA 2 run, since the PR has RDNA 4 and Intel runs only. RX 6700 XT (gfx1031), AMD's Windows driver 32.0.21045.5002, Windows 11 26200, Release, Each sequence runs one renamed copy of the test executable, so AMD's per-executable pipeline cache starts empty and is shared only by the steps of that sequence. "on" is the default device, "off" is
On
Full |
boykopovar#7351 kept robustBufferAccess2 off on AMD's proprietary driver because enabling it broke agc_driver_layered_volume_draw, agc_driver_layered_volume_vertex and agc_driver_subvector_loop on an RX 6700 XT. With boykopovar#7623 and boykopovar#7828 on main, those tests pass with the feature on, in either library-mode order. This reverts 48b394d and keeps the record of boykopovar#7623's empty-mask test in the s_subvector_loop debt entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
enabling it broke agc_driver_layered_volume_draw, agc_driver_layered_volume_vertex and agc_driver_subvector_loop on an RX 6700 XT. With boykopovar#7623 and boykopovar#7828 on main, those tests pass with the feature on, in either library-mode order. This reverts 48b394d and keeps the record of boykopovar#7623's empty-mask test in the s_subvector_loop debt entry. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
enabling it broke agc_driver_layered_volume_draw, agc_driver_layered_volume_vertex and agc_driver_subvector_loop on an RX 6700 XT. With boykopovar#7623 and boykopovar#7828 on main, those tests pass with the feature on, in either library-mode order. This reverts 48b394d and keeps the record of boykopovar#7623's empty-mask test in the s_subvector_loop debt entry. Co-Authored-By: Claude <noreply@anthropic.com>
What
Fixes the AMD GPU faults in
APS5_NO_GPLtests (#7809). The cause is not in the f32 flush probe from #6503. It is the device thatAPS5_NO_GPLopens.APS5_NO_GPL=1opened a device withoutVK_EXT_graphics_pipeline_libraryand the five extensions that go with it. The AMD Windows driver keeps one on-disk pipeline cache (%LOCALAPPDATA%\AMD\VkCache) for both kinds of device. A compute pipeline compiled on one kind and loaded from the cache on the other runs with the wrong descriptor layout:0xdeadbeeffill.0xbeefdeadbeef.Since #6503, every device runs the same probe pipelines when it opens. In a parallel suite, the libraries-on tests fill the cache first, so the three AMD tests that set
APS5_NO_GPLand open a device fault every run. Each fault is a TDR. On my machine the driver twice failed to recover from one, and the PC needed a hard reset.Now the device enables the extensions and their features whenever the GPU supports them.
APS5_NO_GPLonly turns off their use (graphicsPipelineLibrary), so every device on a GPU builds the same pipelines. The draws of aAPS5_NO_GPLdevice still use render passes and whole pipelines.Other switches also change the extension set, for example
APS5_NO_TIMELINEandAPS5_NO_HOST_IMPORT. Their tests pass on the RX 9070 XT, so this PR leaves them alone.Tested
Windows 11 Pro 26300, WinLibs GCC 15.2.0, Release. RX 9070 XT (driver 32.0.31041.1004) and UHD 770 (driver 32.0.101.7088).
agc_driver_draw_cache_reuse_testson the RX 9070 XT, starting each sequence from an empty AMD driver cache:read invalid at 0xbeefdeadb000)Run alone with a warm cache, the
APS5_NO_GPLtest passes on main 4 times out of 4. Only a pipeline cached by the other kind of device makes it fault.Full
ctest --parallel 4,ANYPS5_GPUset, AMD driver cache emptied first:APS5_NO_GPLtest skipped afterdevice-fault ... 0xbeefdeadb000; 2 to 4 groups of tests stalled 10–24 s waiting for GPU resets; the same run on 7f596df, and on 6b8228b with #7682, hung the machineagc_trimmed_import(below); nodevice-fault, nono usable Vulkan device, no stalled testsagc_trimmed_importfails under parallel load on main too, with the same message (after an unmap of 1440 KiB ... served from the import that pinned the old ones). Run alone on this PR it passes 10 times out of 10. The first run of this fix on 52f8222 passed all 1623 tests on the RX 9070 XT.The two Windows freezes, with the event log and the full ctest output, are in #7809.
Validation: Khronos validation layer 1.4.363 (Vulkan SDK),
VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation,ANYPS5_REQUIRE_VULKAN=1,ANYPS5_NO_SHADER_CACHE=1,ctest -R <tests> -V, onmaincded26c68and on this PR merged into it, on both GPUs (AMD driver cache emptied first). Neither log haswas not found but was requested by env var VK_INSTANCE_LAYERS. Tests: the 12 pipeline-library, draw-cache-reuse, stencil-replay and layered-volume tests. NoVUID-error on either side. The only messages are warnings, the same on both sides (Undefined-Value-ShaderOutputNotConsumed,...-DynamicRendering,WARNING-VkImageSubresourceRange-layerCount-compatibility). On the RX 9070 XT,mainleaves out the threeAPS5_NO_GPLtests (#7809). With this PR they run there and log the same warnings as on the UHD 770'smain.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code