4

我目前正试图强制 Visual Studio 使用 Vulkan 的调试层 dll,但不知何故它无法加载库。我的步骤是:

  1. 克隆https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/BUILD.md
  2. 为 Visual Studio 2015 构建(发布和调试)
  3. 在我的 Vulkan 应用程序中,我将其放入环境变量(对于 x64 - 调试)(项目设置 - > 调试):VK_LAYER_PATH=F:\Projects\Vulkan-LoaderAndValidationLayers\build\layers\Debug

当我启动我的应用程序时,它会一直运行,直到它尝试创建实例,然后它会返回VK_ERROR_LAYER_NOT_PRESENT,我可以在 Visual Studio 的输出窗口中看到 dll 确实根本没有加载。如果我只是将 Vulkan 二进制文件的“正常”路径放在上面的路径中,它就会再次正常工作。我已经检查过是否还有 .json 文件。如果我尝试使用 LoaderAndValidationLayers 文件夹中的 Release-DLL,也会出现此问题。

我究竟做错了什么?有谁知道如何使这项工作?

编辑:我发现这VK_LAYER_LUNARG_threading似乎是问题所在。如果我使用VK_LAYER_LUNARG_standard_validation它不会加载任何东西。如果我只是指定手动包含的所有层(在此处描述:https ://vulkan.lunarg.com/app/docs/v1.0.3.1/layers )而没有该VK_LAYER_LUNARG_threading层它可以正常工作。知道为什么会这样吗?

4

2 回答 2

1

看起来他们稍微改变了图层的名称。

这是对我有用的列表:

const char* enabledLayerNames[] = {
    "VK_LAYER_GOOGLE_threading",
    "VK_LAYER_GOOGLE_unique_objects",
    "VK_LAYER_LUNARG_api_dump",
    "VK_LAYER_LUNARG_device_limits",
    "VK_LAYER_LUNARG_draw_state",
    "VK_LAYER_LUNARG_image",
    "VK_LAYER_LUNARG_mem_tracker",
    "VK_LAYER_LUNARG_object_tracker",
    "VK_LAYER_LUNARG_param_checker",
    "VK_LAYER_LUNARG_screenshot",
    "VK_LAYER_LUNARG_swapchain",
//     "VK_LAYER_LUNARG_vktrace",
};

(我只是从文件中"name"获取字段。)"C:\VulkanSDK\1.0.5.0\Bin\VkLayer_*.json"

"VK_LAYER_LUNARG_vktrace"被评论,因为它在我的装备上引发错误VK_ERROR_INITIALIZATION_FAILED(“由于特定于实现的原因,无法完成对象的初始化”)。

您可能还想检查HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers注册表项是否具有正确的*.json文件路径

我的环境设置:

  • GPU Nvidia GeForce GT 730M(开普勒)
  • 操作系统:Windows 10 x64
  • 我首先安装了新的 Nvidia 驱动程序 v 364.51(勾选“干净安装”)
  • 卸载了 LunarG VulkanSDK 1.0.3 以及遗骸(使用 Revo Uninstaller)
  • 然后安装 LunarG VulkanSDK 1.0.5

PS我没有编辑任何文件,也没有注册表。我什至没有为 VS 2015 重新编译。而且它仍然以某种方式链接和工作。

PPS 我的物理设备报告 API 版本 1.0.4。

于 2016-03-12T17:35:25.077 回答
1

好的,我想我发现了问题。但我仍然不能 100% 确定为什么会发生这种情况。我比较了两个 VkLayer_threading.json 文件并注意到名称不同(我怀疑名称从版本 1.0.3 更改为 1.0.5)。

  • 1.0.3(“名称”:“VK_LAYER_LUNARG_threading”)-> 1.0.5(“名称”:“VK_LAYER_GOOGLE_threading”)

但即使我也在使用 Vulkan-LoaderAndValidationLayers 存储库(https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers)中的调试 vulkan-1.lib 加载器库,它仍然无法加载正确的库。

目前我最强烈的猜测是,由于适用于 Windows 的 SDK 仍在版本 1.0.3.1 上,它还在元层 (VK_LAYER_LUNARG_threading) 中使用旧名称,因此找不到新命名的层。我暂时编辑了 .json 文件,它又可以工作了。

编辑:我刚刚证实了我的猜测。在为 Windows 安装了最近发布的 1.0.5 SDK 更新后,我必须撤消上面的重命名才能让它再次工作。因此,在使用最新版本的 LoaderAndValidationLayers 存储库时要小心,因为它可能包含尚未反映在可用 SDK 版本中的更改。

于 2016-03-11T13:56:06.503 回答