Repository navigation
fix(agc): keep each descriptor set slot in one of a split pipeline library pair - #7722
Conversation
…brary pair With independent sets, a pipeline linked from a pre-rasterization library and a fragment shader library must not leave the same set slot VK_NULL_HANDLE in both libraries' layouts (VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681). Every pipeline with a fragment stage is split when the device has graphics pipeline libraries, and each part's layout held only the sets its own stages bind, so a fragment shader that binds nothing in set 1, or a draw where no stage binds set 0, left that slot null in both parts. A slot neither stage binds now goes to the part that owns it: set 0 to the pre-rasterization layout, set 1 to the fragment layout.
|
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.
|
|
AMD and Intel Windows data: the full CTest suite gives the same results with this PR as on Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release, every execution test built,
The AI-assisted: yes (Claude Code) |
|
Checked the |
What
With graphics pipeline libraries, linking a draw's parts violates
VUID-VkGraphicsPipelineCreateInfo-pLibraries-06681. The validation layer reports it on 111 of the 748^agctests onmain.SplitsSetssplits the layout into two independent sets for every pipeline with a fragment stage when the device hasgraphicsPipelineLibrary.libraryKeysgives each part a mask of only the sets its own stages bind, andLinkPipelineFromLibrariesleaves the other slotsVK_NULL_HANDLEin that part's layout.libraryKeysnow gives a slot that neither stage binds to the part that owns it: set 0 goes to the pre-rasterization layout and set 1 to the fragment layout. The layout keys include the mask, so the cached parts follow. This path runs for any title on a device with pipeline libraries. #5925, #7334 and #7337 saw this error and put it down to an older layer, but it still shows with layer 1.4.341.Tested
Intel i7-8700, Ubuntu 26.04, GCC 15.2, Release, on
main43797ca. I ran every^agctest except display, flip andlds_atomics64(748 tests), each underVK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation(layer 1.4.341) withctest -V, two at a time.mainpLibraries-06681pLibraries-06681The one failure on the RTX 3070 is
agc_driver_bda_device(vkWaitForFences graphics: Vulkan result 2). It fails the same way onmainwith no layer, so it has nothing to do with this change. Apart from 06681, the layer reports the same messages before and after the change. Repro onmain:VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation ./build/tests/agc_driver_alpha_to_coverage_tests 2>&1 | grep -c pLibraries-06681prints 20, and prints 0 with this change.python3 tools/check_conventions.py --base origin/mainpasses.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