KhronosGroup / KhronosGroup/Vulkan-ValidationLayers

gpuav: Multiple issues when buffer device addresses validation aborts

Open
#9,558 0 comments 0 reactions 0 assignees View on GitHub
Bug GPU-AV
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:

![Image](https://github.com/user-attachments/assets/399b7692-e2fc-40c5-b9b5-f4cfdfa604e3)

Contributor guide

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.