我目前正在尝试强制Visual Studio使用Vulkan的调试层dll,但不知何故它无法加载库。 我的步骤是:
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
图层,它确实可以正常工作。知道为什么会这样吗?
答案 0 :(得分:1)
好吧我想我发现了问题。但我仍然不能100%确定为什么会这样。 我比较了两个VkLayer_threading.json文件并注意到名称不同(我怀疑名称从版本1.0.3更改为1.0.5)。
但即使我也使用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
文件的正确路径
我的环境设置:
P.S。我没有编辑任何文件,也没有编辑注册表。我甚至没有为VS 2015重新编译。它仍然以某种方式链接和工作。
P.P.S。我的物理设备报告API版本1.0.4。