本页列出了在开发 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 客户端 Beta 版中的兼容性问题。以下是一些可能的解决方法:* 退出 Steam Beta 测试计划。* 将 DISABLE_VK_LAYER_VALVE_steam_overlay_1 环境变量设置为 1 * 删除注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers 下的 Steam 覆盖 Vulkan 层条目

示例

vkCreateInstance 因 VK_ERROR_INCOMPATIBLE_DRIVER 而失败

如果您正在使用带有最新 MoltenVK SDK 的 MacOS,则 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!");
}