微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Vulkan 中调用 CreateShaderModule() 后找不到“stateless_validation.h”

如何解决在 Vulkan 中调用 CreateShaderModule() 后找不到“stateless_validation.h”

我尝试设置 Vulkan 验证层,在运行 vulkaninfoSDK.exe 后确实有多个验证层,但我在 VS Code 中收到一条消息“无法打开 'stateless_validation.h':无法读取文件 'c:\ j\msdk\build\vulkan-validationlayers\repo\layers\stateless_validation.h”。

这条消息对我来说很奇怪,因为我的 c 驱动器上什至没有文件夹“j”,而且实际上在完全不同的驱动器上安装了 Vulkan。我正在运行 Windows,MSVC 编译器,已经安装了 LunarG 的最新 Vulkan SDK,并按照此处的建议设置了环境变量“VK_LAYER_PATH”:https://vulkan.lunarg.com/doc/view/1.2.131.1/windows/layer_configuration.html 但确实,我安装 SDK 的文件夹不包含一个“stateless_validation.h”。

我的调用堆栈是 VkLayer_khronos_validation.dll 中的 3 个函数:“StatelessValidation::validate_struct_pnext”,然后是“StatelessValidation::PreCallValidateCreateShaderModule”,然后是从我自己的函数调用的“vulkan_layer_chassis::CreateShaderModule”。

我注意到文件“stateless_validation.h”在 Github 存储库中:https://github.com/KhronosGroup/Vulkan-ValidationLayers 但我认为下载 SDK 就足够了。

我该如何解决这个问题?

解决方法

该错误似乎是在实际验证层源代码本身内部引发的异常,并且是由于我传递的 VkShaderModuleCreateInfo 结构实例的 pNext 成员引起的vkCreateShaderModule 未初始化。

只需将其设置为 nullptr 即可解决我的问题。似乎是因为异常是从 dll 本身内部抛出的,所以我的异常处理代码没有捕获它,这让我很困惑。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。