KhronosGroup / KhronosGroup/Vulkan-ValidationLayers
gpuav: Multiple issues when buffer device addresses validation aborts
- Dominant language
- C++
- Stars
- 1k
- Forks
- 504
- Avg merge
- 11h 35m
- Merged PRs (30d)
- 224
Description
Doom Eternal, Win 11, AMD Radeon(TM) 780M
When buffer device addresses validation aborts due to "too many" buffer device addresses to handle (Here for testing purposes I was at a max of 1000), it leads to 1) self validation error and 2) an infinite wait
Self validation error:
- - -
UNASSIGNED-GPU-Assisted-Validation(ERROR / SPEC): msgNum: -359834619 - Validation Error: [ UNASSIGNED-GPU-Assisted-Validation ] | MessageID = 0xea8d5c05 | vkQueueSubmit(): pSubmits[0] Internal Error, GPU-AV is being disabled. Details:
Number of buffer device addresses ranges in use (1004) is greater than khronos_validation.gpuav_max_buffer_device_addresses (1000). Truncating buffer device address table could result in invalid validation.
VUID-vkCmdDrawIndexed-None-08600(ERROR / SPEC): msgNum: 941228658 - Self Validation Error: [ VUID-vkCmdDrawIndexed-None-08600 ] Objects: VkPipeline 0xa43c5f0000003f0c, VkPipelineLayout 0xc036880000003cfe | MessageID = 0x381a0272
vkCmdDrawIndexed(): The VkPipeline 0xa43c5f0000003f0c (created with VkPipelineLayout 0xc036880000003cfe) statically uses descriptor set 31, but all sets 0 to 31 are not compatible with the pipeline layout bound with vkCmdBindDescriptorSets (VkPipelineLayout 0xc036880000003cfe)
The set (31) is out of bounds for the number of sets bound (3)
The Vulkan spec states: For each set n that is statically used by a bound shader, a descriptor set must have been bound to n at the same pipeline bind point, with a VkPipelineLayout that is compatible for set n, with the VkPipelineLayout used to create the current VkPipeline or the VkDescriptorSetLayout array used to create the current VkShaderEXT , as described in Pipeline Layout Compatibility (https://docs.vulkan.org/spec/latest/chapters/drawing.html#VUID-vkCmdDrawIndexed-None-08600)
Objects: 2
[0] 0xa43c5f0000003f0c, type: 19, name: NULL
[1] 0xc036880000003cfe, type: 17, name: NULL
- - -
=> Buffer address validation has aborted, but pipelines (and/or pipeline layouts?) have already been modified and I think GPU-AV does not hand back original objects after aborting.
And infinite wait in condition variable, I think we are still waiting for GPU-AV even though it aborted:

Contributor guide
Research direction
No source file or test is named. Start by reproducing the GPU-AV buffer-device-address limit with the reported Doom Eternal setup or an equivalent case, then trace the abort path and its condition-variable wait. Done means the abort produces no self-validation error and does not wait indefinitely.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- devtools, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100