常见问题解答
此页面列出了您在开发 Vulkan 应用程序时可能遇到的常见问题的解决方案。
我看不到来自验证层的任何消息/验证层不可用
首先,请确保在您的程序退出后保持终端打开,让验证层有机会打印错误。您可以通过在 Visual Studio 中使用 Ctrl-F5 而不是 F5 运行程序来实现这一点,在 Linux 上可以通过从终端窗口执行程序来实现。如果仍然没有消息,并且您确定已启用验证层,那么您应该按照此页面上的“验证安装”说明,确保正确安装了 Vulkan SDK。此外,请确保您的 SDK 版本至少为 1.1.106.0,以支持 VK_LAYER_KHRONOS_validation
层。
vkCreateSwapchainKHR 在 SteamOverlayVulkanLayer64.dll 中触发错误
这似乎是 Steam 客户端测试版中的兼容性问题。有几种可能的解决方法:* 退出 Steam 测试版计划。* 将 DISABLE_VK_LAYER_VALVE_steam_overlay_1
环境变量设置为 1
* 删除注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers
下的 Steam 覆盖 Vulkan 层条目
示例

vkCreateInstance 失败,并显示 VK_ERROR_INCOMPATIBLE_DRIVER
如果您在 MacOS 上使用最新的 MoltenVK SDK,则 vkCreateInstance
可能会返回 VK_ERROR_INCOMPATIBLE_DRIVER
错误。这是因为Vulkan SDK 1.3.216 或更高版本要求您启用 VK_KHR_PORTABILITY_subset
扩展才能使用 MoltenVK,因为它目前不完全符合规范。
您必须将 VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR
标志添加到您的 VkInstanceCreateInfo
,并将 VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME
添加到您的实例扩展列表中。
代码示例
...
std::vector<const char*> requiredExtensions;
for(uint32_t i = 0; i < glfwExtensionCount; i++) {
requiredExtensions.emplace_back(glfwExtensions[i]);
}
requiredExtensions.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
createInfo.flags |= VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR;
createInfo.enabledExtensionCount = (uint32_t) requiredExtensions.size();
createInfo.ppEnabledExtensionNames = requiredExtensions.data();
if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
throw std::runtime_error("failed to create instance!");
}