常见问题解答

此页面列出了您在开发 Vulkan 应用程序时可能遇到的常见问题的解决方案。

我在核心验证层中收到访问冲突错误

请确保 MSI Afterburner / RivaTuner Statistics Server 没有运行,因为它与 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 层条目

示例

steam layers env

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!");
}