在VS 2015中加载调试层(VK_ERROR_LAYER_NOT_PRESENT)

时间:2016-03-11 11:50:59

标签: visual-studio vulkan

我目前正在尝试强制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
  4. 当我启动我的应用程序时,它会一直运行,直到它尝试创建实例,然后返回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图层,它确实可以正常工作。知道为什么会这样吗?

2 个答案:

答案 0 :(得分:1)

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

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

但即使我也使用Vulkan-LoaderAndValidationLayers repo(https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers)中的debug vulkan-1.lib加载程序库,它仍然无法加载正确的库。

我目前最强烈的猜测是,由于SDK for Windows仍然是1.0.3.1版本,它仍然使用元层内的旧名称(VK_LAYER_LUNARG_threading),因此找不到新命名的图层。我暂时编辑了.json文件,它再次起作用。

编辑:我刚刚确认了我的猜测。安装最近发布的适用于Windows的1.0.5 SDK更新后,我不得不撤消上面的重命名以使其再次运行。因此,在使用最新版本的LoaderAndValidationLayers repo时要小心,因为它可能包含尚未反映在可用SDK版本中的更改。

答案 1 :(得分: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

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

P.P.S。我的物理设备报告API版本1.0.4。