更新加速结构时验证错误(VK_KHR_ray_tracing)

Validation error when updating acceleration structure (VK_KHR_ray_tracing)

最近,我使用此 tutorial 作为模板在我的 Vulkan 框架中添加了对 VK_KHR_ray_tracing 扩展的支持。不幸的是,它不处理加速结构更新。

我发现重建与首次构建非常相似。唯一的区别是将 VkAccelerationStructureBuildGeometryInfoKHR 上的更新字段设置为 VK_TRUE 并相应地设置 src 和 dst 加速结构。 目前,我对 src 和 dst 使用相同的 VkAccelerationStructureKHR,即它根据规范进行自我更新:

If update is VK_TRUE, the srcAccelerationStructure and dstAccelerationStructure objects must either be the same object or not have any memory aliasing

在我的应用程序中,每帧(动态对象)都会重建 TLAS,这很好用,除了不断出现验证错误:

If update is VK_TRUE, srcAccelerationStructure must have been built before with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR set in VkAccelerationStructureBuildGeometryInfoKHR::flags (https://vulkan.lunarg.com/doc/view/1.2.141.0/windows/1.2-extensions/vkspec.html#VUID-VkAccelerationStructureBuildGeometryInfoKHR-update-03538)

但是,在调试期间,VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR 标志在每个 vkCmdBuildAccelerationStructureKHR 调用中设置。

我最好的猜测是,这是 Nvidia (457.33) 的 vulkan beta 驱动程序中的一个错误,但也可能存在其他未被验证层捕获的错误。

有没有人使用过 VK_KHR_ray_tracing 扩展并设法使加速结构更新工作而没有任何验证错误?

编辑: 链接的教程还有一个带有动画和 TLAS 更新的示例,请参阅 here。当 运行 此示例时,出现相同的验证错误。

确保使用最新的 Vulkan SDK 版本或自行构建层。上述验证层消息可能是由 this bug in the validation layers 引起的,而不是由您的应用程序引起的。 10月发布的SDK 1.2.154已修复。